線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1444
推到 Plurk!
推到 Facebook!

如何在視窗工作列實現trayico的功能

尚未結案
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-18 11:42:49 IP:219.80.xxx.xxx 未訂閱
各位前輩好 從站內download 'trayicon'元件 很好用,它可以有彈出式(pop)選單 也可以有不同事件(event)的運用,但它只能在視窗狀態列使用,如果我想在工作列上也可以有類似的功能該如何著手?謝謝 sam上
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-18 11:57:23 IP:220.130.xxx.xxx 未訂閱
sam_000 您好 : 站內討論 : http://delphi.ktop.com.tw/topic.php?topic_id=55498 http://delphi.ktop.com.tw/topic.php?topic_id=47817 http://delphi.ktop.com.tw/topic.php?topic_id=32195 請至 http://www.scalabium.com 下載 Freeware SMComponent library 使用TSMTrayIcon ,非常簡單好用 Freeware ,附 Source ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ---- 發表人 - SouthWind 於 2004/11/18 12:04:28
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-18 19:13:26 IP:211.22.xxx.xxx 未訂閱
版主提供的站內討論,看了許久,功能與trayicon元件提供的類似(不知我有沒弄錯) 但如果要達到在視窗工作列(非視窗工作列的狀態區status)能有pop彈出式功能或是滑鼠事件的運用,我的想法可能要能夠偵測到視窗工作列的相關事件 請問版主如何能偵測到視窗工作列的事件? sam
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-19 14:01:54 IP:220.130.xxx.xxx 未訂閱
引言: 版主提供的站內討論,看了許久,功能與trayicon元件提供的類似(不知我有沒弄錯) 但如果要達到在視窗工作列(非視窗工作列的狀態區status)能有pop彈出式功能或是滑鼠事件的運用,我的想法可能要能夠偵測到視窗工作列的相關事件 請問版主如何能偵測到視窗工作列的事件? sam
sam_000 您好 : 抱歉,是我弄錯您的意思了,Hook 所有的訊息,也許是一可行的方法,不過工程太浩大了,我直覺會去尋找 Shell 提供的 API,以及 taskbar 提供的 COM Interface 看是否能夠找到作法 ... Windows Shell Programming 也是自成一家的技巧,較少涉略,找到以下網路參考文件,祈能給您一點開始的線索... http://www.howtodothings.com/showarticle.asp?article=612 http://www.swissdelphicenter.ch/torry/showcode.php?id=1240 ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-19 18:08:50 IP:210.243.xxx.xxx 未訂閱
在視窗工作列加入自己的選單是可行的, 不過你的選單必須依存在系統選單下,因為系統選單你想刪也刪不掉(我試過用DeleteMenu, 不過其中一些選項無法刪除).剛才大略看了一下MSDN裡Shell Extention部份, 似乎也沒有能有效的解決這個問題的Interface可用(和工作列比較有關的有ITaskbarList,ITaskbarList兩個介面,有興趣可以看看).    這個小範例在執行起來後, 按下Button1就會在系統選單加入新選單, 用右鍵點選視窗工作列範例程式的Icon就可以看到結果了
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Menus;    Const
  // 新選單的ID
  MENU_ID_TEST1       = 100;
  MENU_ID_TEST2       = 101;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }        Function HandleSysCmd(var msg: TMessage): Boolean;      end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    Function TForm1.HandleSysCmd(var msg: TMessage): Boolean;
begin
  if msg.Msg = WM_SYSCOMMAND then
  begin
    case msg.WParam of
      MENU_ID_TEST1:
      begin
        // 當Test1選單被按下時要做的事
        ShowMessage('Test1');
      end;          MENU_ID_TEST2:
      begin
        // 當Test2選單被按下時要做的事
        ShowMessage('Test2');
      end;
    end;
  end;      Result := FALSE;
end;    procedure TForm1.Button1Click(Sender: TObject);
var
  hSysMenu: HMENU;
  
begin
  // 在系統選單插入新選單  
  hSysMenu := GetSystemMenu(Application.Handle, FALSE);
  // 加入新分隔線
  AppendMenu(hSysMenu, MF_SEPARATOR, 0, nil);
  // 加入新選單Test1
  AppendMenu(hSysMenu, MF_STRING, MENU_ID_TEST1, 'Test1');
  // 加入新選單Test2
  AppendMenu(hSysMenu, MF_STRING, MENU_ID_TEST2, 'Test2');
  
  Application.HookMainWindow(HandleSysCmd);
end;    end.
sam_000
一般會員


發表:27
回覆:47
積分:14
註冊:2003-09-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-11-21 18:15:23 IP:61.60.xxx.xxx 未訂閱
可以了,謝謝版主與前輩,不知該怎麼謝謝才好,這個世界因為有delphi k.top而變的容易了,謝謝 sam
系統時間:2024-05-14 4:45:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!