AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Events einer VCL-Komponente non-vcl verwenden

Offene Frage von "delpasfan"
Ein Thema von delpasfan · begonnen am 26. Feb 2009 · letzter Beitrag vom 27. Feb 2009
Antwort Antwort
delpasfan

Registriert seit: 25. Feb 2009
2 Beiträge
 
Delphi 2005 Personal
 
#1

Events einer VCL-Komponente non-vcl verwenden

  Alt 26. Feb 2009, 11:14
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 (www.domis.de, an dieser Stelle vielen Dank an den Autor für seine gut durchdachte Komponente). SerialNG funktioniert auch non-VCL, allerdings wurden bisher keine der Events benutzt, da die Empfangsabfrage vom benutzenden Programm mittels Polling ausreichte. Für eine neue Funktionalität benötige ich aber jetzt einen solchen (Empfangs-)Event, da ich die einzelnen Bytes eines Datenpaketes zusammensammeln muss, bevor ich es auswerten und den eigentlichen Dateninhalt ohne Protokollrahmen zurückgeben kann.
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!
http://www.delphipraxis.net/posting.php?mode=iframe
Kaum macht man es richtig, schon funktioniert es ...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#2

Re: Events einer VCL-Komponente non-vcl verwenden

  Alt 26. Feb 2009, 11:30
Du mußt deine Ereignisfunktion in einem Objekt ablegen.

Also Diese in einer Klasse definiert haben.

Delphi-Quellcode:
type irgendas = class(...)
  procedure SPortRxClusterEvent(Sender: TObject);
end;
PS: setze deine Delphicodes bitte in [delphi]-Tags (du kannst dieses über den Edit-Button deines Beitrags noch ändern)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
delpasfan

Registriert seit: 25. Feb 2009
2 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Events einer VCL-Komponente non-vcl verwenden

  Alt 27. Feb 2009, 13:46
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.
Kaum macht man es richtig, schon funktioniert es ...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:02 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