Autor Beitrag
mambo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76

Win XP
D6 Prof
BeitragVerfasst: Mo 22.03.04 14:51 
Ich füge in meinem Programm in einen RichEdit eine Textzeile ein und möchte diesen Text z.B. in rot schreiben:

ausblenden 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:
var
  iSize: Integer;
  cColor: TColor;
begin

 // ... Color und Size festlegen

  with RichEdit do
  begin

    // Zeile hinzufügen
    Lines.Add(strText);

    pLine := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0);
    SelStart := Perform(EM_LINEINDEX, pLine - 10);

    // alles auswählen und Farbe und Größe einstellen
    SelStart := Perform(EM_LINEINDEX, pLine - 10);
    SelLength := Length(strText);
    SelAttributes.Color := cColor;
    SelAttributes.Size := iSize;

    Perform(EM_SCROLLCARET, 00);

  end;


So weit, so gut. Nur, wenn der Text so lang ist, dass er umgebrochen wird (WordWrap=True), d.h. also teilweise im RichEdit in eine neue Zeile kommt, dann funktioniert meine Prozedur nicht mehr. Nur die letzte Zeile wird dann rot geschrieben. Wie kann ich z.B. auf das SelStart kommen, indem ich die letzte Stelle MINUS die Länge des strText nehme ? Wäre doch einfacher als mit dem ganzen EM_LINEINDEX-Zeug, oder ? Ich weiß nur nicht wie ?
Oder hat jemand sonst noch eine Idee ?

Danke inzwischen
Heinz

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt

_________________
Es ist besser, Genossenes zu bereuen, als dass man nichts genossen hat.
Udontknow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2596

Win7
D2006 WIN32, .NET (C#)
BeitragVerfasst: Di 23.03.04 12:13 
Hallo!

Schmeiss das mit dem Perform raus; Setze doch einfach Selstart auf die Anzahl der im Richedit enthaltenen Zeichen vor dem Einfügen der Linie.

Cu,
Udontknow
SuperS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 102

Win XP Home, Win XP Prof, Win 98

BeitragVerfasst: Mi 24.03.04 20:21 
Ich hab da ne Idee, aber weiß nicht ob sie dir gefällt:
also
du erstellst ein Memo und tippst deinen Text in das memo ein.
Dann stellst du im Objektinspektor Visible auf false.
Erstelle eine ColorBox und stelle (ich weiß nicht genau wie das heißt) standartColor auf die gewünschte Farbe sodass sie angezeigt wird.
Den Wert True von Visible der ColorBox stellst du auf false.
Jetzt erstelle einen Button und mach ein OnClick-Ereigniss:

procedure TForm1.Button...
begin
Memo1.Text.Color:=ColorBox1.selected;
end;


Wenn was nicht stimmt sags mir.