hier mal der ursprüngliche Code:
Code:
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) { }
}
und hier meine jetzige Version der Delphi Klasse (mach das zum ersten mal :/)
Delphi-Quellcode:
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;
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
jetzt geht es wie folgt weiter
Delphi-Quellcode:
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;
die Fehlermeldung lautet: E2281 Typ ist im Aufruf von Variant Dispatch nicht zulässig
bitte macht mich darauf aufmerksam wenn ich was übersehen habe, diese ganze OpenOffice Geschichte in Delphi ist echt Nerfenzerreißend