Thema: Delphi Hilfe für TAPI

Einzelnen Beitrag anzeigen

michagolf4

Registriert seit: 23. Nov 2007
14 Beiträge
 
Delphi 2006 Architect
 
#1

Hilfe für TAPI

  Alt 29. Nov 2007, 08:53
Hi leute,

ich bin gerade dabei ein Prog zu schreiben was die telefone in unserer firma überwacht (soll mir den status anzeigen) und die telefonnummern abspeichern die angerufen haben und die jeweiligen kunden dazu aus unserer datenbank ausließt.
das problem ist wenn mehrere zu gleich angerufen werden dann wird ein fehler ausgelöst ich weiss auch warum das so ist aber ich weiss nicht wie ich es beheben kann

ich bin für jeden tip dankbar

hier mein code
Code:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, TAPILines, TAPICall, TAPIDevices, TAPISystem,
  TAPIServices, TAPIAddress, StdCtrls, ExtCtrls, AssistedTAPI;

type

  recTAPIElemente = record
    LineDevice : TTAPILineDevice;
    Line      : TTAPILine;
    call      : TTAPICall;
    address   : TTAPIAddress;
  end;

  TForm1 = class(TForm)
    TAPILineService1: TTAPILineService;
    bt_close: TButton;
    TAPILineDevice1: TTAPILineDevice;
    TAPILine1: TTAPILine;
    TAPICallMonitor1: TTAPICall;
    TAPIAddress1: TTAPIAddress;
    Memo1: TMemo;
    procedure bt_closeClick(Sender: TObject);



   procedure StateDisconnected(Sender: TObject;
      DisconnectedMode: TLineDisconnectMode; Rights: TLineCallPrivilege);
    procedure StateConnected(Sender: TObject;
      ConnectedMode: TLineConnectedModes; Rights: TLineCallPrivilege);
    procedure InfoCallerId(Sender: TObject);
    procedure AppNewCall(Sender: TObject; Call: TTAPICall;
     AddressID: Cardinal; Privilege: TLineCallPrivilege);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure StateRinging(Sender: TObject; RingModeIndex,
      RingCounter: Cardinal);

  private
    { Private-Deklarationen }
  public
    tapiarray : array of recTAPIElemente;

    procedure CreateTAPIRecord(iNum: Integer; sMSN, sIntBez: String);
    procedure FreeTAPIRecord(iNum: Integer);
 end;

var
  Form1: TForm1;
  iNum : integer;

 
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i : integer;
begin
  TAPILineService1.Active := true;
  SetLength(tapiarray, 3);
  for i := 0 to TAPILineService1.NumDevice -1 do
  begin
    TAPILineDevice1.ID := i;
    if mmInteractiveVoice in TAPILineDevice1.Caps.MediaModes then
    begin
      CreateTAPIRecord(0, 'elmeg NSt. 10', 'Zentrale');
      CreateTAPIRecord(1, 'elmeg NSt. 11', 'Dirk');
      CreateTAPIRecord(2, 'elmeg NSt. 12', 'Katharina');
      CreateTAPIRecord(3, 'elmeg NSt. 13', 'Doreen');
      CreateTAPIRecord(4, 'elmeg NSt. 14', 'Test');
      CreateTAPIRecord(5, 'elmeg NSt. 15', 'Dominike');
    end;
  end;
end;


procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
  // Die X Telefone wieder freigeben
  for i := 0 to High(tapiarray)-1 do
    FreeTAPIRecord(i);

  // und das Array löschen
  Finalize(tapiarray);
end;


procedure TForm1.CreateTAPIRecord(iNum: Integer; sMSN, sIntBez: String);
begin
  with tapiarray[iNum] do begin
    // erstellt das Leitungsgerät und verbindet es mit dem Leitungsservice
    LineDevice          := TTAPILineDevice.Create(self);
    LineDevice.Service  := TAPILineService1;
    LineDevice.OnStateRinging := StateRinging;

    // ertellt die Leitung und legt die Eigenschaften fest
    Line                := TTAPILine.Create(self);
    Line.Device         := LineDevice;
    Line.CallPrivilege  := [cpOwner];
    Line.MediaModes     := [mmInteractiveVoice];

    // erstellt den CallMonitor und legt Eigenschaften fest
    call                := TTAPICall.Create(self);
    call.CompletionMode := lccmMessage;
    call.OnInfoCallerId := InfoCallerID;
    call.OnStateConnected := StateConnected;
    call.OnStateDisconnected := StateDisconnected;

    // erstellt die Adresse und verbindet diese mit anderen geräten
    address             := TTAPIAddress.Create(self);
    address.InboundCall := call;
    address.Line        := Line;
    address.MonitorCall := call;
    address.Address     := sMSN;
    address.OnAppNewCall := AppNewCall;

  end;
end;

procedure TForm1.FreeTAPIRecord(iNum: Integer);
begin
  // gibt alle sich im Array gerstellten Geräte wider frei
  with tapiarray[iNum] do begin
    LineDevice.Free;
    Line.Free;
    call.Free;
    address.Free;
  end;
end;

procedure TForm1.bt_closeClick(Sender: TObject);
begin
  Close;
end;


procedure TForm1.FormShow(Sender: TObject);
var
  iNum,
  i     : integer;

begin
  //aktiviert den Leitungsservice um die Leitungsüberwachung zu ermöglichen

  for iNum := 0 to High(tapiarray)-1 do
  begin
   for i := 0 to TAPILineService1.NumDevice -1 do
   begin
     tapiarray[iNum].LineDevice.ID := i;
     if tapiarray[iNum].LineDevice.Caps.Name = tapiarray[iNum].address.Address then
     begin
       if (mmInteractiveVoice in tapiarray[iNum].LineDevice.Caps.MediaModes) and (cpowner in tapiarray[iNum].Line.CallPrivilege) then
       begin
         //ShowMessage(tapiarray[iNum].LineDevice.Caps.Name);
         tapiarray[iNum].Line.Active := true;
         tapiarray[iNum].LineDevice.Service.Active := true;
         if not tapiarray[iNum].Address.Active then tapiarray[iNum].Address.Active := true;
       end;
   end;
  end;
end;

end;
///////////////////////////////////////////////////////////////////////////////
//TAPI Ereignisse
///////////////////////////////////////////////////////////////////////////////
procedure TForm1.StateRinging(Sender: TObject; RingModeIndex,
      RingCounter: Cardinal);
begin
  Memo1.Lines.Add('Es klingelt bei '+ tapiarray[iNum].LineDevice.Caps.Name);
end;


procedure TForm1.InfoCallerId(Sender: TObject);
var
  nummer : string;
begin
  nummer := tapiarray[iNum].call.Info.CallerID;
  if nummer = '' then nummer := '****';

  Memo1.Lines.Add('Nr. '+nummer+' ruft bei '+tapiarray[iNum].LineDevice.Caps.Name+'an!');
end;


procedure TForm1.StateConnected(Sender: TObject;
  ConnectedMode: TLineConnectedModes; Rights: TLineCallPrivilege);
begin
  Memo1.Lines.Add(tapiarray[iNum].LineDevice.Caps.Name +'im Telefonat!');
end;

procedure TForm1.StateDisconnected(Sender: TObject;
  DisconnectedMode: TLineDisconnectMode; Rights: TLineCallPrivilege);
begin
  tapiarray[iNum].call.DeallocateCall;
  Memo1.Lines.Add(tapiarray[iNum].LineDevice.Caps.Name +' hat Aufgelegt!');
end;


procedure TForm1.AppNewCall(Sender: TObject; Call: TTAPICall;
  AddressID: Cardinal; Privilege: TLineCallPrivilege);
begin

  Memo1.Lines.Add(tapiarray[iNum].LineDevice.Caps.Name+' hat den Hörer abgenommen');
end;
danke schon mal im vorraus für eure hilfe
Ich weiss das ich nichts weiss
  Mit Zitat antworten Zitat