![]() |
C# Klasse -> Delphi Klasse / OpenOffice
hier mal der ursprüngliche Code:
Code:
und hier meine jetzige Version der Delphi Klasse (mach das zum ersten mal :/)
internal class OOoCloseListener : XCloseListener {
internal OOoTextDocument mTextDocument; public OOoCloseListener(OOoTextDocument pTextDocument) { mTextDocument = pTextDocument; } public void notifyClosing(EventObject Source) { } public void queryClosing(EventObject Source, bool GetsOwnership) { mTextDocument.OnClosing(EventArgs.Empty); } public void disposing(EventObject Source) { } }
Delphi-Quellcode:
da es in delphi die Typen XCloseListener oder EventObject nicht gibt und um OpenOffice anzusprechen der Typ variant genutzt wird, habe ich auf gut Glück alles auf variant geändert
OOoCloseListener = class(TObject)
private mTextDocument: variant; public constructor Create(pTextDocument:variant); destructor Destroy; override; procedure notifyClosing(Source:variant); procedure queryClosing(Source:variant;GetsOwnership:boolean); procedure disposing(Source:variant); end; implementation procedure OOoCloseListener.disposing(Source:variant); begin // end; procedure OOoCloseListener.notifyClosing(Source:variant); begin // end; destructor OOoCloseListener.Destroy; begin mTextDocument.free; inherited Destroy; end; constructor OOoCloseListener.Create(pTextDocument:variant); begin inherited Create; mTextDocument := pTextDocument; end; procedure OOoCloseListener.queryClosing(Source:variant;GetsOwnership:boolean); begin // mTextDocument.OnClosing(EmptyParam); showmessage('es schließt sich jetzt'); end; jetzt geht es wie folgt weiter
Delphi-Quellcode:
die Fehlermeldung lautet: E2281 Typ ist im Aufruf von Variant Dispatch nicht zulässig
function TOOWriter.OpenDocument(const aFileName:string): boolean;
var fFileName: string; document: variant; mCloseListener: OOoCloseListener; begin fFileName := ConvertToUrl(aFileName); Document := StarDesktop.LoadComponentFromURL( fFileName, '_blank', 0, VarArrayCreate([0, -1], varVariant)); // Close-Listener initialisieren mCloseListener := OOoCloseListener.create(document); // Close-Listener hinzufügen document.addCloseListener(mCloseListener); //<-- hier kommt beim Kompilieren eine Fehlermeldung Result := not (VarIsEmpty(Document) or VarIsNull(Document)); end; bitte macht mich darauf aufmerksam wenn ich was übersehen habe, diese ganze OpenOffice Geschichte in Delphi ist echt Nerfenzerreißend :? |
AW: C# Klasse -> Delphi Klasse / OpenOffice
Dieses Thema scheint ganz interessant zu sein und beschäftigt mich aktuell. Leider erscheint bei mir der gleiche Fehler, hat jemand eine Idee?
|
AW: C# Klasse -> Delphi Klasse / OpenOffice
Der Typ
![]() Sherlock |
AW: C# Klasse -> Delphi Klasse / OpenOffice
Zitat:
Falls OpenOffice Ole automation unterstützt sollte es eine type library installieren, die man (hoffentlich) in Delphi importieren kann. Das sollte eine Unit liefern, die man dann entweder via early binding verwenden kann, oder die zumindest die Typen der möglichen Parameter angibt. Dein Listener ist vermutlich als callback interface zu implementieren. |
AW: C# Klasse -> Delphi Klasse / OpenOffice
Selbst wenn ich aus Variant -> OleVariant mache, erhalte ich die Fehlermeldung
E2160 Typ in einem OLE-Automatisierungsaufruf nicht erlaubt und zwar genau in der Zeile, wo die Objektreferenz zugewiesen wird. Das bestätigt die Aussage von Peter, dass eine Objektreferenz wohl nicht erlaubt ist. Was mich aber wieder an den Anfang bringt, wie man in Delphi anhand der frei verfügbaren API einen XCloseListener verwendet, um beim Schließen eines Dokumentes in einem Event darauf reagieren zu können? Die hier beschriebene Klasse scheint sich dafür ja nicht zu eignen... |
AW: C# Klasse -> Delphi Klasse / OpenOffice
Zitat:
|
AW: C# Klasse -> Delphi Klasse / OpenOffice
Zitat:
wo finde ich diese Type Library - ich habe nichts entsprechendes gefunden. Danke |
AW: C# Klasse -> Delphi Klasse / OpenOffice
In der IDE: Component -> Import Component
Der angezeigte Wizard bietet dann die Möglichkeit, eine registrierte type library zu importieren, er zeigt eine Liste der registrierten libraries auf der nächsten Seite. Wenn Du da nichts zu Open Office gehöriges findest kannst Du über den Add-Button in den OO-Verzeichnissen nach einem TLB-File oder einer DLL suchen, in der die type library eingebettet ist. Man kann auch ein registriertes .NET assembly importieren, welches für COM interop vorgesehen ist, auch da gibt es eine Liste, aus der man auswählen kann. Eine kurze Google-Suche hat ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz