Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ereignisprozedur an ActiveX Objekt übergeben (https://www.delphipraxis.net/35010-ereignisprozedur-activex-objekt-uebergeben.html)

Garby 1. Dez 2004 14:05


Ereignisprozedur an ActiveX Objekt übergeben
 
Hallo,

wie kann ich einem ActiveX Objekt, das mit CreateOleObject erzeugt wurde, eine Ereignisprozedur zuweisen.

z.B.:
Delphi-Quellcode:
procedure DoMessage(MsgID: Integer);
...
var Obj: OleVariant:
begin
  Obj := CreateOleObject('meinObjekt');
  Obj.OnMessage := doMessage;
end;
Dies ist leider nicht möglich.
Unter D5 E kommt immer die Meldung "nicht genügend wirkliche Parameter".

Danke
Garby

Bernhard Geyer 1. Dez 2004 14:15

Re: Ereignisprozedur an ActiveX Objekt übergeben
 
Probiers mal mit :

Code:
Obj.OnMessage := @doMessage;
Aber vermutlich muß dein übergebene Procedure eh noch eine Methode einer Klasse sein.
Wie sieht die Definition der Ereignisprozedur aus? Und wieso importierst Du nicht die Typbibliothek und verwendest die frühe Bindung?

Garby 1. Dez 2004 14:45

Re: Ereignisprozedur an ActiveX Objekt übergeben
 
Das habe ich schon probiert.
Hier kommt die Meldung "Variable erforderlich".

Ich verwende die späte Bindung zum Einen, weil das Programm u.U. auf Systemen ohne diesem ActiveX Server laufen muss, und zum Anderen, weil sich verschiedene Versionen (die auch verschieden implementiert sind) des Servers auf dem System befinden können.

Hast du vielleicht noch eine andere Idee?

Danke
Garby

shmia 1. Dez 2004 14:58

Re: Ereignisprozedur an ActiveX Objekt übergeben
 
Zitat:

Zitat von Garby
wie kann ich einem ActiveX Objekt, das mit CreateOleObject erzeugt wurde, eine Ereignisprozedur zuweisen.

z.B.:
Delphi-Quellcode:
procedure DoMessage(MsgID: Integer);
...
var Obj: OleVariant:
begin
  Obj := CreateOleObject('meinObjekt');
  Obj.OnMessage := doMessage;
end;
Dies ist leider nicht möglich.

Event unter COM/DCOM/ActiveX und Delphi sind 2 völlig verschiedene Paar Stiefel!!
Du müsstest einen Event Sink bereitstellen.
Dies ist ein komplexes Thema; schau mal auf:
http://www.techvanguards.com/products/eventsinkimp/

Bernhard Geyer 1. Dez 2004 15:34

Re: Ereignisprozedur an ActiveX Objekt übergeben
 
Zitat:

Zitat von Garby
Ich verwende die späte Bindung zum Einen, weil das Programm u.U. auf Systemen ohne diesem ActiveX Server laufen muss, und zum Anderen, weil sich verschiedene Versionen (die auch verschieden implementiert sind) des Servers auf dem System befinden können.

Zu 1: Das geht auch mit früher Bindung. Erst beim erzeugen des Objekts kracht es.

Zu 2: Haben diese verschiedenen Versionen die gleiche Schnittstelle? Falls ja, so spricht nichts gegen frühe Bindung.
Falls schon, so würde ich mittels Bridge-Pattern diese eigenheiten Kapseln und trotzdem mit früher Bindung arbeiten.

Zitat:

Zitat von shmia
Du müsstest einen Event Sink bereitstellen.

Stimmt - Vergessen. :wall:
Aber bei Importierung der Typbibliothek wird das alles bei neueren Delphi-Versionen i.d.R. utomatisch erledigt (ohne EventsinkImp)

Garby 1. Dez 2004 15:41

Re: Ereignisprozedur an ActiveX Objekt übergeben
 
Danke für eure Antworten.

Ich werde jetzt doch frühe Bindung verwenden, weil mir das mit den EventSinks zu stressig ist.

Garby

Bernhard Geyer 1. Dez 2004 16:01

Re: Ereignisprozedur an ActiveX Objekt übergeben
 
Zitat:

Zitat von Garby
Danke für eure Antworten.
Ich werde jetzt doch frühe Bindung verwenden, weil mir das mit den EventSinks zu stressig ist.

EventSinks erfordern eh auf der Clientseite den Import der Typbibliothek, da ja der Client (deine Anwendung) das Sink-Interface implementieren muss. Der Delphi-Importer bastelt daraus eine "normal" Aussehendes und verwendbares Control mit Events.


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