AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe für TAPI

Ein Thema von michagolf4 · begonnen am 29. Nov 2007 · letzter Beitrag vom 19. Dez 2007
Antwort Antwort
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
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Hilfe für TAPI

  Alt 29. Nov 2007, 09:02
Hi und erstmal Herzlich Willkommen in der DP

Hier wird Dir sicherlich gerne geholfen, aber dazu musst Du auch ein paar Dinge beachten. So kann man Dir immer gut helfen (und es wird bereitwillig gemacht), wenn es auch genug Info's von Deiner Seite gibt.
In Deiner Beschreibung des Problems sagst Du nur, dass es einen Fehler gibt, den Du sogar erklären kannst

Jetzt frag ich mich nur, wenn er bekannt ist und Du ihn erklären kannst, warum nennst und erklärst Du ihn nicht? Wo genau tritt der Fehler auf? Was für ein Fehler tritt auf? Und wenn es bekannt ist, warum tritt der Fehler auf?

Dann noch ein kleiner Tipp, statt dem Code-Tag gibt es auch ein Delphi-Tag, da wird dann auch Syntaxhighlighting für Delphi aktiv, kann man einfach besser lesen. Es bietet sich aber auch an, dass Du immer nur die relevanten Code-Stellen postest (übersichtlicher, leichter zu lesen) und den Code ggf. einfach als Zip (nur den Source, die DFMs und das Projektfile) anhängst (dann kann jeder den Code auch im Debugger laufen lassen, bringt ja auch seine Vorteile).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
michagolf4

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

Re: Hilfe für TAPI

  Alt 29. Nov 2007, 09:10
ok ich werds mir merken

also der fehler tritt auf wenn ein 2.telefon zur selben zeit in das selbe ereigniss spring und es ist ja auch logisch das die procedure nicht zwei mal zur selben zeit ausgeführt werden kann ich weiss aber nicht wie ich meinen code umbauen kann um diesen fehler zu umgehen

noch zur info ich benutze die tapi komponenten vom delphi club

tschö michagolf4
Ich weiss das ich nichts weiss
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Hilfe für TAPI

  Alt 29. Nov 2007, 09:12
Irgendwie kommt mir die Sache so bekannt vor.
Kann es sein, dass Du für meinen ehemaligen Arbeitgeber arbeitest?

Ich hab damals die gleichen TAPI-Komponenten benutzt und auch sonst sieht es ähnlich aus.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Relicted

Registriert seit: 24. Jan 2006
Ort: Iserlohn
646 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Hilfe für TAPI

  Alt 29. Nov 2007, 09:17
moinsen!

bei deinem problem kann ich dir gerade nicht helfen... aber vielleicht eine kleine anmerkung am rande zum thema variablenbenennung/stil

Delphi-Quellcode:
var
  Form1: TForm1;
  iNum : integer;
iNum als globale variable...
besser:
private/public variable der klasse mit namen "fNum", "m_nNum" oder wie auch immer ihr das handhabt... wenn sie wirklich global sein muss dann gib ihr auch einen etwas eindeutigeren namen, denn

Delphi-Quellcode:
    procedure CreateTAPIRecord(iNum: Integer; sMSN, sIntBez: String);
    procedure FreeTAPIRecord(iNum: Integer);
das ist einfach etwas verwirrend und kann zu bösen effekten führen... du könntest auch hier einfach mal die iNum's umbenennen... is leider immer extrem schwer zu verstehen welches jetzt wo benutzt wird und wo zugewiesen etc...

gruß
reli
  Mit Zitat antworten Zitat
michagolf4

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

Re: Hilfe für TAPI

  Alt 12. Dez 2007, 10:53
kann mir denn niemand weiter helfen

die instabilität von TAPI konnte ich schon beseitigen lag aber an unserer Telefon Anlage.

Wo es immer noch einen Fehler gibt ist wenn 2 oder mehr geräte zur gleichen Zeit das gleiche Event haben und somit mehrere Geräte in die selbe Procedure wollen. Da das meines Wissens aber nicht möglich ist weiss ich nicht wie ich dies beheben soll.
Hat vll. jemand eine tolle idee dazu.
Danke schon mal im vorraus

tschö michagolf4
Ich weiss das ich nichts weiss
  Mit Zitat antworten Zitat
Wotan89

Registriert seit: 20. Nov 2007
77 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Hilfe für TAPI

  Alt 12. Dez 2007, 12:45
Ich kenn mich leider wenig aus, aber kannst du nicht mit CreateThread für jede Bearbeitung einen Thread erstellen und durch WaitForSingleObject verhindern, dass der gleiche Eintrag o.ä. "gleichzeitig" bearbeitet und verändert wird.
  Mit Zitat antworten Zitat
michagolf4

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

Re: Hilfe für TAPI

  Alt 19. Dez 2007, 09:24
@ Mapfer hir die TAPI Komponente
einfach mal testen ob sie unter 2006 auch läuft aber wie schon gesagt ich benutze sie unter delphi 7



@ Wotan89 danke für den Tip hat auch so funktioniert und ist jetz soweit für die internen benutzung unserer firma bereit

danke auch an alle anderen die mir so nett geholfen haben
delphi praxis is echt klasse


tschö michagolf4
Angehängte Dateien
Dateityp: zip tapi_komponente_102.zip (6,6 KB, 56x aufgerufen)
Ich weiss das ich nichts weiss
  Mit Zitat antworten Zitat
Mapfer

Registriert seit: 26. Jan 2005
7 Beiträge
 
#9

Re: Hilfe für TAPI

  Alt 19. Dez 2007, 10:40
Herzlichen Dank.
Die Installation hat geklappt.

Nun werde ich ein wenig die Tapi Komponenten ausprobieren

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz