AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text in Richedit anklicken

Ein Thema von XXcD · begonnen am 12. Jul 2009 · letzter Beitrag vom 14. Jul 2009
 
NickelM

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

Re: Text in Richedit anklicken

  Alt 13. Jul 2009, 19: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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 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