![]() |
Text in Richedit anklicken
Hallo,
ich schreibe gerade an einem kleinen Chat. Ich verwende zum Anzeigen des Textes ein TJvRichEdit. Der Text ist so formatiert: Name: Text Jetzt möchte ich den Namen gerne anklickbar machen so wie bei URLs. Wie könnte ich das am besten anstellen? |
Re: Text in Richedit anklicken
Einer ne Ahnung wie ich das machen könnte?
|
Re: Text in Richedit anklicken
Nur so eine Idee..
Du könntenst anhand deiner Cursor Position das wort bestimmen. Und bei einem DbClick Event dann eben schauen was das für ein Wort ist das du makiert hast.. Gruß, Real-TTX |
Re: Text in Richedit anklicken
Hi!
Zu Richedit und Links solltest du mit der Suche hier einiges finden können! Grüße, Frederic |
Re: Text in Richedit anklicken
Ja ich will aber keine Links highlighten sondern die Namen.
|
Re: Text in Richedit anklicken
Das ist mir schon klar - aber du kannst die Namen ja als Link kennzeichnen.
|
Re: Text in Richedit anklicken
Ok soweit funktioniert das, aber wie kann ich einen Text manuell als Link markieren?
Und ich bin noch dabei den ersten Teil des Textes zu färben. Also ungefähr so: Mustermann: Hallo Aber wie kann ich das in dem Richedit machen? Ich habs zum testen einmal so versucht funtzt aber nicht:
Delphi-Quellcode:
Leider wird dadurch der gesamte Text grün
procedure AddColoredLine(ARichEdit: TTransparentRichEdit; AText: string);
begin with ARichEdit do begin ARichEdit.SelStart := 0; ARichEdit.SelLength := 3; SelAttributes.Color := clred; ARichEdit.SelStart := 4; ARichEdit.SelLength := 7; SelAttributes.Color := clgreen; Lines.Add(AText); end; end; |
Re: Text in Richedit anklicken
So also ich hab jetzt das was du willst mal mit einem normalen RichEdit versucht und habs hinbekommen das wenn die Mouse über dem Text ist er es anders darstellt
Delphi-Quellcode:
Ich hoffe ich konnte dir helfen, hab mich schnell daran gesetzt :coder: , weil es mal eine kleine herausforderung für mich war dies rauszufinden. Ich hoffe es klappt.
var Test : TSize;
Rect1 : TRect; TextHöhe : Integer; Zeile : Integer; Text1 : String; begin Zeile := 1; //Zeile in der der Text steht (Index der Linesliste +1 des RichEdits) Text1 := 'Hi' //Text, der angeklickt werden soll GetTextExtentPoint32(GetDC(RichEdit1.Handle), Text1, Length(Text1), Test); //WinApi Funktion, welche die Höhe und die Breite des Textes ausgibt TextHöhe := -RichEdit1.Font.Height; //Höhe der Schrift allgemein Rect1 := Rect(0,(Zeile-1)*TextHöhe,Test.cx,Zeile*TextHöhe + Test.cy); //Bereich festlegen, wo der Text ist, dabei sit vorausgesetz das der Text immer vorne steht if (y >= Rect1.Top) and (y+TextHöhe <= Rect1.Bottom) and (x <= Rect1.Right) then //Überprüfung ob die Mouse in Rect (speicher am besten x,y von MouseMove und setze //die Variable für X und Y ein, wenn du die Anweisung hier in DbClick einfügst begin //hier der Code, wenn die Mouse auf dem Text ist. //z.b. RichEdit1.SelStart := 0; RichEdit1.SelLength := Length(Text1); RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsUnderline];} end else begin //und hier schreibste rein wie er normal aussehen soll. //z.b. {RichEdit1.SelStart := 0; RichEdit1.SelLength := 4; RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsUnderline];} end; Bei mir klappte es, als ich 2 Zeilen hatte und der Text in der ersten Zeile war. Und hatte den Code bei MouseMove drin. Gruß NickelM |
Re: Text in Richedit anklicken
Hallo,
Zitat:
-> Selstart auf das Ende des Textes -> SelAttributes setzen -> add(..) |
Re: Text in Richedit anklicken
Ok das funktioniert schon ganz gut hab das noch ein wenig abgeändert da es sonst am flackern ist:
Delphi-Quellcode:
Jetzt muss ich nur rausfinden wie ich die namen einmalig kennzeichnen kann.
var Test : TSize;
Rect1 : TRect; TextHöhe : Integer; Zeile : Integer; Text1 : String; begin Zeile := 1; //Zeile in der der Text steht (Index der Linesliste +1 des RichEdits) Text1 := 'Hi'; //Text, der angeklickt werden soll GetTextExtentPoint32(GetDC(JvRichEdit1.Handle), Text1, Length(Text1), Test); //WinApi Funktion, welche die Höhe und die Breite des Textes ausgibt TextHöhe := -JvRichEdit1.Font.Height; //Höhe der Schrift allgemein Rect1 := Rect(0,(Zeile-1)*TextHöhe,Test.cx,Zeile*TextHöhe + Test.cy); //Bereich festlegen, wo der Text ist, dabei sit vorausgesetz das der Text immer vorne steht if (y >= Rect1.Top) and (y+TextHöhe <= Rect1.Bottom) and (x <= Rect1.Right) then //Überprüfung ob die Mouse in Rect (speicher am besten x,y von MouseMove und setze //die Variable für X und Y ein, wenn du die Anweisung hier in DbClick einfügst begin //hier der Code, wenn die Mouse auf dem Text ist. //z.b. JvRichEdit1.SelStart := 0; JvRichEdit1.SelLength := Length(Text1); if not (fsUnderline in JvRichEdit1.SelAttributes.Style) then begin JvRichEdit1.SelAttributes.Style := JvRichEdit1.SelAttributes.Style + [fsUnderline]; end; JvRichEdit1.Cursor:=crHandpoint; end else begin //und hier schreibste rein wie er normal aussehen soll. //z.b. JvRichEdit1.SelStart := 0; JvRichEdit1.SelLength := Length(Text1); if fsUnderline in JvRichEdit1.SelAttributes.Style then begin JvRichEdit1.SelAttributes.Style := JvRichEdit1.SelAttributes.Style - [fsUnderline]; JvRichEdit1.Cursor:=crDefault; end; end; end; Ich habe mir gedacht, dass ich so ne art dummyzeichen vor und hinter dem namen setzte. Ungefähr so: #13+Username+#13 Nur was kann ich da für zeichen nehmen, da #13 ja ein zeilenumbruch macht kann ich das nicht nehmen. Und noch ein Problem ich müsste jetzt noch verhinden, dass man den Text markieren kann, da es sonst zu fehlern kommt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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 by Thomas Breitkreuz