Autor Beitrag
flexi24
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 27.04.07 16:39 
Hallo.
Nach langem vergeblichen Basteln schaffe ich es nicht folgendes Problem zu lösen:
Folgende Prozedur färbt die Wörter aus der Liste farbig (nur für die aktuelle zeile). für die erste zeile funktioniert das auch prima.
Wechsle ich in die nächste Zeile, so würde der cursor nach der Leertaste sofort wieder in die erste zeile springen.
Dies konnte ich mit der mit [SelStart := Editor.SelStart;] zwar verhindern, trotzdem färbt die prozedur wörter in der ersten zeile (ohne die zweite zu analysieren).
Meine Vermutung ist, dass ich editor.selstart immer entsprechend der aktuellen zeile aufrufen muss. Etwa editor.lines[y].selstart das geht aber nicht

Kann mir jemand helfen?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
procedure tmainform.ReserviertBold(key: char);
var x,y,a, i,j,match, selstart, sellength:integer;
w1,w2,w3,hlp:string;
c_zeichen:tcursor;
begin
   SelStart  := Editor.SelStart;
   SelLength := Editor.SelLength;

x:=editor.caretpos.x;
y:=editor.caretpos.y;
w2:=editor.lines[y]+key;
a:=length(w2);
if (x>0and (key=' 'then begin
c_zeichen:=editor.cursor;
 w1:='';
 j:=0;
   for i:=1 to a do begin
   if ((w2[i]<>' 'and (w2[i]<>'('))  then
   begin
     w1:=w1+w2[i];
   end
     else begin
    match:=findfromliste(liste,laenge,w1);
  
          editor.SelStart:=j;
       editor.SelLength:=length(w1);

       if (match>=0then begin
       if ord(key)=40  then editor.SelAttributes.Color:=funktionfarbe else
       editor.SelAttributes.Color:=liste[match+1].tokencolor;

       end else editor.SelAttributes.Color:=clblack;
       j:=j+length(w1)+1;
       w1:='';

       memo1.Text:=inttostr(editor.selstart)+memo1.text+'j';
     end;
     editor.SelStart := SelStart;
     editor.SelLength := SelLength;
   end;

end;
end;
ssb-blume
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 375
Erhaltene Danke: 7

XP, W7, W8
Deutschland
BeitragVerfasst: So 29.04.07 11:36 
Folgenden Algorithmus anwenden:

Die Liste durchsuchen und jedes Wort dann im mit "Find" suchen.
Dieses Wort ist damit bereits markiert (selstart und sellength gesetzt)
Deshalb braucht man dann nur seltext mit den gewünschten Attributen versehen.
Weiter mit searchnext und das selbe machen bis "notfound"
Selstart wieder auf 0 setzten und das nächste Wort....

_________________
Brain: an apparatus with which we think we think.