Registriert seit: 23. Nov 2007
14 Beiträge
Delphi 2006 Architect
|
Hilfe für TAPI
29. Nov 2007, 09: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
|
|
Zitat
|