有些外部程序的托盘图标有好几种,
例如QQ,就有四个不同的托盘图标表示四种不同的状态.我的问题是,如何取得同一外部程序的所有的托盘图标并区分?例如: 根据QQ四个不同的托盘图标,四个不同的信息
    if ... then 
       ShowMessage('QQ隐身中...")
    .......
       ShowMessage('QQ上线中...")
    ...........................

解决方案 »

  1.   

    原讨论地方,问题还没有解决。
    http://www.cndelphi.com/bbs/dispbbs.asp?boardID=49&ID=236&skin=0
      

  2.   

    谢谢fancier(OP&&C/C++) ,xzgyb(老达摩),myling(阿德)
      

  3.   

    用TrayIcon控件不可以吗?代码控制他的ICON
      

  4.   

    再再UP,真的无解吗?兄弟们,up也有分阿.来吧,尽管UP
      

  5.   

    用MXTrayIcon控件應該可以實現你要的效果...........
      

  6.   

    hisourcezhang(小鱼龙变化) 和  jackie168(玉面書生):
        两位没看清楚题目.不过ths anyway.
      

  7.   

    是这个意思吗?
    Uses
        ShellAPI;Const
       WM_NID           = WM_USER + 1000;Var
       Form1            : TForm1;
       NotifyIcon       : TNotifyIconData;
       i                : integer = 0;
    Implementation{$R *.dfm}Procedure TForm1.FormCreate(Sender: TObject);
    Begin
       //NotifyIcon为全局变量,在程序的开头已经定义了
       With NotifyIcon Do
          Begin
             cbSize := SizeOf(TNotifyIconData);
             Wnd := Handle;                 //指向当前窗体Form1的句柄
             uID := 1;
             uFlags := NIF_ICON Or NIF_MESSAGE Or NIF_TIP;
             uCallBackMessage := WM_NID;    //自定义消息
             hIcon := Application.Icon.Handle;
             szTip := 'aaaa';
          End;
       //把设置好的变量NotifyIcon加入到系统中以便处理
       Shell_NotifyIcon(NIM_ADD, @NotifyIcon); }
    End;Procedure TForm1.FormDestroy(Sender: TObject);
    Begin
       Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
    End;Procedure TForm1.Timer1Timer(Sender: TObject);
    Begin
       Case i Of
          0:
             Begin
                Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
                With NotifyIcon Do
                   Begin
                      NotifyIcon.hIcon := Image1.Picture.Icon.Handle;
                   End;
                Shell_NotifyIcon(NIM_ADD, @NotifyIcon);
                i := 1;
             End;
          1:
             Begin
                Shell_NotifyIcon(NIM_DELETE, @NotifyIcon);
                With NotifyIcon Do
                   Begin
                      hIcon := Application.Icon.Handle;
                   End;
                Shell_NotifyIcon(NIM_ADD, @NotifyIcon);
                i := 0;
             End;
       End;
    End;End.
      

  8.   

    随便在image里加图标就行了这样托盘区的图标在来回切换
    其实托盘区的图标只有一个,就是hIcon指向的图标
    改变图标是不是就是改变了这个句柄?并不是有好多句柄
      

  9.   

    TNotifyIconData = TNotifyIconDataATNotifyIconDataA = _NOTIFYICONDATAA type_NOTIFYICONDATAA = record       cbSize: DWORD;       Wnd: HWND;       uID: UINT;       uFlags: UINT;       uCallbackMessage: UINT;       hIcon: HICON;//就是这个东东       szTip: array [0..63] of AnsiChar;end;
    1> cbSize就是你定义的NotifyIcon变量的大小,用SizeOf(TNotifyIconData)可以取得,如果你是一个熟练的C/C++程序员,你应该不会陌生。在C/C++中,每当要为一个结构体变量分配内存的时候都要:通过 SizeOf(Struct type) 来获知存放一个这样的结构体变量要多少内存。2>Wnd是一个句柄,你希望托盘程序产生的消息有哪个窗体来处理就让Wnd指向那个窗体。3>uID:如果你要创建多个托盘小程序,那么怎么区分它们呢?就是靠这个ID号来区分。4>uFlags是一个标志位,它表示当前所创建的托盘程序具有哪些性质:NIF_ICON       表示当前所设置的图标(即hIcon的值)是有效的 NIF_MESSAGE    表示当前所设置的系统消息(即uCallBackMessage的值)是有效的NIF_TIP        表示当前所设置的提示条(即szTip的值)是有效的。5> uCallBackMessage这是7个部分里面最重要的一个。这里指定一个回调消息,也就是说这里定义一个消息名,当你单击或者右击托盘图标的时候就会向你在Wnd所指向的窗体发送一个在uCallBackMessage中定义的消息名,然后你在程序中定义一个消息出来函数来处理这个消息。这样就把Windows关于消息的整套流程都处理好了。 6> hIcon为托盘图标的句柄,根据这个句柄你就可以增加、修改、删除图标。7> szTip就是当你的鼠标放到任务栏托盘的小图标上的时候弹出来的提示信息。
      

  10.   

    我有個這樣的demo,可我不知道你的mail。。
      

  11.   

    [email protected]
    請查收Mail...........
      

  12.   

    把图标存在IamgeList中,在切换读入,不就行了
      

  13.   

    呵呵,磁效应问的是如何能根据当前运行的QQ在系统托盘处的图标来显示自己需要的信心!AD老弟,你那程序是添加,删除图标的东西~~~~
      

  14.   

    我想楼主要先弄清楚 先因后果,我认为QQ的图标不同提示的状态也不同,是先设置的图标,后提示QQ处于什么状态;至于提示(鼠标放在图标上面的提示)可以根据设置的图标不同用一全局状态变量区分。不知道我现在有没有清楚楼主的意思,呵呵
      

  15.   

    先删除原有的,再添加一个新的可以实现呀...
    myling(阿德)
    的代码实现了此功能
      

  16.   

    阿德:
        好的.ths!
        我也一直在找资料,可惜没人做过类似的.很不好搞阿.jackie168(玉面書生):
        谢谢你的程序,也一起探讨吧.cmain83(龙行天下2008), FrameSniper(§坐拥书城铸内秀§) 都一起来吧.欢迎所有CSDN的朋友一起来!
      

  17.   

    各位,也去帮帮我的忙吧http://expert.csdn.net/Expert/topic/1987/1987131.xml?temp=.9765589
      

  18.   

    同意hisourcezhang(小鱼龙变化) 的  我这里有TrayIcon控件,要请留下MAIL。