{/----------------------------------------------------------------------
//  Dokumentation zur Klasse TFritzDataControl
//
//  Autor:  Christian "NineBerry" Schwarz
//  E-Mail: TFritzDataControl@NineBerry.de
//  Web:    http://www.NineBerry.de/Delphi  
//
//  Briefkontakt:
//  Christian "NineBerry" Schwarz
//  Turmstrae 11
//  67659 Kaiserslautern
//
//  For help in english please see the website mentioned above.
//
//  History:
//    09/04/2000  Erste Version dieser Textdatei
//    10/04/2000  Test unter Delphi 3. Dabei ergaben sich einige kleinere
//                syntaktische nderungen, sowie die Notwendigkeit, die
//                *.TLB - Datei manuell als Resource einzubinden
//    13/04/2000  Danke an Heidi Hirschfeld vom AVM Support Team
//                fr die neue Version von F_OLE.DOC, in der die von
//                mir beschriebenen Fehler richtiggestellt sind und
//                einige weitere interessante Ergnzungen enthalten
//                sind.
//                Ich werde die neuen Informationen heute integrieren:
//                Verfgbarkeit aller Methoden
//                Untersttzung von WildCards
//    26/12/2000  Offizielle Dokumentation der Schnittstelle befindet
//		  sich jetzt in Datei F_COM.PDF (Version 05/2000)
//		  Erfolgreiche Tests mit Fritz!data 3.0
//    09/09/2001  FritzDataControlLib.dll und Quelltexte davon, sowie
//                eine Beispielanwendung in Visual Basic hinzugefgt
//----------------------------------------------------------------------}

  ----------------------------------------------------------------------
    Inhalt
  ----------------------------------------------------------------------

  1. Um was geht es?
  2. Enthaltene Dateien
  3. Dokumentation der Methoden und Properties
  4. Hinweise zur Verwendung
  5. CopyRight

  ----------------------------------------------------------------------
    1. Um was geht es?
  ----------------------------------------------------------------------

  Die Klasse TFritzDataControl ermglicht das Fernsteuern des Programms
  Fritz!data ab Version 2.02 Revision 1.26 aus Anwendungen, die mit
  Delphi erstellt wurden.
  Die Klasse und das Demo-Programm sind unter Delphi 3 Client/Server und
  Delphi 5 Professional erfolgreich getestet worden.

  Mit Fritz!data ist es mglich, ber EuroFile oder IDTrans Verbindungen
  zu einem FileServer aufzubauen und zwischen lokalem Computer und Server
  Dateien auszutauschen.

  TFritzDataControl verwendet zur Fernsteuerung von Fritz!data das in
  F_COM.pdf (erhtlich von AVM) dokumentierte COM-Interface.
  
  Die Datei F_COM.pdf ist von AVM erhltlich. Das mitgelieferte Demo-
  Programm ldt das Programm "Fritz!script", das u.a. diese Datei enhlt
  vom "AVM Data Call Center".

  ----------------------------------------------------------------------
    2. Enthaltene Dateien
  ----------------------------------------------------------------------

  // Klasse TFritzDataControl
  FritzDataControl.PAS        Enthlt die Implementation der Klasse
                              TFritzDataControl
  FritzDataControl.TLB        Enthlt die TypeLibrary fr die Schnittstelle
                              IFritzDataMessageHandler, die intern fr die
                              Kommunikation mit Fritz!data bentigt wird.
  FritzDataControl.RC         Resourcenskript, das zur Erstellung von
                              FritzDataControl.RES dient.
  FritzDataControl.RES        Resourcendatei, die FritzDataControl.TLB
                              enthlt.
                              Muss in die Anwendung gelinkt werden. Bei
                              Einbetten von FritzDataControl.PAS in das
                              Projekt geschieht das automatisch

  // Demo-Anwendung FritzDemo
  FritzDemo.DPR               Projektdatei
  DlgMain.PAS                 Hauptformular der Anwendung (Quelltext)
  DlgMain.DFM                 Hauptformular der Anwendung (Formular)

  FritzDemo.CFG               Konfigurationseinstellungen des Projekts
  FritzDemo.DOF               Konfigurationseinstellungen des Projekts
  FritzDemo.RES               Die Ressourcen des Projekts

  // COM-Bibliothek FritzDataControlLib

  FritzDataControlAuto.PAS    Enthlt die Automationsklasse
                              TFritzDataControlDocument, die
                              TFritzDataControl ber COM zugnglich
                              macht
  FritzDataControlLib.DPR     Vom Delphi-Assistenten erstelle Projektdatei
                              fr die COM-Bibliothek
  FritzDataControlLib.CFG     Dazu gehrende Konfigurationseinstellungen
  FritzDataControlLib.DOF     Dazu gehrende Konfigurationseinstellungen
  FritzDataControlLib.RES     Dazu gehrende Ressourcen
  FritzDataControlLib.TLB     Die Typbibliothek
  FritzDataControlLib_TLB.PAS Der aus der Typbibliothek generierte Pascal
                              Quelltext

  Das Unterverzeichnis VBDemo enthlt eine Demo-Anwendung in
  Visual Basic 6, die die Bibliothek FritzDataControlLib verwendet. 

  Das Unterverzeichnis BIN enthlt die beiden kompilierten
  Demo-Anwendungen (Delphi und VB), sowie die Bibliothek
  FritzDataControlLib.DLL.
  Hinweis: VB-Entwickler mssen diese DLL mit ihrer Anwendung
  weitergeben und auf dem Zielrechner registrieren (mit dem
  Verpackungsassistenten oder Installshield Express etc.)
  Delphi-Entwickler, die die Klasse TFritzDataControl direkt nutzen,
  mssen diese DLL nicht weitergeben.

  //Sonstiges
  F_COM.PDF                   Offizielle Dokumentation von AVM
  TFritzDataControl.TXT       Sie baden gerade Ihre Hand darin.
  FritzDataControlLib.TXT     Informationen ber FritzDataControlLib
                              und deren Verwendung

  ----------------------------------------------------------------------
    3. Dokumentation der Methoden und Properties
  ----------------------------------------------------------------------

    ----------------------------------------------------------------------
      constructor Create;
    ----------------------------------------------------------------------

    Erzeugt eine Instanz der Klasse.
    Stellt eine COM-Verbindung zu Fritz!data her.

    Es kann jeweils nur eine Instanz dieser Klasse existieren.
    Existiert bereits eine Instanz oder luft Fritz!data schon
    auf dem PC, lst Create eine stille Exception aus.

    ----------------------------------------------------------------------
      destructor Destroy; override;
    ----------------------------------------------------------------------

    Zerstrt die Instanz der Klasse.
    Trennt die COM-Verbindung mit Fritz!data

    ----------------------------------------------------------------------
      class function FritzDataAlreadyRuns: Boolean;
    ----------------------------------------------------------------------

    Klassenmethode. Gibt true zurck, falls Fritz!data schon auf dem
    PC luft. Diese Methode sollte vor Erzeugen einer Instanz der Klasse
    aufgerufen und bei einem Rckgabewert von True keine Instanz erzeugt
    werden.

    ----------------------------------------------------------------------
      procedure Connect(Address, UserName, Password: string; Options:
      TFritzDataConnectOptions); {Aynchron}
    ----------------------------------------------------------------------

    Stellt eine Verbindung zu einem FileServer her. (Whlen)
    Address ist die Telefonnummer des FileServers.
    UserName ist der Benutzername, unter dem die Anmeldung beim Server
    erfolgt.
    Password ist das zu UserName passende Kennwort.
    Options gibt Optionen der aufzubauenden Verbindung an. Options ist
    eine Menge von Werten des Typs TFritzDataConnectOption.
    Diese haben folgende Bedeutung:

    x fdcIDTrans
    Verwendet das IDTrans Protokoll. Ist dieser Wert nicht angegeben,
    wird das EuroFile Protokoll verwendet.

    x fdcTwoChannel
    Baut eine Verbindung auf zwei Kanlen auf. Ist nur bei Verwendung
    der IDTrans Protokolls verfgbar.

    x fdcIDTransCompression
    Beschleunigt die Datenbertragung. Ist nur bei Verwendung
    der IDTrans Protokolls verfgbar.

    x fdcV42Compression
    Datenkompression nach dem Standard X.75/V.42bis.

    ----------------------------------------------------------------------
      procedure Disconnect; {Aynchron}
    ----------------------------------------------------------------------

    Beendet die Verbindung zu einem FileServer (Auflegen)

    ----------------------------------------------------------------------
      procedure DirRemote; {Aynchron}
    ----------------------------------------------------------------------

    Liest den Verzeichnisinhalt des aktuellen Verzeichnisses auf dem
    FileServer. Die Eintrge knnen anschlieend mit GetNextDirItem
    gelesen werden.

    ----------------------------------------------------------------------
      procedure DirLocal; {Aynchron}
    ----------------------------------------------------------------------

    Liest den Verzeichnisinhalt des aktuellen lokalen Verzeichnisses.
    Die Eintrge knnen anschlieend mit GetNextDirItem gelesen werden.

    ----------------------------------------------------------------------
      function GetNextDirItem(var FileInfo: TFritzDataFileInfo):
      TFritzDataFileType;
    ----------------------------------------------------------------------

    Liest einen Verzeichniseintrag, der mit einem vorherigen Aufruf von
    DirRemote oder DirLocal ermittelt wurde.
    FileInfo enthlt anschlieend Informationen ber den gefundenen
    Verzeichniseintrag.
    Diese Funktion ist solange nacheinander aufzurufen, bis sie den Wert
    fdftEOL (End of List) zurckgibt.

    ----------------------------------------------------------------------
      procedure ChDirLocal(NewPath: string); {Aynchron}
    ----------------------------------------------------------------------

    Macht das mit NewPath angegebene Verzeichnis zum aktuellen lokalen
    Verzeichnis.
    NewPath kann relativ zum gerade aktuellen oder absolut angegeben sein.

    ----------------------------------------------------------------------
      procedure ChDirRemote(NewPath: string); {Aynchron}
    ----------------------------------------------------------------------

    Macht das mit NewPath angegebene Verzeichnis zum aktuellen Verzeichnis
    auf dem Server.
    NewPath kann relativ zum gerade aktuellen oder absolut angegeben sein.

    ----------------------------------------------------------------------
      procedure MkDirLocal(DirName: string); {Aynchron}
    ----------------------------------------------------------------------

    Erzeugt im aktuellen lokalen Verzeichnis ein Unterverzeichnis mit dem
    Namen DirName.

    ----------------------------------------------------------------------
      procedure MkDirRemote(DirName: string); {Aynchron}
    ----------------------------------------------------------------------

    Erzeugt im aktuellen Verzeichnis auf dem Server ein Unterverzeichnis
    mit dem Namen DirName.

    ----------------------------------------------------------------------
      procedure DeleteLocal(FileName: string); {Aynchron}
    ----------------------------------------------------------------------

    Lscht die Dateien oder Verzeichnisse FileName aus dem aktuellen
    lokalen Verzeichnis. Verzeichnisse werden rekursiv inklusive aller
    enthaltenen Dateien / Unterverzeichnisse gelscht.
    Filename kann auch die Wildcards * und ? enthalten

    ----------------------------------------------------------------------
      procedure DeleteRemote(FileName: string); {Aynchron}
    ----------------------------------------------------------------------

    Lscht die Dateien oder Verzeichnisse FileName aus dem aktuellen
    Verzeichnis auf dem Server. Verzeichnisse werden rekursiv inklusive
    aller enthaltenen Dateien / Unterverzeichnisse gelscht.
    Filename kann auch die Wildcards * und ? enthalten

    ----------------------------------------------------------------------
      procedure Upload(FileName: string; Move: Boolean); {Aynchron}
    ----------------------------------------------------------------------

    Kopiert die Dateien oder Verzeichnisse FileName aus dem aktuellen
    lokalen Verzeichnis in das aktuelle Verzeichnis auf dem Server.
    Verzeichnisse werden rekursiv inklusive alle enthaltenen Dateien /
    Unterverzeichnisse kopiert.
    Filename kann auch die Wildcards * und ? enthalten
    Hat Move den Wert True, wird FileName anschlieend aus dem aktuellen
    lokalen Verzeichnis gelscht.

    ----------------------------------------------------------------------
      procedure Download(FileName: string; Move: Boolean); {Aynchron}
    ----------------------------------------------------------------------

    Kopiert die Dateien oder Verzeichnisse FileName aus dem aktuellen
    Verzeichnis auf dem Server in das aktuelle lokale Verzeichnis.
    Verzeichnisse werden rekursiv inklusive alle enthaltenen Dateien /
    Unterverzeichnisse kopiert.
    Filename kann auch die Wildcards * und ? enthalten
    Hat Move den Wert True, wird FileName anschlieend aus dem aktuellen
    Verzeichnis auf dem Server gelscht.  

    ----------------------------------------------------------------------
      procedure Abort; {Aynchron}
    ----------------------------------------------------------------------

    Bricht den momentan laufenden asynchronen Prozess ab.

    ----------------------------------------------------------------------
      function GetCWDLocal: string;
    ----------------------------------------------------------------------

    Ermittelt den Namen des aktuellen lokalen Verzeichnisses.

    ----------------------------------------------------------------------
      function GetCWDRemote: string;
    ----------------------------------------------------------------------

    Ermittelt den Namen des aktuellen Verzeichnisses auf dem Server.

    ----------------------------------------------------------------------
      function GetDriveListLocal: String;
    ----------------------------------------------------------------------

    Ermittelt eine Liste aller verfgbaren Laufwerke auf dem lokalen PC.

    ----------------------------------------------------------------------
      function GetDriveListRemote: String;
    ----------------------------------------------------------------------

    Ermittelt eine Liste aller verfgbaren Laufwerke auf dem Server.

    ----------------------------------------------------------------------
      function GetServerName: string; 
    ----------------------------------------------------------------------

    Ermittelt den Namen des verbundenen Fileservers.

    ----------------------------------------------------------------------
      function LFNSupported: Boolean;
    ----------------------------------------------------------------------

    Gibt True zurck, wenn der verbundene Server lange Dateinamen
    untersttzt, ansonsten False.

    ----------------------------------------------------------------------
      function GetConnStatus: TFritzDataConnectOptions;
    ----------------------------------------------------------------------

    Ermittelt die Eigenschaften der aktuellen Verbindung. Zu Details siehe
    Anmerkungen zu Prozedur "Connect".

    ----------------------------------------------------------------------
      function GetCAPIISDNErrorMessage(Error: Word): String;
    ----------------------------------------------------------------------

    Liefert eine Fehlermeldung zu dem angegebenen CAPI- oder ISDN-Fehler.

    ----------------------------------------------------------------------
      property Ready: Boolean; {nur lesen}
    ----------------------------------------------------------------------

    Hat den Wert True, falls eine Verbindung zu einem Server steht und
    Fritz!data momentan nicht beschftigt ist.

    ----------------------------------------------------------------------
      property LocalReady: Boolean; {nur lesen}
    ----------------------------------------------------------------------

    Hat den Wert True, falls Fritz!data momentan nicht beschftigt ist.

    ----------------------------------------------------------------------
      property Busy: Boolean; {nur lesen}
    ----------------------------------------------------------------------

    Hat den Wert True, falls Fritz!data momentan beschftigt ist.
    Diese Eigenschaft sollte verwendet werden, um auf die Beendigung
    einer asynchronen Methode zu warten.

    ----------------------------------------------------------------------
      property ErrorOccured: Boolean; {nur lesen}
    ----------------------------------------------------------------------

    Hat den Wert True, falls bei der letzten aufgerufenen Methode ein
    Fehler aufgetreten ist.

    ----------------------------------------------------------------------
      property ErrorNr: Integer; {nur lesen}
    ----------------------------------------------------------------------

    Enthlt die Fehlernummer, falls bei der letzten aufgerufenen Methode
    ein Fehler aufgetreten ist.

    ----------------------------------------------------------------------
      property ErrorMessage: string; {nur lesen}
    ----------------------------------------------------------------------

    Enthlt einen Text mit einer Fehlermeldung, falls bei der letzten
    aufgerufenen Methode ein Fehler aufgetreten ist.

  ----------------------------------------------------------------------
    4. Hinweise zur Verwendung
  ----------------------------------------------------------------------

  Bitte betrachte fr Beispiele zur Verwendung der Klasse das
  mitgelieferte Demo-Programm Fritzdemo.

  Achte vor allem auf folgende Punkte:

  x Es kann jeweils nur eine Instanz der Klasse geben.
  x Luft Fritz!data schon, kann keine Instanz erzeugt werden
  x Existiert eine Instanz, kann der Anwender Fritz!data nicht manuell
    starten.
  x Einige der Methode arbeiten asynchron. Andere Methoden knnen erst
    aufgerufen werden, wenn die Abarbeitung der aktuellen Methode
    komplett abgeschlossen ist. Um auf diesen Moment zu warten, ist
    die Eigenschaft "Busy" ntzlich.

  ----------------------------------------------------------------------
    5. CopyRight
  ----------------------------------------------------------------------

  Die Klasse TFritzDataControl ist Freeware. Sie darf kostenlos und ohne
  Einschrnkungen in (auch kommerziellen) Softwareprodukten verwendet
  werden.
  Nichtsdestotrotz behlt der Autor (Christian "NineBerry" Schwarz) alle
  Rechte.

  Die Weitergabe dieser Klasse ist nur in einer der folgenden Formen
  zulssig:
    x Als Teil eines kompilierten Anwendungsprogramms
    x Als Teil eines Anwendungsprogrammes im Quelltext, nur in
      unvernderter Form und inklusive dieser Textdatei.
    x In unvernderter Form, inklusive dieser Textdatei unentgeldlich
    x In unvernderter Form, inklusive dieser Textdatei, gegen eine Gebhr
      (z.B. auf CD-Beilagen von Zeitschriften oder hnliches)
      nur nach Rcksprache mit dem Autor (Christian "NineBerry" Schwarz)

  Falls du diese Klasse zur Erstellung von Anwendungen verwendest,
  wrde ich mich sehr freuen ber:
    x Namentliche Nennung in der Dokumentation deiner Anwendung.
    x Eine nette E-Mail oder Postkarte mit Informationen ber dich

  
