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.