Einzelnen Beitrag anzeigen

Benutzerbild von vsti
vsti

Registriert seit: 20. Sep 2004
Ort: Syke
70 Beiträge
 
Delphi 2005 Architect
 
#1

C# Klasse -> Delphi Klasse / OpenOffice

  Alt 29. Aug 2006, 09:25
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
Thorsten
  Mit Zitat antworten Zitat