delphi实现座机来电弹屏的方法
座机来电弹屏在一些行业经常有使用,而delphi作为桌面开发的利器,使用者目前还不少。如何有简单代码实现来电弹屏呢?本代码以中盛座机来电显示盒为例,实践了回调函数的使用。
该来电盒稳定可靠,编程简单。来电显示盒有串口和usb免驱两种,后者应用较多,本代码是后者的一种简单实现。
unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; btnInit: TButton; btnFree: TButton; Memo2: TMemo; Label1: TLabel; procedure btnInitClick(Sender: TObject); procedure btnFreeClick(Sender: TObject); private { Private declarations } public { Public declarations } end; { 说明:ZSCIDDLL.dll包含二个函数,一个是初始化函数,一个是释放函数。 使用前先执行初始化函数ZSCIDInit,程序结束的时候执行ZSCIDFree。 初始化函数返回值为一longint类型的数值,ZSCIDFree的输入参数需要使用这个数值,所以必须为全局变量,demo中的FRef参数即是。 通常在create事件和destroy事件中调用,程序中为了描述方便,在init按钮和free按钮中调用 } { ZSCIDInit函数说明: 输入参数:两个回调函数的入口地址,回调函数的写法请参考:OnFremRecieve函数。返回值:句柄 重要说明:第一个回调函数处理的是来电字符串,AT指令返回的字符串,摘机挂机字符串等,和串口控件的接收事件一样。 第二个回调函数处理的是以下几种状态字符串:'检测到带录音和拨号的字符串。','带录音和拨号的来电盒被移除。'} function ZSCIDInit( ACidEvent:Pointer;AStateEvent:Pointer):LongInt;stdcall external 'ZSCIDDLL.dll'; /////////////////////////////////////////////////// {输入参数:句柄} procedure ZSCIDFree(ARef:LongInt );stdcall external 'ZSCIDDLL.dll'; /////////////////////////////////////////////////// var Form1: TForm1; FRef:LongInt; {很重要} implementation {$R *.dfm} { 回调函数,来电号码在这个函数里面处理。 ZSCIDInit函数的参数需要使用这个回调函数的入口地址。 发送AT指令后返回的字符串也在该函数中处理。 } procedure onFrmRecieve(const Data: PChar);stdcall; var s:string; begin s := StrPas(data); Form1.Memo1.Lines.Add(s); end; {回调函数,字符串为状态提示,'检测到来电显示盒。','来电显示盒被移除。' } procedure onFrmState(const Data: PChar);stdcall; var s:string; begin s := StrPas(data); Form1.Memo2.Lines.Add(s); end; procedure TForm1.btnInitClick(Sender: TObject); begin FRef := ZSCIDInit( @onFrmRecieve,@onFrmState); end; procedure TForm1.btnFreeClick(Sender: TObject); begin if FRef > 0 then begin ZSCIDFree(FRef); FRef := 0; end; end; end.
浙公网安备 33010602011771号