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/)
-   -   Delphi Komponente gesucht: TParameterListBox (https://www.delphipraxis.net/94726-komponente-gesucht-tparameterlistbox.html)

Codewalker 26. Jun 2007 07:46


Komponente gesucht: TParameterListBox
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin zusammen.

Ich suche eine (freie) Komponente ähnlich des Regeleditors aus Outlook bzw. des Starcraft-Editors. Das ganze ist ein Memo, das verschiedene "Links" anzeigt, über die andere Fenster aufgerufen werden können. Ich habe das ganze von TMS gefunden, aber da kostet der Spaß 40€. Kennt vielleicht jemand eine Quelle wo man das umsonst bekommt?

glkgereon 26. Jun 2007 08:40

Re: Komponente gesucht: TParameterListBox
 
das müsste die JvMemo können...
die hat glaub ich ein OnLinkClick oder sowas.
Ich habe es jedenfalls schonmal benutzt.
Falls ich falsch liege gucke ich heute nachmittag nochmal nach...

Codewalker 26. Jun 2007 08:42

Re: Komponente gesucht: TParameterListBox
 
klingt schon mal gut. Werde ich mir mal anschauen. Wenn du sagst, du hast es schon mal benutzt, kannst du mir doch auch bestimmt sagen, wie ich einen solchen Link anlegen kann

glkgereon 26. Jun 2007 08:47

Re: Komponente gesucht: TParameterListBox
 
Zitat:

Zitat von Codewalker
klingt schon mal gut. Werde ich mir mal anschauen. Wenn du sagst, du hast es schon mal benutzt, kannst du mir doch auch bestimmt sagen, wie ich einen solchen Link anlegen kann

Überredet :-)
Du kannst von Glück sagen dass ich noch genau weiss in welchem Projekt^^

*Quelltext kopier*

Komponente: TJvRichEdit
Event: OnURLClick
Delphi-Quellcode:
procedure TForm_Main.Rch_InfoURLClick(Sender: TObject; const URLText: string; Button: TMouseButton);
//EMail senden
begin
  case Button of
    mbLeft:SendMail('Feedback zu "'+cAppTitle+'"','','*email*','*email*',True);
  end;
end;
Den Maillink habe ich einfach als String "mailto:abc@def.gh" reingeschrieben...
musst mal gucken was man da basteln kann.

es kann aber auch sein dass der wirklich nur links (mit .de und so) erkennt...

Codewalker 26. Jun 2007 08:54

Re: Komponente gesucht: TParameterListBox
 
Das war eine verdammt fixe Antwort :mrgreen:

Ich werd mal sehen, ob man das Richedit auch überreden kann, auch benutzerdefinierte Links anzunehmen

Codewalker 26. Jun 2007 13:09

Re: Komponente gesucht: TParameterListBox
 
Liste der Anhänge anzeigen (Anzahl: 3)
So, Lösung vorhanden dank guter Starthilfe.

Das JvRichEdit kann das tatsächlich, erkennt aber nur bestimmte Protokolle. Benutzerdefinierte Links kann man über das Boolean-Property "Link" von SeAttributes erstellen. Mein Problem war aber zusätzlich noch, dass OnURLClick nur den Text zurückliefert, aber nicht, an welcher Stelle oder (wenn das selbe Wort als Link mehrmals vorkommt) welches Wort angeklickt wurde.
Dazu habe ich die JvRichEdit.pas editiert und dem Event zusätzlich die Positionen des Wortes mitgegeben. Damit ist es nun ein Kinderspiel Links zu setzen und per Klick genau anzusprechen.

@glkgereon: Danke für die Hilfe, hat mir mehr als geholfen. So wusste ich auch, wo man suchen muss

glkgereon 26. Jun 2007 16:51

Re: Komponente gesucht: TParameterListBox
 
hmm, nicht schlecht, könnte man ja u.U. nochmal gebrauchen... :thumb:

Codewalker 29. Jun 2007 16:05

Re: Komponente gesucht: TParameterListBox
 
Liste der Anhänge anzeigen (Anzahl: 3)
So, da mir diese "Frickellösung" nicht wirklich gefallen hat und ich ja auch damit arbeiten muss und dem Cliché des "faulen Programmierer" nachkommen muss, habe ich das ganze mal in eine einfach zu nutzende Komponente gegossen.

Es verhält sich vollständig wie das bekannte JvRichEdit, unterstützt aber das einfügen von Text mit Links. Dazu müssen die Eigenschaften "OpenTag" und "CloseTag" gesetzt werden, z.B. auf "[" und "]". Alles zwischen den Klammern wird als Link erkannt.
Text wird dem RichEdit über die neue Funktion
Delphi-Quellcode:
procedure InsertText(FilterText: string; Bookmarks: array of String; BookmarkIDs: array of Integer);
zugewiesen. Filtertext ist der Text mit den kodierten Links, Bookmarks ein Array von Werten, die als Linktexte eingesetzt werden sollen und BookmarkIDs sind Zahlenwerte, die beim Klick auf den jeweiligen Link zurückgegeben werden. DAmit kann man sehr leicht ermitteln, welcher Link angeklickt worden ist und ebenso einfach auf mehrere Links identisch reagieren.


Ein einfaches Beispiel
Delphi-Quellcode:
const
 RULE_Switch_if_temp_Below = 'Schalte [Schalter] [Status], wenn Temperatur [Grenzwert] [Wechsel]';
 // Das ist der Text als Beispiel mit eckigen Klammern
Der Text wird mit
Delphi-Quellcode:
 ParamList.InsertText(RULE_Switch_if_temp_Below,['Schalter2','an','25°','überschreitet'],[10,20,50,80]);
zugewiesen.
Bei einem Klick auf den Link "25°" wird dann eine 50 zurückgegeben. Dies kann über das neue Ereignis "OnLinkClicked" ausgewertet werden und es kann der Linktext geändert werden.

Delphi-Quellcode:
procedure TForm1.RuleEditLinkClicked(BookmarkID, Position: Integer;
  var Text: string);
begin
 ShowMessage(IntToStr(BookmarkID));
 InputQuery('Text ändern','Text:',Text);
end;
Hier wird zuerst die Zahl (im Beispiel: 50) angezeigt und danach kann der Text nach belieben geändert werden. Der Einfachheit halber, habe ich ein Abbrechen der InputBox im Beispiel ignoriert.

Hoffe es nützt jemanden - bin für Fragen, Anregungen und Kritik immer zu haben.

Grüße aus dem Westen,

Thomas

EDIT: Für alle, die lieber interaktiv sind, habe ich eine kompilierte Demo angehangen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:39 Uhr.

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