Announcement

Collapse
No announcement yet.

Callback-Funktion für BDE-Operationen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Callback-Funktion für BDE-Operationen

    Hallo,

    ich habe mir das BDE-Api Buch bei Borland gekauft und habe gelesen, daß es sogenannte Callback-Funktionen gibt, die bei länger andauernden Prozessen immer aufgerufen wird (sofern deklariert), um z.B. dem Entwickler die Möglichkeit zu geben, den Anwender über den Fortschritt einer Operation zu informieren. Im Buch von Herrn Kosch ist eine Möglichkeit vorgestellt, bei der die BDE reinen Text übergibt (z.B. "x Datensätze hinzugefügt" etc.). Im BDE-Api Buch steht allerdings, daß man auch einen Integer-Wert zurückgeliefert bekommen kann. Ist das wirklich so und wenn ja wie muß die Callback-Funktion dann aussehen?

    Vielen Dank

  • #2
    Hallo,

    in meinen Büchern habe ich im Laufe der Zeit verschiedene Beispiel für einen BDE-Callback verwendet. Dabei spielt es überhaupt keine Rolle, welcher Datentyp übergeben wird. Die Callback-Funktion erwartet immer einen 4-Byte-Wert - im Falle der Zeichenkette wird dieser eben nur als PChar interpretiert.

    Das folgende Beispiel übergibt sogar einen Zeiger (4 Byte) auf das Hauptformular an die Callback-Funktion. Somit kann man innerhalb der globalen Callback-Funktion direkt auf Elemente aus dem Formular zurückgreifen.

    <pre>
    (* BDE-Callback-Funktion
    Die universelle Callback-Funktion wird sowohl von der
    TQuery- als auch von der TBatchmove-Komponente verwendet.
    Nach dem Registrieren ruft die BDE während langandauernder
    Prozesse in einem Zeitsabstand von ca. 1 Sekunde diese
    Callback-Funktion auf. Im Beispielprogramm erhöht die
    Funktion den Anzeigewert der Balkenanzeige im Formular, und
    zeigt den Infotext der BDE an. Im mittleren Statusfeld wird
    so der Benutzer über die bereits abgearbeiteten Datensätze
    informiert.

    Beim Registrieren der Callback-Funktion wurde ein Zeiger
    auf »Self« (dieses Formular) mit übergeben. Die BDE übergibt
    dieses Zeiger auch an die Callback-Funktion, so daß hier
    von einer globalen Funktion aus ein Bezug auf das Formular
    elegant hergestellt werden kann. *)

    function BDECallBack(CBType : CBType;
    ClientData : LongInt;
    CBInfo : Pointer): CBRType; stdcall;
    begin
    //Rückgabewert setzen -> BDE soll weitermachen
    Result := CBRContinue;
    // Balkenanzeige hochzählen
    FormSQL.ProgressBarQuery.StepIt;
    // Anzahl der bearbeiteten Datensätze anzeigen
    with TFormSQL(ClientData) do
    FormSQL.StatBar1.Caption := CBProgressDone^.szMsg;
    // Formular soll sich neu zeichnen -> Anzeige aktualisieren
    FormSQL.Refresh
    end;
    </pre&gt

    Comment

    Working...
    X