Freigeben über


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
oleApp = CREATEOBJECT("Excel.Application")
Startet Excel.
OleApp.Visible=.T.
Zeigt Excel an.
OleApp.Workbooks.Add
Erstellt eine Arbeitsmappe.
OleApp.Cells(1,1).Value=7
Legt den Wert einer Zelle fest.
OleApp.ActiveWorkbook.SaveAs("C:\TEMP.XLS")
Speichert die Arbeitsmappe.
OleApp.Quit
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-Steuerelement Object