Delphi-PRAXiS

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/)
-   -   Text (Emailadressen) in TEdit unterstreichen (https://www.delphipraxis.net/153272-text-emailadressen-tedit-unterstreichen.html)

TheProfi 27. Jul 2010 16:25

Text (Emailadressen) in TEdit unterstreichen
 
Moin zusammen,

ich bin dabei ein Programm zu schreiben in dem man Aufgaben via Email zeitgesteuert verschicken kann. Nun möchte ich gerne wie bei Outlook die Emailadressen auswählen und in das Tedit schreiben. Dies geht alles. Allerdings möchte ich gerne, dass die Emailadressen im TEdit unterstrichen sind und man sie mit einem Mausklick auswählen kann, wenn man löscht soll die Email vollständig gelöscht werden etc.

Bsp. wie es im TEdit erscheinen soll: willi@test.de ; herbert@test.de ; nadine@test.de

und hier scheiter ich :cry:. Hat jemand eine Idee? :idea:

Gruß

himitsu 27. Jul 2010 16:37

AW: Text (Emailadressen) in TEdit unterstreichen
 
Verwende statt des Edit ein TRichEdit (oder Verwandte), dort kannst du sowas machen.

Falls es nicht unbedingt ein Edit sein muß, dann annst du auch das TLinkLabel von Delphi 2010 verwenden, dieses kennt den HTML-Link-Code <a>

implementation 27. Jul 2010 21:12

AW: Text (Emailadressen) in TEdit unterstreichen
 
Du könntest auch das TEdit selber zeichnen.

TheProfi 28. Jul 2010 08:40

AW: Text (Emailadressen) in TEdit unterstreichen
 
Zitat:

Zitat von implementation (Beitrag 1037950)
Du könntest auch das TEdit selber zeichnen.

Wie meinst du das?

implementation 28. Jul 2010 10:49

AW: Text (Emailadressen) in TEdit unterstreichen
 
Ich war mir sicher, dass die VCL sowas wie ein OwnerDraw-Event anböte.
Jetzt habe ich in Lazarus nachgesehen (hab nunmal grad kein Delphi) und gesehen, dass zumindest die LCL keines hat.
D.h., dass du da mit Win32API-Subclassing-Konstrukten ran müsstest.
(dazu gibt's hier von Luckie auch ein gutes Tutorial ;))

Demnach wäre himitsu's Lösung deutlich schneller und einfacher anzuwenden.

TheProfi 28. Jul 2010 16:06

AW: Text (Emailadressen) in TEdit unterstreichen
 
Erstmal danke für Eure Antworten.
Hab mich nun doch für eine andere Lösung entschieden. Noch nicht ganz ausgereift aber...

Ich nehme ein EDIT von TADVEdit aus den TMS-Komponenten (bin Kunde).

Beispieltext für das Edit: '12345; 67890; 123456; 98765'

Delphi-Quellcode:
function PosExReverse(substr, str: string; Indexpos : integer): integer;
var x : integer;
begin
  x := length(str)-Indexpos+1; //Positionen im String müssen auch reverse sein
  x := posex(substr,AnsiReverseString(str),x);
  if x = 0 then x := length(str)+1;
  result := length(str)-x+1; //Position zurückdrehen und Ergebnis zurückliefern
end;

procedure TForm5.Edit1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var mp  : Tpoint;
    mpxe,          //Ende des markierten Textes
    mpxb,          //Beginn des markierten Textes
    mpxs : integer; //ermittelte Indexposition aus dem Mausklick
begin
  mp.X := x; //Mauskoordinate X in Point
  mp.Y := y; //Mauskoordinate Y in Point
  mpxs := Edit1.CharFromPos(mp); //aktuelle Indexposition aus dem Edit holen
  //so nun müssen wir den anfang finden
  mpxb := PosExReverse(';',edit1.Text,mpxs); //Beginn ermitteln

  //und nun das ende finden
  mpxe := posex(';',edit1.Text,mpxs);

  //und nun den Text zwischen den Semikolons markieren
  edit1.SelStart := mpxb;
  edit1.SelLength := mpxe-mpxb-1;
  label1.Caption := trim(edit1.SelText); //das Ergebnis extra anzeigen bzw. weiterverwenden
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 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