托盘的方式,收到消息后,把窗口show出来

解决方案 »

  1.   

    不知怎么就是没反映 以下是代码
     procedure Setup_Tel(Data:DWORD;B:integer);stdcall; external 'Sandu.dll';设定回调函数:(C++)  void WINAPI Setup_Tel(void (__stdcall  * fPost2User)(unsigned int),int getall=FALSE)
    功能:设定回调函数
    参数:1 fPost2User 回调函数地址;2 getall=0(默认)
    返回值:1 成功;0 失败。
    VB函数原型:Declare Sub Setup_Tel Lib "SANDU.DLL" (ByVal fPost2User As Long, ByVal getall As Long)
    function  Begin_Tel(Port:integer;powerchar:char):integer;stdcall ; external 'Sandu.dll';1.开启“来电通”函数 :(C++)  int  WINAPI Begin_Tel(int port,Char app)功能:开启“来电通”
    参数:1 port 端口号,ap 保留
    返回值:1 成功;0 失败。
    VB函数原型:Declare Function Begin_Tel Lib "SANDU.DLL" (ByVal port As Long, ByVal ap As Long) As Long
    Delphi函数参考:function  Begin_Tel(DIDN:integer;powerchar:Char):integer;stdcall ; far external 'Sandu.dll';以下是实现代码:procedure Test(aPort: integer);stdcall;var
      lpData:PNotifyIconData;
    //  TelNum: pchar;
    begin
    if aPort = 0 then
      begin
        mainform.IniDevList(nil);
      end 
      else
      begin
        if  IsIconic(mainform.Handle)=True  then
            begin
              lpData := new(PNotifyIconDataA);
              lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
              lpData.Wnd := Mainform.Handle;
              lpData.hIcon := Mainform.Icon.Handle;
              lpData.uCallbackMessage := WM_BARICON;
              lpData.uID :=0;
              lpData.szTip := 'Samples';
              lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
              Shell_NotifyIcon(NIM_DELETE,lpData);
              dispose(lpData);
              Mainform.Visible := True;
          end;    end;
    end;procedure Tmainform.IniDevList(Sender: TObject);
    begin
        if Begin_Tel(1, #1) = 1 then
          ldtzt:=1
        else
          ldtzt:=0;procedure Tmainform.FormCreate(Sender: TObject);
    begin
      IniDevList(nil);
      Setup_Tel(DWORD(@Test), 1);
    end;
      

  2.   

    用一个Timer检查是否来电     if 来电=true then
         begin
          Timer1.Enabled := false;
          Visible := True;
          Application.ShowMainForm := Visible;  //自动弹出
          SetForegroundWindow(Application.Handle);
          ShowWindow(Application.Handle, SW_SHOWNORMAL);
          GetUserMsg;//查询相应的用户信息,
        end;
      

  3.   

    问题就是这来电如何判断。本来用其提供的API调用回调过程,来响影事件,可回调过程就是没反映
      

  4.   

    楼上的兄弟,能否帮忙看看,当我用F7跟踪时,执行到Setup_Tel(DWORD(@Test), 1)时就时进不到test的过程进行跟踪。
      

  5.   

    你在Test中打断点试一下,看一下程序的执行路径。
      

  6.   

    建议楼主简化代码, 先确认回调是否正确, 给段代码以作参考:代码中的Memo1是MainForm中一个TMemo组件, 用作测试时显示回调信息。
    type
      TPost2User = procedure (aPort: Integer); stdcall;procedure Setup_Tel(fPost2User: TPost2User;  B: Integer); stdcall; external 'Sandu.dll';
    function  Begin_Tel(DIDN: Integer;  powerchar: Char): Integer; stdcall; external 'Sandu.dll';procedure Test(aPort: Integer);stdcall;
    begin
      MainForm.Memo1.Lines.Add('Test');
    end;procedure TMainForm.IniDevList(Sender: TObject);
    begin
      if Begin_Tel(1, #1) = 1 then
        ldtzt:=1
      else
        ldtzt:=0;
    end;procedure TMainForm.FormCreate(Sender: TObject);
    begin
      IniDevList(nil);
      Setup_Tel(Test, 1);
    end;
      

  7.   

    楼上的兄弟,我很早就试过了,根本就不会执行 MainForm.Memo1.Lines.Add('Test');这个来电通有DMEO。我第一次调试时,都正常,并能进入回调函数中执行。可过几天再调试,就进不去了,真是纳闷,这个DEMO我都没动过。
      

  8.   


    那还是仔细看一下那个"来电通"的SDK文档和Demo吧。