SynEdit kolorowanie słów

0

Na formie mam 3 komponenty:
synedit (edytor tekstu)
memo1 (lista słów 1)
memo2 (lista słów 2)

Ktoś może wie jak w komponencie synedit pokolorować określone słowa w pisanym tekście
np. chciałbym aby słowa wpisane w komponent memo1 były kolorowane na zielono
a słowa pisane w memo2 były kolorowane na czerwono

Jak zmieni się lista słów w którymkolwiek memoX to i modyfikowana jest zawartość synedit

0

Nie da się niestety, a przynajmniej ja nie umiem, a używam wersji 2.0.5.
Zobacz sobie na dołączone demo w podkatalogu MultiSynDemo. I wynika z
niego, że można ustawić tylko jeden kolor dla TSynGeneralSyn, a jeżeli w
programie używamy też TSynMultiSyn, to można w nim ustawić domyślny
komponent kolorowania składni, ale pozostałe komponenty w Schemes to
już muszą mieć podane początki i - opcjonalnie - końce znaczników kodu.
Mozna w nich stosować wyrażnia regularne. Ale nic ponadto się chyba na
chwilę obecną nie da wykombinować. Bo pokoloruje Tobie wurazy między
dwoma blokami jeżeli będzie na przyklad [cosik] i [/cosik]. Ale mogę się
tutaj mylić. Może ktoś tutaj jeszcze coś jeszcze Tobie doradzi z SynEdit.

0

Dawno SynEdit używałem – ale z całą pewnością kolorowałem określone słowa, liczby itp.
Nie jestem pewien (nie pamiętam) czy dałoby się dynamicznie ustalać listę słów kluczowych.

0

Dynamicznie się da bo jest własność KeyWords. Problem jest tylko,
gdy chcemy mieć więcej niż jedno TSynGeneralSyn w TSynMultiSyn
wtedy działa tylko jedno z nich, drugie jest ignorowane jeśli nie ma
podanego słowa początkowego i ewentualnie koncowego od skladni.

0

Jeśli lista słów jest stała, to najlepiej napisać własnego Highlightera. Gdzieś w demosach jest aplikacja generująca odpowiedni kod i opis co trzeba zrobić.

0

W SynEdit na pewno da sie zrobić kolorowanie oreślonych słow bo ja tak robię

Co jest potrzebne:
Synedit + unihighlighter

unihighlighter zawiera klasę TSynUniSyn = class(TSynCustomHighlighter)
i umożliwia ona tworzenie dynamiczne regół

np. tak:

var
SynUniSyn1: TSynUniSyn;
kw:TSynSymbolGroup;
t: TstringList; //lista słów

kw:=TSynSymbolGroup.Create('',TSynHighlighterAttributes.Create('unknown'));
kw.Name:='Example 1';
kw.Attribs.Foreground := JvColorComboBox2.Selected;
kw.Attribs.Background := JvColorComboBox1.Selected;

kw.KeywordsList.assign(t);

SynUniSyn1.MainRules.AddSymbolGroup(kw);

0

Aha !
Jest mały problem, bo komponent nie działa w delphi 2010 :(
I to jest spory problem

0

kiedys cos z tym pisalem i z tego co pamietam to do SynEdita byl SynHighlighter.
Tam sie ustawialo co ma byc kolorowane i jak

podczepiales tylko

  FHighlighter := TSynHighlighter.Create(Self);
  FSynEdit1.Highlighter := FHighlighter;
1

Możesz wykorzystać zwykły TRichEdit i według wyjątków (składni) kolorować w dowolnej formie zdefiniowane przez siebie słowa.

uses
 StrUtils;
 
{{Konwertuje i koloruje wczytany kod źródłowy}
procedure TFormApp1.KonwertujKod(const Lista: TStringList);
const
 {Mniej powszechne zostały wykomentowane, aby przyśpieszyć konwersję}
 Keywords: array[0..36] of string = (//'abstract'
                                      'and'
                                     ,'array'
                                     ,'as'
                                     ,'begin'
                                     ,'case'
                                     //,'class'
                                     ,'const'
                                     //,'constructor'
                                     //,'deprecated'
                                     //,'destructor'
                                     ,'div'
                                     ,'do'
                                     ,'downto'
                                     ,'else'
                                     ,'end'
                                     ,'except'
                                     //,'export'
                                     //,'file'
                                     ,'finally'
                                     ,'for'
                                     ,'function'
                                     //,'goto'
                                     ,'if'
                                     //,'implementation'
                                     ,'in'
                                     //,'inherited'
                                     //,'initialization'
                                     //,'interface'
                                     ,'is'
                                     //,'library'
                                     //,'message'
                                     //,'mod'
                                     ,'nil'
                                     ,'not'
                                     //,'object'
                                     ,'of'
                                     ,'on'
                                     ,'or'
                                     //,'overload'
                                     //,'override'
                                     //,'packed'
                                     //,'platform'
                                     //,'private'
                                     ,'procedure'
                                     //,'program'
                                     //,'property'
                                     //,'protected'
                                     //,'public'
                                     //,'published'
                                     ,'raise'
                                     ,'record'
                                     ,'repeat'
                                     ,'set'
                                     ,'shl'
                                     ,'shr'
                                     //,'string'
                                     ,'then'
                                     //,'threadvar'
                                     ,'to'
                                     ,'try'
                                     //,'type'
                                     //,'unit'
                                     ,'until'
                                     //,'uses'
                                     ,'var'
                                     //,'virtual'
                                     ,'while'
                                     ,'with'
                                     //,'xor'
                                     );

 //Arithmetics: array[0..9] of string = (';','>','<','[',']','+','=',':','*','/');
 Numbers: array[0..11] of string = ('0','1','2','3','4','5','6','7','8','9','.',',');
var
 s: string;
 Pomin: Boolean;
 i, nPos1, nPos2: SmallInt;
begin
 RE_Kod.Clear;
 RE_Kod.Repaint;
 RE_Kod.Refresh;

 {Wczytanie ze StringList}
 RE_Kod.Lines.AddStrings(Lista);

 {Kolorowanie kodu - słowa kluczowe}
 for s in Keywords do
   begin
    i := 1;
    Application.ProcessMessages;
    repeat
     Pomin := False;
     nPos1 := PosEx(s, RE_Kod.Text, i);
     if Copy(RE_Kod.Text, nPos1-1, 1)[1] in ['A'..'Z','a'..'z'] then Pomin := True;
     if not Pomin then
       begin
        RE_Kod.SelAttributes.Color := $00FF8000;
        RE_Kod.SelAttributes.Style := [fsBold];
        RE_Kod.SelStart  := nPos1-1;
        RE_Kod.SelLength := Length(s);
       end;
     i := nPos1 + Length(s);

     RE_Kod.SelAttributes.Color := clBlack;
     RE_Kod.SelAttributes.Style := [];
    until nPos1 = 0;
   end;

 {Kolorowanie kodu - Liczby}
 for s in Numbers do
   begin
    i := 1;
    Application.ProcessMessages;
    repeat
     nPos1 := PosEx(s, RE_Kod.Text, i);
     RE_Kod.SelAttributes.Color := $000071E1;
     RE_Kod.SelStart  := nPos1-1;
     RE_Kod.SelLength := Length(s);
     i := nPos1 + Length(s);

     RE_Kod.SelAttributes.Color := clBlack;
     RE_Kod.SelAttributes.Style := [];
    until nPos1 = 0;
   end;
 (*
 {Kolorowanie kodu - Operatory artmetyczne}
 for s in Arithmetics do
   begin
    i := 1;
    Application.ProcessMessages;
    repeat
     nPos1 := PosEx(s, RE_Kod.Text, i);
     RE_Kod.SelAttributes.Color := clPurple;
     RE_Kod.SelStart  := nPos1-1;
     RE_Kod.SelLength := Length(s);
     i := nPos1 + Length(s);

     RE_Kod.SelAttributes.Color := clBlack;
     RE_Kod.SelAttributes.Style := [];
    until nPos1 = 0;
   end;
 *)
 {Kolorowanie kodu - Komentarze}
 i := 1;
 repeat
  nPos1 := PosEx('{', RE_Kod.Text, i);
  RE_Kod.SelAttributes.Color := clGreen;
  RE_Kod.SelAttributes.Style := [fsItalic];
  RE_Kod.SelStart  := nPos1-1;
  nPos2 := PosEx('}', RE_Kod.Text, nPos1) + 1;
  RE_Kod.SelLength := nPos2 - nPos1;
  i := nPos2 + 1;

  RE_Kod.SelAttributes.Color := clBlack;
  RE_Kod.SelAttributes.Style := [];
 until nPos1 = 0;
end; 

1 użytkowników online, w tym zalogowanych: 0, gości: 1