Here is an example of using DBiRegisterCallBack to show a status bar.
Note does not work against server data. or (IBLOCAL).

unit Unit1;

interface

uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls,dbiTypes,dbiprocs, DB, DBTables, Gauges, Grids,
  DBGrids;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Query1: TQuery;
    Button2: TButton;
    Gauge1: TGauge;
    DataSource1: TDataSource;

    DBGrid1: TDBGrid;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i:integer;
implementation

{$R *.DFM}
function ServerCallBack(CallType: CBType; Data: Longint;
  var Info: Pointer): CBRType; export;
begin
form1.caption := 'Called';
i := i + 20;
form1.gauge1.progress := i;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  ptr : pointer;
  c : CbProgressDesc;
begin
  ptr := (@ServerCallBack);
  check( DbiRegisterCallBack (nil,CbGenPRogress,5,sizeof(c),@c,pfdbicallback(ptr)));
      (*hCursor       : hDBICur;          { Cursor (Optional) }
      ecbType       : CBType;           { Type of call back }
      iClientData   : Longint;          { Pass-thru client data }
      iCbBufLen     : Word;             { Callback buffer len }

      CbBuf         : Pointer;          { Pointer to callback buffer }
      pfCb          : pfDBICallBack     { Call back fn being registered }*)
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  query1.open;
  gauge1.progress := 100;  {Finish the gauge}
end;

end.