Bearbeitung von Objekten mit Automatisierung
OLE-Objekte in Formularen oder Programmen oder ActiveX-Steuerelemente innerhalb von OLE-Container-Steuerelementen können mit Hilfe von Code auf die gleiche Weise bearbeitet werden, wie Sie systemeigene Visual FoxPro-Objekte programmieren können.
Bearbeiten von Basis-Objekteigenschaften
Im Code können Sie ein Objekt unter Verwendung seiner Eigenschaften bearbeiten. Wie Sie auf eine Eigenschaft verweisen, ist abhängig davon, ob das Objekt eigenständig oder Teil eines Containers ist, wie beispielsweise ein OLE-Container-Steuerelement oder ein gebundenes OLE-Steuerelement.
Anmerkung ActiveX-Steuerelemente sind immer Teil eines OLE-Container-Steuerelements.
Ein Objekt in einem Container besteht aus zwei Teilen: dem Objekt selbst und einem das Objekt umschließenden Container. Sowohl das Objekt als auch der Container verfügen über Eigenschaften, die manchmal sogar die gleichen Namen haben. Um sicherzustellen, dass Sie auf die Eigenschaften des Objekts verweisen, sollten Sie immer die Object-Eigenschaft des Containers an den Namen des Objekts anhängen. Mit dem folgenden Code wird beispielsweise auf die Left-Eigenschaft des Objekts verwiesen.
frm1.olecontrol1.Object.Left = 25 && Object's Left
Wenn Sie die Objekteigenschaft nicht angeben, verweisen Sie stattdessen auf die Left-Eigenschaft des Containers.
frm1.olecontrol1.Left= 25 && Container's Left property
Sie haben beispielsweise eine Anwendung, die eine Mail sendet, wenn der Benutzer auf eine Befehlsschaltfläche zum Verfassen von Nachrichten klickt. Wenn Sie zu einem Formular ein Microsoft MAPI-Nachrichten-Steuerelement als olecontrol1
hinzugefügt haben, könnte der mit dem Click-Ereignis verbundene Code folgendermaßen aussehen:
THISFORM.olecontrol1.Object.Compose
THISFORM.olecontrol1.Object.Send(.T.)
Neben dem Verweis auf die Eigenschaften des im Container befindlichen Objekts über die Object-Eigenschaft können Sie auch die anderen Eigenschaften des Container-Steuerelements verwenden. So können Sie beispielsweise die schreibgeschützte OLEClass-Eigenschaft zur Kennzeichnung des Typs des im Container befindlichen Objekts verwenden, und die Sizable-Eigenschaft, um zu verhindern, dass die Größe des Objekts benutzerseitig geändert werden kann. Weitere Informationen zu den Eigenschaften von Container-Steuerelementen finden Sie unter OLE-Container-Steuerelement.
Im Formular- und im Klassen-Designer werden die Eigenschaften von ActiveX-Steuerelementen im Visual FoxPro-Eigenschaftenfenster angezeigt, die meisten ActiveX-Steuerelemente verfügen jedoch auch über eine eigene Schnittstelle zum Einstellen der allgemeinen Eigenschaften. Diese Eigenschaftenschnittstelle wird angezeigt, wenn Sie die Option Eigenschaften objektspezifisch aus dem Kontextmenü des ActiveX-Steuerelements auswählen. Um beispielsweise das Eigenschaftendialogfeld für ein RichText-Steuerelement zu öffnen, wählen Sie RichtextCtrl Properties aus dem Kontextmenü.
Verwenden von Basis-Objektmethoden
Neben dem Einstellen und Auslesen der Eigenschaften von Objekten können Sie ein Objekt auch mit Hilfe der von diesem Objekt unterstützten Methoden bearbeiten. So können Sie beispielsweise die Add-Methode eines Microsoft Excel-Auflistungsobjekts zum Erstellen einer neuen Microsoft Excel-Arbeitsmappe verwenden.
Im folgenden Automatisierungsbeispiel wird die Add-Methode zum Erstellen einer Excel-Arbeitsmappe, die Save-Methode zum Speichern der Arbeitsmappe und die Quit-Methode zum Beenden von Excel verwendet.
Code | Kommentar |
---|---|
|
Startet Excel. |
|
Zeigt Excel an. |
|
Erstellt eine Arbeitsmappe. |
|
Legt den Wert einer Zelle fest. |
|
Speichert die Arbeitsmappe. |
|
Beendet Excel. |
Wenn Sie ein Objekt mit Hilfe eines OLE-Container-Steuerelements oder gebundenen OLE-Steuerelements erstellen, können Sie die DoVerb-Methode des Steuerelements zum Ausführen eines Verbes am Objekt verwenden. Mit DoVerb(0) führen Sie beispielsweise das Standardverb aus, mit DoVerb(-1) aktivieren Sie das Objekt für die visuelle Bearbeitung, und mit DoVerb(-2) öffnen Sie das Objekt in einem separaten Fenster.
Anmerkung Näheres zu den jeweiligen von einer Anwendung unterstützten Automatisierungsbefehlen finden Sie im Handbuch der entsprechenden Anwendung. So stehen beispielsweise die Add-In-Komponenten von Microsoft Excel nicht für die Automatisierung zur Verfügung.
Festlegen der Werte für Zeitüberschreitung
Wenn Sie eine Anforderung an ein OLE-Objekt übergeben, wird diese vom Automatisierungsserver verarbeitet. Sie haben zwar nicht viele Steuermöglichkeiten über die Serververarbeitung, können jedoch angeben, wie lange die Wartezeit bis zur Beendigung der Verarbeitung sein darf, indem Sie die Eigenschaften OLERequestPendingTimeout und OLEServerBusyTimeout einstellen. Sie können ermitteln, was geschieht, wenn die angegebene Zeit verstrichen ist, indem Sie die OLEServerBusyRaiseError-Eigenschaft einstellen.
Zugreifen auf Objektauflistungen
Ein Objekttyp kann ein einzelnes Objekt oder eine Auflistung von miteinander verbundenen Objekten sein. Ein Microsoft Excel Workbook-Objekt repräsentiert beispielsweise eine einzelne Arbeitsmappe, wohingegen das Objekt Workbooks alle aktuell geladenen Arbeitsmappen umfasst. Da das Objekt Workbooks eine Auflistung von Objekten repräsentiert, wird es auch als Auflistungsobjekt bezeichnet.
Im Code stellt eine Auflistung eine ungeordnete Liste dar, in der sich die Position eines Objekts jederzeit ändern kann, wenn zur Auflistung Objekte hinzugefügt oder Objekte aus ihr gelöscht werden. Sie greifen auf ein Objekt in einer Auflistung zu, indem Sie über die Objekte der Auflistung mit Hilfe ihrer Count-Eigenschaft iterieren. Die Count-Eigenschaft gibt die Anzahl der Elemente in der Auflistung zurück. Sie können auch mit Hilfe der Item-Methode ein Element in eine Auflistung zurückgeben lassen.
Um beispielsweise die Namen aller Arbeitsblätter in einer Microsoft Excel-Arbeitsmappe anzuzeigen, verwenden Sie folgenden Code:
oleApp = CREATEOBJECT("Excel.Application")
oleApp.Workbooks.Add
FOR EACH x IN oleApp.Workbooks
? x.Name
ENDFOR
Sie können auch auf eine Auflistung innerhalb einer Auflistung zugreifen. Sie können beispielsweise auf eine Zellauflistung innerhalb eines Bereichs zugreifen, indem Sie folgenden Code verwenden:
oleApp = CREATEOBJECT("Excel.sheet")
oleApp.Workbooks.Add
oleApp.Range(oleApp.Cells(1,1),oleApp.Cells(10,10)).Value=100
oleApp.Visible=.T.
Verwenden von Objekt-Arrays
Sie können Arrays an Methoden übergeben, und Sie können Arrays zurückgeben lassen. Sie müssen Arrays per Verweis übergeben, indem Sie dem Array-Namen ein @-Zeichen voranstellen.
Um beispielsweise ein Visual FoxPro-Array an Microsoft Excel zu übergeben, bietet sich folgender Code an. Dieser Code erstellt in Visual FoxPro ein Array, weist dem Array einige Werte zu, startet Microsoft Excel und erstellt eine Arbeitsmappe. Anschließend stellt dieser Code die erste Zelle eines Arbeitsblattes auf einen Wert ein und kopiert dann diesen Wert auf die anderen Blätter im Array:
DIMENSION aV(3)
aV(1) = "Sheet1"
aV(2) = "Sheet2"
aV(3) = "Sheet3"
oleApp=CREATEOBJECT("Excel.Application")
oleApp.Workbooks.Add
oleI=oleApp.Workbooks.Item(1)
oleI.Sheets.Item(1).Cells(1,1).Value = 83
oleI.Sheets(@aV).;
FillAcrossSheets(oleI.Worksheets("Sheet1").Cells(1,1))
oleApp.Visible = .T.
Alternativ gibt der Code im folgenden Beispiel ein Array an Visual FoxPro zurück und zeigt den Inhalt des Arrays an:
oleApp = CREATEOBJECT("Excel.Application")
aOleArray = oleApp.GetCustomListContents(3)
FOR nIndex = 1 to ALEN(aOleArray)
? aOleArray(nIndex)
ENDFOR
Anmerkung Mit Visual FoxPro können Sie keine Arrays an OLE-Objekte übergeben, die größer als zweidimensional sind. Weitere Informationen zum Arbeiten mit Arrays in Visual FoxPro finden Sie unter Objektorientierte Programmierung und unter Überblick über die Sprache.
Freigeben von Basis-Objekten
Ein Automatisierungsserver wird automatisch freigegeben, wenn er nicht sichtbar ist und wenn keine Variablen im Geltungsbereich auf das Objekt verweisen. Sie können den Befehl RELEASE verwenden, um die mit dem Objekt verbundene Variable freizugeben. Ist der Server sichtbar, verwenden Sie die Quit-Methode, um ihn freizugeben.
Siehe auch
Verwenden von ActiveX-Steuerelementen | Einteilen von Objekten in untergeordnete Klassen | Freigeben von Informationen und Hinzufügen von OLE | OLE-Container-Steuerelement | Gebundenes OLE-SteuerelementObject