So fügt Delphi Ereignisse hinzu

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu ActiveX-Steuerelemente verwenden - Index

Das ActiveX-Steuerelement übergibt auf dieselbe Art und Weise Ereignisse an seinen Container, wie ein Automatisierungsobjekt Ereignisse an Clients übergibt. Dieser Mechanismus wird unter Ereignisse in Ihrem Automatisierungsobjekt verwalten beschrieben.

Verfügt das VCL-Steuerelement, das Sie als Basis für Ihr ActiveX-Steuerelement verwenden, über Ereignisse, die als published deklariert sind, fügen die Experten automatisch die erforderliche Unterstützung für die Verwaltung einer Liste mit Client-Ereignisempfängern der ActiveX-Wrapper-Klasse hinzu und definieren die ausgehende Dispatch-Schnittstelle, die Clients für die Beantwortung von Ereignissen definieren müssen.

Sie fügen Ereignisse dieser ausgehenden Dispatch-Schnittstelle hinzu. Um ein Ereignis im Typbibliothekseditor hinzuzufügen, wählen Sie die Ereignisschnittstelle aus, und klicken Sie auf das Methodensymbol. Fügen Sie anschließend die Liste der Parameter, die Sie verwenden möchten, über die Parameterseite hinzu.

Als Nächstes müssen Sie eine Methode in Ihrer Wrapper-Klasse definieren, die vom selben Typ ist, als die Ereignisbehandlungsroutine für das Ereignis im zugrunde liegenden VCL-Steuerelement. Diese wird nicht automatisch generiert, da Delphi die von Ihnen verwendete Ereignisbehandlungsroutine nicht kennt.



 procedure KeyPressEvent(Sender: TObject; var Key: Char);



Implementieren Sie diese Methode so, dass sie den Ereignisempfänger der Host-Anwendung verwendet, der im Element FEvents der Wrapper-Klasse gespeichert ist:



 procedure TButtonX.KeyPressEvent(Sender: TObject; var Key: Char);
 var
   TempKey: Smallint;
 begin
     TempKey := Smallint(Key); {in einen OLE-Automatisierungskompatiblen Typ umwandeln }
     if FEvents <> nil then
       FEvents.OnKeyPress(TempKey)
     Key := Char(TempKey);
   end;



 void __fastcall TButtonXImpl::KeyPressEvent(TObject *Sender, char &Key)
 {
 short TempKey;
 TempKey = (short)Key;
 Fire_OnKeyPress(&TempKey);
 Key = (short)TempKey;
 };



Anmerkung:  Wenn Sie Ereignisse in einem ActiveX-Steuerelement auslösen, müssen Sie nicht die Liste der Ereignisempfänger durchlaufen, da das Steuerelement über eine einzige Host-Anwendung verfügt. Dies ist einfacher als der Prozess für die meisten Automatisierungsserver.

Schließlich müssen Sie diese Ereignisbehandlungsroutine dem zu Grunde liegenden VCL-Steuerelement zuweisen, sodass sie bei Eintreten des Ereignisses aufgerufen wird. Diese Zuweisung erfolgt in der Methode InitializeControl:



 procedure TButtonX.InitializeControl;
 begin
   FDelphiControl := Control as TButton;
   FDelphiControl.OnClick := ClickEvent;
   FDelphiControl.OnKeyPress := KeyPressEvent;
 end;



 alizeControl()
 {
   m_VclCtl->OnClick = ClickEvent;
   m_VclCtl->OnKeyPress = KeyPressEvent;
 }



Siehe auch