![]() |
Events einer VCL-Komponente non-vcl verwenden
Hallo zusammen
folgendes Problem: Ich habe eine Interface-DLL für die Verwendung der seriellen Schnittstelle geschrieben, die verschiedenste Zugriffsfunktionen und Methoden anderen Programmen zur Verfügung stellt (in Form von Exports, verwendet u.a. zur Messgerätesteuerung von Excel/VBA aus). Verwendet wird die VCL-Komponete SerialNG von Ekkehard Domning ( ![]() Wenn ich die Komponente in einer Form verwende, ist das kein Problem: TMainForm = class(TForm) SPort: TSerialPortNG; ... procedure SPortRxClusterEvent(Sender: TObject); //das ist die Eventhandler-Methode end; implementation procedure TMainForm.FormCreate(Sender: TObject); begin SPort:=TSerialportNG.Create(self); SPort.onRxClusterEvent := SportRXClusterEvent; ... end; //Eventhandler-Methode procedure TMainform.SPortRxClusterEvent(sendet:TObject; begin // Code für das sammeln und auswerten empfangener Bytes end; so wie hier funktionier das auch sehr gut. Nur leider habe ich in meiner DLL keine Form. wie kann ich den Code schreiben, damit ein Event außerhalb einer Form funktioniert? Die DLL geht bisher so: function InitDll : Integer; //Initialisiert die Port-Komponente(n), Aufruf bevor die DLL-Methoden verwendet werden können {es werden mehrere Portkomponenten als Objekt-Array angelegt, um verschiedene COM-Ports über eine DLL ansprechen zu können } var ct : integer; begin for ct:=1 to 8 do begin SPA[ct]:=TSerialPortNG.Create(Nil); SPA[ct].ThreadQuietMode := true; .. end; end; wenn ich versuche, den Eventhandler analog der Verwendung in einer Form zuzuweisen, bekomme ich nur eine Fehlermeldung (Funktionszeiger statt Methodenzeiger) Hat jemand eine Idee, wie ich das lösen kann? Vermutlich sehe ich nur den Wald vor lauter Bäumen nicht! ![]() |
Re: Events einer VCL-Komponente non-vcl verwenden
Du mußt deine Ereignisfunktion in einem Objekt ablegen.
Also Diese in einer Klasse definiert haben.
Delphi-Quellcode:
PS: setze deine Delphicodes bitte in [delphi]-Tags (du kannst dieses über den Edit-Button deines Beitrags noch ändern)
type irgendas = class(...)
procedure SPortRxClusterEvent(Sender: TObject); end; |
Re: Events einer VCL-Komponente non-vcl verwenden
Danke für den schnellen Tip, hat funktioniert. Ich hab's erstmal in meiner Testumgebung (VCL) ausprobiert, aber außerhalb der Form. Vielleicht für andere wichtig: die Klasse wird deklariert und einem Variablennamen zugewiesen, aber es wird kein Create ausgeführt (das macht nur einen Laufzeitfehler)
PS. sorry, hatte gestern Stress und bin nicht zum Editieren gekommen, heute war's zu spät dafür. http://www.delphipraxis.net/posting.php?mode=iframe |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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