![]() |
ISDN Ansprache will nicht so
hallo,
ich habe die ISDN komponente "capiisdn" (die gibts hier im Forum) Weiß jetzt nicht wie der Typ hieß der die gemacht hat, ist auf jedenfall ne bekannt, also insider müssten wissen welche ich meine. Da ist ne Anrufbeantworter Demo dabei und die kann waves abspielen. So jetzt meine Frage: ich will, dass mein Programm die wave nur abspielt wenn er eine best. Nummer gewählt hat:
Delphi-Quellcode:
in Edit1 steht die interne Nummer die angerufen wird.
procedure TForm1.CAPIISDN1IncomingCall(ConnectionID: Integer;
CallingPartyNumber, CalledPartyNumber: String; CipValue: Word; CipValueString: String); begin if CallingPartyNumber = '' then begin CallingPartyNumber := 'Unbekannt'; end; Memo1.Lines.Add('Anruf Von: ' + CallingPartyNumber + ' An MSN: ' + CalledPartyNumber + ' Uhrzeit: ' + datetostr(now)); if CalledPartyNumber = Edit2.Text then begin capiisdn1.DefaultResponse := rAccept; end; Jedoch egal was ich probiere nie klappt es. Ich kann bei DefaultResponseCause: rjeIgnoreCall und rjeNormalCallClear auswählen. Bei DefaultResponseAction: rAccept und rReject bei rReject wird sofort aufgelegt und bei rAccept wird automatisch angenommen. rjeIgnoreCall und rjeNormalCallClear = k.A. bringt beides irgendwie nichts. Fakt ist, das ich probiert habe beim Incoming Call zu prüfen welche MSN angerufen wird und dann soll der den Status auf rAccept setzen und annehmen. Jedoch passiert da nur was wenn rjeNormalCallClear ausgewählt wurde (s.o.) ist ja klar denk ich mal. So, jetzt teste ich das ganze indem ich das in der schleife passend setze und der Anruf wird angenommen. Wenn ich im OnDisconnect jetzt die Einstellungen wieder zurücksetze passiert irgendwie nichts, weitere anrufe werden auch angenommen welche an eine andere Nummer gehen. Ich bin selbst verwirrt weil ich schon über 10 Kombinationen probiert habe und nie funzt es. Deswegen bedanke ich mich schonmal für jegliche Hilfe!!! Ich möchte also das ein Anruf welche an eine best. Nummer geht angenommen wird, andere sollen nicht angenommen werden(Telefon klingelt dann) mfg skunker |
Re: ISDN Ansprache will nicht so
Du kannst das nicht innerhalb des Events machen.
- Baue einen MessageHandler. - Schicke im Event eine selbstdefinierte WM_abheben Message mit der PostMessage Funktion (NICHT Sendmessage). - Programmiere im WM_Abheben MessageHandler das abheben.
Delphi-Quellcode:
ich verwende für vieles Message Handler weil aus den Ereignissen heraus oft nicht reagiert werden kann.Procedure TCAPIISDN_ImpEvents.IncomingCallEVENT (ConnectionID :integer; CallingPartyNumber : string; CalledPartyNumber : string; CipValue : word; CipValueString : string) ; begin If assigned (Protokoll) then Begin Protokoll.add(''); Protokoll.add('INCOMMING'); Protokoll.add('ConnectionID:' + inttostr(ConnectionID)); Protokoll.add('CallingPartyNumber:' + CallingPartyNumber); Protokoll.add('CalledPartyNumber:' + CalledPartyNumber); Protokoll.add('CipValue:' + inttostr(CipValue)); Protokoll.add('CipValueString:' + CipValueString); end; OpenConnections.Add( TOpenConnection.Create( DefaultController, ConnectionID, CallingPartyNumber, CalledPartyNumber, self, TCapiTermFormular(owner).Client ) ); OpenConnections.Items[openConnections.Count-1].operate; // Hier drinnen mache ich evtl. TOpenConnection.TakeCall; end; Procedure TOpenConnection.TakeCall; Begin PostMessage(fCapi.handle, WM_ACCEPTCALL,0 ,ID); //Application.ProcessMessages;// !!!gefährlich!!! bei Fehlern zuerst prüfen //SendMessage(fCapi.handle, WM_ACCEPTCALL,0 ,ID); end; Procedure TCAPI_MSG_RECEIVER.WMAcceptCall(var message:tmessage); Begin try if assigned(capiisdn) then CAPIISDN.AcceptCall(message.LParam); except on e:EACcessviolation do Begin Showmessage('Fehler:WMAcceptCall'); end; end; end;
Delphi-Quellcode:
Einige sind allerdings auch überflüssig... ist halt so gewachsen.
Procedure WMAcceptCall(var message:tmessage);Message WM_ACCEPTCALL;
Procedure WMListenDTMF(var message:tmessage);Message WM_LISTENDTMF; Procedure WMREJECTCALL(var message:tmessage);Message WM_REJECTCALL; Procedure WMDISCONNECT(var message:tmessage);Message WM_DISCONNECT; Procedure WMCONNECT(var message:tmessage);Message WM_CONNECT; Procedure WMPLAY(var message:tmessage);Message WM_PLAY; Procedure WMSTOPPLAY(var message:tmessage);Message WM_STOPPLAY; Procedure WMCLEARCALL(var message:tmessage);Message WM_CLEARCALL; Procedure WMOPERATE(Var message:tmessage);Message WM_OPERATE; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz