Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Interface in einer Klasse (https://www.delphipraxis.net/63197-interface-einer-klasse.html)

Luckie 15. Feb 2006 11:02


Interface in einer Klasse
 
Ich habe hier ein Interface und die dazu gehörige Typbibliothek. Jetzt wollte ich, um das ganze einfacher zu Hand haben in einen Klasse verpacken um dann eventuell später sogar eine Komponente daraus zu machen. Ober irgendwie habe ich mit der Klasse Probleme, dass in der Klasse das Interface nicht funktioniert.

Ich frage jetzt erstmal generell, ob es bei meinem Vorhaben etwas spezielles zu beachten gilt bzw. macht es überhaupt Sinn eine Typbibliothek noch mal in eine Klasse zu verpacken.

Das nächste Problem was ansteht wäre, wie man Eriegnisse des Interface in der Klasse kapselt.

mkinzler 15. Feb 2006 11:05

Re: Interface in einer Klasse
 
Lass doch Delphi die benötigte Wrapper-Klasse erzeugen

Luckie 15. Feb 2006 11:07

Re: Interface in einer Klasse
 
Und wie geht das? Oder meinst du die Datei, die Delphi erzeugt, wenn man eine Typbibliothek in sein Projekt importiert?

mkinzler 15. Feb 2006 11:11

Re: Interface in einer Klasse
 
Ja, hier kannst du wahlweise auch nur die Wrapper-Unit erzeugen lassen.

Luckie 15. Feb 2006 11:13

Re: Interface in einer Klasse
 
Mal gucken, ob ich dann mit dem Interface besser klarkomme. Danke schon mal für die Hilfe.

Luckie 15. Feb 2006 11:34

Re: Interface in einer Klasse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Kommando zurück, das habe ich schon so gehabt.

OK, konkret sieht es so aus: Ich habe die Typbibliothek JabberCOM_TLB.pas (siehe Anhang, Link zur Interface Dokumentation: http://jabbercom.sourceforge.net/jsession.php3). Dann habe ich da die Klasse:
Delphi-Quellcode:
type
  TOnConnect = procedure(Sender: TObject) of object;
  TOnAuthError = procedure(Sender: TObject) of object;

  TDWJabberSession = class(TObject)
  private
    FJabberSession: TJabberSession;
    FServer: WideString;
    FUser: WideString;
    FPW: WideString;
    FResource: WideString;
    FPort: Integer;
    FConnected: Boolean;
    procedure SetServer(AServer: WideString);
    procedure SetUser(AUser: WideString);
    procedure SetPassword(APW: WideString);
    procedure SetResource(AResource: WideString);
    procedure SetPort(APort: Integer);
    function GetConnected: Boolean;
  public
    constructor Create(AServer: WideString; AUser: WideString; APassword: WideString;
      AResource: WideString; APort: Integer); overload;
    constructor Create; overload;
    destructor Destroy; override;
    property Server: WideString write SetServer;
    property User: WideString write SetUser;
    property Password: WideString write SetPassword;
    property Resource: WideString write SetResource;
    property Port: Integer write SetPort;
    procedure Connect;
    property IsConnected: Boolean read GetConnected;
  end;
Die Connect Methode sieht so aus:
Delphi-Quellcode:
procedure TDWJabberSession.Connect;
begin
  ShowMessage(FUser); //  ist nicht leer und stimmt
  FJabberSession.DoConnect(False, jatPlainText);
end;
Das Problem ist, dass ich einen Authentifizierungsfehler bekomme. Ich vermute mal, dass die erforderlichen Parameter an das Interface nicht weitergegeben werden, obwohl in der ShowMessage die Variable richtig ausgegeben wird. Komisch ist allerdings, dass wenn ich den Mauszeiger ober FJabberSession halte nur die Ereignisse von TJabberSession erscheinen, nicht aber die Felder.

Ohne die Typbibliothek in eine Klasse zu kapseln geht es ohne weiteres. Aber das ist mir zu unübersichtlich irgendwie.

Luckie 15. Feb 2006 11:56

Re: Interface in einer Klasse
 
OK, vergesst es. War ein dummer Fehler in der Klasse. Das:
Delphi-Quellcode:
procedure TDWJabberSession.Connect;
begin
  FJabberSession.Server := FServer;
  FJabberSession.Username := FUser;
  FJabberSession.Password := FPW;
  FJabberSession.Resource := FResource;
  FJabberSession.Port := FPort;
  FJabberSession.DoConnect(False, jatPlainText);
end;
hat gefehlt. :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz