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:
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;
Ich hoffe ich konnte dir helfen, hab mich schnell daran gesetzt
, weil es mal eine kleine herausforderung für mich war dies rauszufinden. Ich hoffe es klappt.
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