Komponenten-Wrapper verwenden
Nach oben zu Importierte Objekte steuern
Wenn Sie einen Komponenten-Wrapper für Ihr Server-Objekt generiert haben, unterscheidet sich die Erstellung Ihrer COM-Client-Anwendung nicht sehr von der Erstellung irgendeiner anderen Anwendung, die VCL-Komponenten enthält. Die Eigenschaften, Methoden und Ereignisse des Server-Objekts sind bereits in der VCL-Komponente gekapselt. Sie müssen lediglich noch Ereignisbehandlungen zuweisen sowie Eigenschaftswerte setzen und Methoden aufrufen.
Informationen zur Verwendung der Eigenschaften, Methoden und Ereignisse des Server-Objekts finden Sie in der Dokumentation Ihres Servers. Der Komponenten- Wrapper liefert automatisch eine duale Schnittstelle, wo immer möglich. Delphi ermittelt das VTable-Layout anhand der Informationen in der Typbibliothek.
Darüber hinaus erbt Ihre neue Komponente bestimmte wichtige Eigenschaften und Methoden von ihrer Basisklasse.
ActiveX-Wrapper
Sie sollten beim Hosting von ActiveX-Steuerelementen immer einen Komponenten- Wrapper verwenden, da dieser das Fenster des Steuerelements in das VCL-Gerüst integriert.
Die Eigenschaften und Methoden, die ein ActiveX-Steuerelement von olectrls.TOleControl erbt, ermöglichen Ihnen den Zugriff auf die zugrunde liegende Schnittstelle oder das Abrufen von Informationen über das Steuerelement. Die meisten Anwendungen benötigen diese jedoch nicht. Stattdessen verwenden Sie importierte Steuerelemente genau wie jedes andere VCL-Steuerelement.
In der Regel verfügen ActiveX-Steuerelemente über eine Eigenschaftenseite, die Ihnen das Setzen ihrer Eigenschaften ermöglichen. Eigenschaftenseiten ähneln den Komponenteneditoren, die einige Komponenten anzeigen, wenn Sie darauf im Formular-Designer doppelklicken. Um die Eigenschaftenseite eines ActiveX-Steuerelements anzuzeigen, klicken Sie mit der rechten Maustaste und wählen den Befehl Eigenschaften.
Die Verwendung der meisten importierten ActiveX-Steuerelemente wird von der Server-Anwendung bestimmt. Jedoch verwenden ActiveX-Steuerelemente einen Standardsatz mit Benachrichtigungen zur Darstellung der Daten aus einem Datenbankfeld. Unter olectrls.TOleControl finden Sie weitere Informationen dazu.
Automatisierungsobjekt-Wrapper
Mit den Wrappern für Automatisierungsobjekte können Sie steuern, wie die Verbindung mit Ihrem Server-Objekt hergestellt werden soll.
Erstens: Die Eigenschaft ConnectKind gibt an, ob der Server lokal oder entfernt ist und ob Sie eine Verbindung mit einem Server herstellen möchten, der bereits aktiv ist oder eine neue Instanz gestartet werden soll. Wenn Sie eine Verbindung mit einem Remote-Server herstellen möchten, müssen Sie den Rechnernamen mit der Eigenschaft RemoteMachineName angeben.
Zweitens: Nach Angabe von ConnectKind gibt es drei Möglichkeiten, wie Sie Ihre Komponente mit dem Server verbinden können:
- Sie können eine explizite Verbindung mit dem Server herstellen, indem Sie die Methode Connect der Komponente aufrufen.
- Sie können die Komponente anweisen, beim Start der Anwendung automatisch eine Verbindung herzustellen, indem Sie die Eigenschaft AutoConnect auf True setzen.
- Es ist nicht notwendig, explizit eine Verbindung mit dem Server herzustellen. Die Komponente erstellt die Verbindung automatisch, wenn Sie eine der Eigenschaften oder Methoden des Servers verwenden, in denen die Komponente zum Einsatz kommt.
Das Aufrufen von Methoden oder der Zugriff auf Eigenschaften entspricht der Verwendung jeder anderen Komponente:
TServerComponent1.DoSomething;
TServerComponent1->DoSomething();
Die Behandlung von Ereignissen ist einfach, da Sie den Objektinspektor zum Schreiben von Ereignisbehandlungen verwenden können. Beachten Sie jedoch, dass die Ereignisbehandlung in Ihrer Komponente eventuell über leicht unterschiedliche Parameter verfügt, als diejenigen, die für das Ereignis in der Typbibliothek definiert sind. Insbesondere werden Zeigertypen (var-Parameter und Schnittstellenzeiger) in Varianten umgewandelt. Dabei müssen vor der Zuweisung eines Werts var-Parameter explizit in den zu Grunde liegenden Typ umgewandelt werden. Schnittstellenzeiger können mit dem as-Parameter in den entsprechenden Schnittstellentyp umgewandelt werden.
Das folgende Quelltextbeispiel zeigt eine Ereignisbehandlung für das ExcelApplication-Ereignis OnNewWorkBook. Die Ereignisbehandlung verfügt über einen Parameter, der die Schnittstelle einer anderen CoClass (ExcelWorkbook) liefert. Jedoch wird die Schnittstelle nicht als ein ExcelWorkbook-Schnittstellenzeiger, sondern als OleVariant übergeben.
procedure TForm1.XLappNewWorkbook(Sender: TObject; var Wb:OleVariant);
begin
{ Beachten Sie, wie der OleVariant für die Schnittstelle in den korrekten Typ umgewandelt werden muss }
ExcelWorkbook1.ConnectTo((iUnknown(wb) as ExcelWorkbook));
end;
void _fastcall TForm1::XLappNewWorkbook(TObject *Sender, ExcelWorkbookPtr Wb)
{
ExcelWorkbook1->ConnectTo(Wb);
}
In diesem Beispiel weist die Ereignisbehandlung die Arbeitsmappe einer ExcelWorkbook-Komponente (ExcelWorkbook1) zu. Dies demonstriert die Verbindung eines Komponenten-Wrappers mit einer vorhandenen Schnittstelle unter Verwendung der Methode ConnectTo. Diese Methode wird dem generierten Code für den Komponenten-Wrapper hinzugefügt.
Server mit einem Anwendungsobjekt legen darin eine Quit-Methode offen, um Clients die Beendigung der Verbindung zu ermöglichen. Quit stellt in der Regel Funktionalität zur Verfügung, die der Verwendung des Dateimenüs zum Beenden der Anwendung entspricht. Der Quelltext für den Aufruf der Methode Quit wird in der Methode Disconnect Ihrer Komponente generiert. Falls es möglich ist, die Methode Quit ohne Parameter aufzurufen, verfügt der Komponenten-Wrapper auch über eine AutoQuit-Eigenschaft. AutoQuit bewirkt, dass Ihr Controller bei Freigabe der Komponente Quit aufruft. Wenn Sie die Verbindung zu einem anderen Zeitpunkt trennen möchten oder wenn die Methode Quit Parameter erfordert, müssen Sie diese explizit aufrufen. Quit erscheint in der generierten Komponente als eine als public deklarierte Komponente.