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/)
-   -   Komponente MDLabel: wie werde ich das Event OnLinkClicked los? (https://www.delphipraxis.net/204569-komponente-mdlabel-wie-werde-ich-das-event-onlinkclicked-los.html)

DieDolly 7. Jun 2020 17:31

Komponente MDLabel: wie werde ich das Event OnLinkClicked los?
 
Ich möchte gerne die Komponente MDLabel verwenden. Das ist ein HTML-Label bestehend aus nur einer einzigen Unit.
Mir gefällt die wirklich sehr.

Was mich aber stört ist das Event OnLinkClicked.

Hier ein Beispiel-Caption: Caption := 'Links are also supported. Please click either <a>here (1)</a> or <a>here (2)</a> or <a>here (3)</a> or <a:https://google.com>here</a>.';
Im OnLinkClicked kann man sich jetzt anzeigen lassen, was man geklickt hat. Es wird here (1), here (2), here (3) und https://google.com ausgegeben
Delphi-Quellcode:
procedure TForm1.MDLabel1LinkClicked(Sender: TObject; LinkIndex: Integer; LinkText: WideString);
begin
 showmessage(LinkText);
end;
Ich würde die Komponente gerne umschreiben, sodass man das Event nicht mehr braucht und automatisch ein ShellExecute ausgeführt wird auf das was man klickt. Ob das ein valider Link ist oder nicht, ist egal.

Kurz: wie bekomme ich das Property weg und schreibe das so um, dass es intern verarbeitet wird ohne Zutun des Nutzers? Es ist bestimmt einfacher als ich mir vorstelle nur bin ich zu dumm dafür. Das Event wird in TMDLabel.MouseUp() ausgewertet.

Komponenten-Quelle: http://www.infintuary.org/stlabel.php

himitsu 7. Jun 2020 18:38

AW: Komponente MDLabel: wie werde ich das Event OnLinkClicked los?
 
Schau doch mal wo OnLinkClicked aufgerufen wird und hoffe der Entwickler war so intelligent und hat diese Methode virtuell erstellt.

PS: Das was man für dein Beispiel braucht, das bietet auch Delphi-Referenz durchsuchenTLinkLabel,
allerings war dessen Entwickler ein totaler Volltrotel. (man kann aber zumindestens CN_NOTIFY überschreiben)
https://www.delphipraxis.net/159406-...linklabel.html


Alternativ im Create dem Property eine private Methode zuweisen. (deren Name kann vom DFM-Writer nicht aufgelöst werden und landet somit nicht in der DFM und der Property-Editor zeigt das auch nicht an)


[EDIT]
Die Delphi-Komponente hat zumindestens eine eigene Methode nur für das Event, auch wenn die dort so dämlich angelegt wurde, dass sie private und nicht virtual ist.
Im MDLabel steht der Event-Aufruf unschön direkt in einer großen Methode, so dass es nicht möglich ist nur auf den Click zu reagieren, ohne alles Andere kopieren zu müssen, auch wenn dort zumindestens diese Methode wenigstens "ungeplant" überrschreibbar ist.


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