![]() |
Selstart SelLength
Hi
Code:
with edit1 do
begin SelStart := 10; SelLength := 1; font.color := clblue; end; Frage wieso macht der mir dann das gesamte Textfeld Blau, wenn ich doch sage das er mir nur die 10 Position Färben soll. Wenn ich anstelle Font.color ----> CopyToClipboard eintrage, Kopiert der mir ja auch nur die eine Position. Was mach denn da Falsch. Danke schon mal im Voraus |
ich glaube in einem Edit Feld kannst du nur eine Farbe haben, oder irre ich mich da?
|
Wenn ich das ganze mit einer Memo oder RichEdit mache passiert das selbe. :(
|
im Memo geht das glaube ich auch nicht, aber in einem RichEdit sollte das gehen!
Im Demo Ordner hat es ein Beispiel, mit einer Richedit, vielleicht hilft das. |
hi nochmals
Code:
RichEdit.SelStart := 2;
RichEdit.SelLength := 5; RichEdit.SelAttributes.Color := clred; |
Im Richedit kann es auch nicht klappen, da mit TRichEdit.Color die Hintergrundfarbe gemeint ist. Wenn dann so:
Code:
Gruß, Sebastian
Richedit1.SelAttributes.Color := clLime;
|
hab ich ja geschrieben, oder?
|
Ich danke
Funzt perfect :bounce1: |
Zitat:
Zitat:
War nur leider etwas zu spät. Gruß, Sebastian |
kein Problem!
|
Hi ich muß noch mal stören
Code:
richedit1.Text := edit3.text + edit1.Text + edit5.Text;
So das Problem das ich es mit Selstart und Sellength nich geht da ich nich bedacht hatte das die einträge unterschiedliche längen haben. Wie könnte mann es noch machen das im Richedit1.text der eintrag vom edit3 Blau vom edit1 meinetwegen Rot und edit5 Gelb dargestellt wird. Sorry ich noch blutiger anfänger und in dem Buch was ich besitze steht nichts darüber. Ich würde mich freuen wenn mir einer Helfen könnte |
hi, könntest es, wenn ich dich richtig verstanden habe, zum Beispiel so machen.
Code:
Mirilin
procedure TMainForm.ButtonCClick(Sender: TObject);
var l1,l2,l3 : Integer; s1,s2,s3 : String; const c1 : TColor = clRed; c2 : TColor = clGreen; c3 : TColor = clBlue; begin RichEdit.Lines.Clear; s1 := Edit1.Text; s2 := Edit2.Text; s3 := Edit3.Text; l1 := length(s1); l2 := length(s2); l3 := length(s3); RichEdit.Text := s1+s2+s3; RichEdit.SelStart := 0; RichEdit.SelLength := l1; RichEdit.SelAttributes.Color := c1; RichEdit.SelStart := l1; RichEdit.SelLength := l2; RichEdit.SelAttributes.Color := c2; RichEdit.SelStart := l1+l2; RichEdit.SelLength := l3; RichEdit.SelAttributes.Color := c3; end; |
Vielen Vielen Dank!
Hat super geklappt genauso wie ich mir das vorgestellt Hatte. |
Re: Selstart SelLength
Hallo Leute!
Ich habe auch das Problem auch. Ich schreibe momentan ein Chatprogramm und da wird durch einen Druck auf >Enter< eine Zeile zu RichEdit hinzugefügt und dann soll sie eingefärbt werden. Mein Quelltext sieht so aus:
Delphi-Quellcode:
Durch einen ColorDialog wird die Farbe von Label1 auf die gewünschte Farbe eingestellt.
var
MyLines: Integer; begin with RichEdit1 do MyLines := RichEdit1.Lines.Count; //Zeilen zählen RichEdit1.Lines.Add(Edit1.Text); //Edit1.Text hinzufügen RichEdit1.SelStart := Mylines; //Start der Markierung festlegen RichEdit1.SelLength := Length(Edit1.Text); //Länge festlegen RichEdit1.SelAttributes.Color := Label1.Font.Color; //Farbe ändern Edit1.Clear; end; Ich habe das mal durchgechecked(im Quelltexteditor den Punkt vor die Linie gesetzt), nachdem ich das Projekt nach der letzten Zeile Quelltext weiter laufen lassen habe, wird die Zeile hinzugefügt, kann es damit zusammen hängen, dass die Zeile erst hinzugefügt wird, wenn die eigentliche Arbeit schon zu ende ist? :freak: |
Re: Selstart SelLength
Moin F.W.,
Zitat:
Dazu könntest Du jetzt, vor dem hinzufügen der neuen Zeile, in einer Schleife die ganzen Zeilenlängen zusammenaddieren (nicht zu vergessen +2 je Zeile, da die nicht sichtbaren Zeilenendezeichen #13#10 hierbei mitzählen). Eine andere Variante SelStart zu ermitteln wäre die Message EM_LINEINDEX. Diese muss allerdings nach dem hinzufügen der neuen Zeile an das RichEdit gesendet werden.
Delphi-Quellcode:
Mit anderen Worten:
RichEdit1.SelStart := SendMessage(RichEdit1.Handle,EM_LINEINDEX,RichEdit1.Lines.Count-1,0);
Du lässt einfach diese Zeile weg
Delphi-Quellcode:
und tauscht die SelStart Zeile durch die oben genannte aus.
MyLines := RichEdit1.Lines.Count; //Zeilen zählen
Vielleicht solltest Du SelLength am Schluss auch noch wieder auf 0 setzen, damit die Markierung verschwindet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz