Powerpoint mit OLE-Automation steuern
Wie kann ich Powerpoint starten?
Powerpoint öffnen (frühe Bindung):
Bevor Sie diese Methode verwenden können, müssen Sie die Typbibliothek (MSPpt8.olb für Powerpoint 97) importiert haben.
Eine Art, Powerpoint zu starten, ist den Aufruf von GetActiveObject auszuprobieren (try-Abschnitt), um eine bereits laufende Powerpoint-Instanz zu erhalten, es sollte aber ein Aufruf von CoApplication.Create im except-Teil stehen. Aber except-Klauseln sind langsam und können bei Leuten, die gerne „Bei Exceptions anhalten“ aktiviert haben, Probleme innerhalb der IDE auslösen. Der folgende Code benötigt keine try-except-Konstruktion, weil die Verwendung von OleCheck bei GetActiveObject im Fall, dass Powerpoint nicht läuft, vermieden wird.
uses Windows, ComObj, ActiveX, OfficePowerPoint_TLB; var PowerPoint: _Application; AppWasRunning: boolean; // tells you if you can close PowerPoint when you've finished Unknown: IUnknown; Result: HResult; begin AppWasRunning := False; Result := GetActiveObject(CLASS_Application, nil, Unknown); if (Result = MK_E_UNAVAILABLE) then PowerPoint := CoApplication.Create else begin { make sure no other error occurred during GetActiveObject } OleCheck(Result); OleCheck(Unknown.QueryInterface(_Application, PowerPoint)); AppWasRunning := True; end; PowerPoint.Visible := TOleEnum(msoTrue);
Ohne Verwendung der Typbibliothek:
Automation ist sehr viel schneller und einfacher, wenn Typbibliotheken (frühe Bindung) verwendet werden, deshalb sollten Sie es, wenn immer möglich, vermeiden, ohne sie zu arbeiten. Aber wenn es wirklich nicht anders geht, hier, wie vorzugehen ist:
var PowerPoint: Variant; begin try PowerPoint := GetActiveOleObject('PowerPoint.Application'); except PowerPoint := CreateOleObject('PowerPoint.Application'); end; PowerPoint.Visible := True;
Wie kann ich Powerpoint schließen?
Frühe Bindung:
PowerPoint.Quit; PowerPoint := nil;
Späte Bindung:
PowerPoint.Quit; PowerPoint := UnAssigned;
Wie kann ich eine neue Präsentation beginnen?
PowerPoint.Presentations.Add(TOleEnum(msoTrue));
Das Casten in ein TOleEnum ist einfach, um zu vermeiden, dass der Compiler wegen eines Konstantenausdrucks, der die Unterbereichsgrenzen verletzt, warnt. Wenn Sie späte Bindung verwenden, können Sie einfach ein Boolean verwenden:
PowerPoint.Presentations.Add(True);
Wie kann ich eine Präsentation öffnen?
PowerPoint.Presentations.Open('PresName.ppt', msoFalse, msoFalse, msoTrue);
Der zweite Parameter gibt an, ob die Präsentation im Read-Only-Modus geöffnet werden soll. Wenn der dritte Parameter true ist, wird eine unbenannte Kopie der Datei gemacht. Der letzte Parameter gibt an, ob die geöffnete Präsentation sichtbar sein soll. Sie können diese Parameter bei später Bindung weglassen, wenn Ihnen die Standardwerte genügen (false, false, true, bzw. wie im Code gezeigt).
Wie kann ich eine Präsentation speichern?
PowerPoint.Save;
Oder für Speichern unter:
var EmbedFonts: OleVariant; begin EmbedFonts := False; PowerPoint.ActivePresentation.SaveAs('PresName.ppt', ppSaveAsPresentation, EmbedFonts);
Der zweite Parameter von SaveAs bestimmt das Format – mögliche Werte sind ppSaveAsAddIn, ppSaveAsPowerPoint3, ppSaveAsPowerPoint4, ppSaveAsPowerPoint7, ppSaveAsPresentation, ppSaveAsRTF oder ppSaveAsTemplate. Dies sind Konstanten, die in der Typbibliothek definiert sind. Wenn Sie die Typbibliothek nicht verwenden, können Sie sie selbst definieren:
const ppSaveAsPresentation = $00000001; ppSaveAsPowerPoint7 = $00000002; ppSaveAsPowerPoint4 = $00000003; ppSaveAsPowerPoint3 = $00000004; ppSaveAsTemplate = $00000005; ppSaveAsRTF = $00000006; ppSaveAsShow = $00000007; ppSaveAsAddIn = $00000008; ppSaveAsWizard = $00000009; ppSaveAsPowerPoint4FarEast = $0000000A; ppSaveAsDefault = $0000000B;
Wie kann ich eine Präsentation schließen?
PowerPoint.ActivePresentation.Close;