Einzelnen Beitrag anzeigen

NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#23

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 18:41
So hmmm also nach langem hin und her hab ich es hinbekommen das er den Text unterstreichst aber der Cursor will net ändern....hm
Und wenn man auf das Memo klickt, wird ja SelStart und SelLenght gesetz welches ja beim MouseMove geändert wird wiederum, deshalb entsteht ein flackern
Vll bekommst du den Fehler raus.. hier der Code
Delphi-Quellcode:
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;
So hoffe ich konnte dir ein wenig Helfen..bin mit meinem Latein echt am ende.. Am Besten due Schreibst dir eine eigene Kompo, die den Normalen SelStart und SelLenght überschreibt....
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat