Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Text in Richedit anklicken (https://www.delphipraxis.net/137004-text-richedit-anklicken.html)

XXcD 12. Jul 2009 00:22


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?

XXcD 12. Jul 2009 19:47

Re: Text in Richedit anklicken
 
Einer ne Ahnung wie ich das machen könnte?

Real-TTX 12. Jul 2009 21:00

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

fkerber 12. Jul 2009 21:31

Re: Text in Richedit anklicken
 
Hi!

Zu Richedit und Links solltest du mit der Suche hier einiges finden können!


Grüße, Frederic

XXcD 12. Jul 2009 22:19

Re: Text in Richedit anklicken
 
Ja ich will aber keine Links highlighten sondern die Namen.

fkerber 12. Jul 2009 22:34

Re: Text in Richedit anklicken
 
Das ist mir schon klar - aber du kannst die Namen ja als Link kennzeichnen.

XXcD 12. Jul 2009 23:46

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:
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;
Leider wird dadurch der gesamte Text grün

NickelM 13. Jul 2009 05:04

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:
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 :coder: , 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

Lannes 13. Jul 2009 10:48

Re: Text in Richedit anklicken
 
Hallo,

Zitat:

Zitat von XXcD
Leider wird dadurch der gesamte Text grün

nicht der gesamte Text, nur der hinzugefügte, und auch nur dann wenn das letzte Zeichen im RichEdit in dem Bereich(4-11) liegt den Du grün einfärbst. Bevor Du mit add etwas hinzufügst musst Du SelAtrributes auf die gewünschte Farbe setzen.
-> Selstart auf das Ende des Textes
-> SelAttributes setzen
-> add(..)

XXcD 13. Jul 2009 12:28

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:
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;
Jetzt muss ich nur rausfinden wie ich die namen einmalig kennzeichnen kann.
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 13:18 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz