Thema: Delphi CapiMonitor

Einzelnen Beitrag anzeigen

Explorer

Registriert seit: 10. Aug 2006
Ort: im Rhein-Main-Gebiet
21 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

CapiMonitor

  Alt 24. Sep 2007, 12:52
Hallo Forum,
ich hoffe, ich bin der richtigen Forumsparte gelandet.

Zur Sache:
Ich habe mir einen zugegebenermaßen einfachen, kleinen CapiMonitor gebaut, der auch mit dem dazu gehörenden Formular
problemlos funktioniert.

Mein eigentliches Ziel war jedoch, die Funktionen in eine dll einzubauen, um das monitoring in einer delphi-fremden
Datenbank nutzen zu können.

Seit Tagen "baue" ich nun an dem Teil leider ergebnislos herum.

Zwar gelingt es mir, via dll das integrierte Infofenster in der Datenbank zu aktivieren,
aber bei ankommenden Anrufen wird die Nummer nicht wie erwartet im Fenster angezeigt.

Irgendwo steckt ein Denkfehler, den ich nicht finde.
Vielleicht hat im Forum ja jemand den entscheidenden Tipp parat.

Mit besten Grüßen

Kisch


------------hier kommt der code----------

Delphi-Quellcode:

unit Ki_CapiMonitor;

interface

uses
  inifiles, Windows, Messages, SysUtils, Variants, Classes, Graphics,
  Controls, Forms, Dialogs, ComCtrls, StdCtrls, Buttons, ExtCtrls,
  CpMoni, CpConst;


///*** die DLL-Deklarationen
Procedure StarteCapiMonitor; stdcall; export;



implementation

type
  TKisFenster = class (TForm)
  CapiMonitor1 : TCapiMonitor;

  private
    PanelTelefonnummer : TPanel;
    PanelHintergrund : TPanel;


  public
    constructor Create(AOwner: TComponent); override;

    procedure LauscheAnIsdn;

    procedure CapiMonitor1IncomingCall(CallingPartyNumber,
                                   CalledPartyNumber: String;
                                   CipValue: Word;
                                   CipValueString: String);

// Procedure CapiMonitor1IncommingCall(CallingPartyNumber:String);

  end;

var
  KisFenster : TKisFenster = Nil;
  Controller : dWord;
  RejectTimeOut : integer;

{Deklaration einer mit Nil initialisierten Instanzvariablen des Fensters,
damit bei jedem Aufruf einer DLL- Funktion(en) die Instanz verwendet
werden kann }



constructor TKisFenster.Create(AOwner: TComponent);
begin

  CreateNew(AOwner);

  CapiMonitor1 := TCapiMonitor.Create(nil);

{Konstruktor CreateNew verwenden, weil es keine *.DFM- Datei zu dem Form gibt!}

//TKisFenster default-Werte einstellen
//mögliche Einstellungen ermitteln über zB 'KisFenster.SetBounds'
//aber so nicht verwenden, da im construktor-Mode wohl nicht zulässig

  SetBounds (654,579,330,135);
  Caption := 'ISDN Capi Monitor';
  Position := poScreenCenter;
  BorderStyle := bsDialog;


//PanelHintergrund anlegen:
    PanelHintergrund := Tpanel.Create(Self);

{Initialisiere das HintergrundPanel mit default-Eigenschaften}
    PanelHintergrund.Parent := Self;

    PanelHintergrund.ParentBackground := False;
    PanelHintergrund.ParentColor := False;
    PanelHintergrund.SetBounds(8,38,305,28);
    PanelHintergrund.BorderStyle := bsSingle;
    PanelHintergrund.Color := clBtnHighlight;
    PanelHintergrund.Ctl3D := True;
    PanelHintergrund.Font.Charset := Default_CHARSET;
    PanelHintergrund.Font.Color := clWindowText;
    PanelHintergrund.Caption := '';



//PanelTelefonnummer anlegen:
  PanelTelefonnummer := Tpanel.Create(Self);
  PanelTelefonnummer.Parent := Self;

{Initialisiere das TelefonnummerPanel mit default-Eigenschaften}
    PanelTelefonnummer.ParentBackground := False;
    PanelTelefonnummer.ParentColor := False;
    PanelTelefonnummer.ParentCtl3D := False;
    PanelTelefonnummer.ParentFont := False;
    PanelTelefonnummer.SetBounds(10,40,300,23);
    PanelTelefonnummer.Color := clMoneyGreen;
    PanelTelefonnummer.Ctl3D := False;
    PanelTelefonnummer.Font.Charset := ANSI_CHARSET;
    PanelTelefonnummer.Font.Color := clBlue;
    PanelTelefonnummer.Font.Name := 'Arial';
    PanelTelefonnummer.Font.Size := 10;
    PanelTelefonnummer.Font.Style := [fsBold];
    PanelTelefonnummer.Width := 300;

// SetBounds(100, 100, 100, 20);
    PanelTelefonnummer.Caption := 'ISDN Telefonnummer';
// Caption := '0,0 % Fett';
// end;


end;



Procedure TKisFenster.LauscheAnIsdn;
  begin
   Controller := 1;
   RejectTimeOut := 10;
   CapiMonitor1.WaitForCall(Controller,RejectTimeOut)
  end;



Procedure TKisFenster.CapiMonitor1IncomingCall(CallingPartyNumber,
                                   CalledPartyNumber: String;
                                   CipValue: Word;
                                   CipValueString: String);
  begin
 Show;

    if CallingPartyNumber <> ''
       then PanelTelefonnummer.Caption := CallingPartyNumber
       else PanelTelefonnummer.Caption := 'unbekannt';
       if IsIconic(Application.Handle) and (CallingPartyNumber<>'')
          then Application.Title := CallingPartyNumber;


  end;




//----- DLL-Export



Procedure StarteCapiMonitor; stdcall; export;

var
 StringLaenge : integer;
 CallingPartyNumber : string;
 CalledPartyNumber : string;
 CipValue : word;
 CipValueString : string;

begin
  if KisFenster = Nil then
    KisFenster := TKisFenster.Create(Nil);

    KisFenster.LauscheAnIsdn;
    KisFenster.CapiMonitor1IncomingCall(CallingPartyNumber,
                     CalledPartyNumber,CipValue,CipValueString);

/// Update ist wichtig, sonst gibts keine Veränderungsanzeige !!!
    KisFenster.Update;

end;




initialization


finalization

{Fenster wieder löschen}

  KisFenster.Free;

end.
  Mit Zitat antworten Zitat