Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.884 Beiträge
 
Delphi 12 Athens
 
#2

Re: ISDN Ansprache will nicht so

  Alt 28. Nov 2007, 12:40
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:


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;
ich verwende für vieles Message Handler weil aus den Ereignissen heraus oft nicht reagiert werden kann.


Delphi-Quellcode:
    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;
Einige sind allerdings auch überflüssig... ist halt so gewachsen.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat