var Test : TSize;
Rect1 : TRect;
TextHoehe : Integer;
Zeile : Integer;
Text1 :
String;
SelStart1,SelLenght1 : Integer;
begin
for Zeile := 0
to RichEdit1.Lines.Count -1
do
begin //Zeile in der der Text steht (Index der Linesliste +1 des RichEdits)
Text1 := Copy(RichEdit1.Lines[Zeile],1,Pos('
:',RichEdit1.Lines[Zeile])-2);
//Text in der Zeile der Vorne steht;
GetTextExtentPoint32(GetDC(RichEdit1.Handle), PChar(Text1), Length(Text1), Test);
//WinApi Funktion, welche die Höhe und die Breite des Textes ausgibt
TextHoehe := -RichEdit1.Font.Height;
//Höhe der Schrift allgemein
Rect1 := Rect(0,Zeile*TextHoehe,Test.cx,Zeile*TextHoehe + TextHoehe);
//Bereich festlegen, wo der Text ist, dabei sit vorausgesetz das der Text immer vorne steht
if (y >= Rect1.Top)
and (y <= 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
if (SelectRect.Top <> Rect1.Top)
and (SelectRect.Bottom <> Rect1.Bottom)
then
begin
SelectRect.Top := Rect1.Top;
SelectRect.Bottom := Rect1.Bottom;
SelStart1 := RichEdit1.SelStart;
SelLenght1 := RichEdit1.SelLength;
RichEdit1.SelStart := SendMessage(RichEdit1.Handle, EM_LINEINDEX, Zeile, 0);;
RichEdit1.SelLength := Length(Text1);
if not (fsUnderline
in RichEdit1.SelAttributes.Style)
then
RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style + [fsUnderline];
RichEdit1.Cursor:=crHandpoint;
RichEdit1.SelStart := SelStart1;
RichEdit1.SelLength := SelLenght1;
end;
end
else
begin
SelStart1 := RichEdit1.SelStart;
SelLenght1 := RichEdit1.SelLength;
RichEdit1.SelStart := SendMessage(RichEdit1.Handle, EM_LINEINDEX, Zeile, 0);;
RichEdit1.SelLength := Length(Text1);
if fsUnderline
in RichEdit1.SelAttributes.Style
then
RichEdit1.SelAttributes.Style := RichEdit1.SelAttributes.Style - [fsUnderline];
RichEdit1.Cursor:=crDefault;
RichEdit1.SelStart := SelStart1;
RichEdit1.SelLength := SelLenght1;
end;
end;
end;