全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1682
推到 Plurk!
推到 Facebook!

程式一問

答題得分者是:老大仔
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-03-25 10:42:35 IP:59.125.xxx.xxx 未訂閱
各位大大好
小弟我最近再幫客戶寫一些應用小程式 掛在對方主機上跑
程式都是NEW一個APPLICATION的我想請問一下我今天要用
甚麼樣形態的PROJECT才能讓我的應用程式像MSN或SKYPE
一樣往下縮時可以縮到WINDOWS的右下角的工作列而不是
往正下方縮 謝謝
------
蔡志全
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-03-25 11:23:52 IP:59.120.xxx.xxx 未訂閱
請用Tray 或 tray icon 搜尋本站的文章
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-03-25 13:26:40 IP:59.125.xxx.xxx 未訂閱
感謝大大
===================引 用 老大仔 文 章===================
請用Tray 或 tray icon 搜尋本站的文章
------
蔡志全
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-03-27 12:07:24 IP:118.169.xxx.xxx 未訂閱
1.建議標題請用有意思的內容
2.使用tray 有兩種架構, 一種為Service Mode, 一種為Ap Mode 都可以做到,
建議用Ap Mode 來寫, 可以容易Deubg及發展, 也就是你現在的程式只要加上一些控制icon 的就可以了, 無須更改到你的程式

差異如下

在變數宣告中, 在 Private 與 Public 中加入以下宣告
private
procedure StartRun(Sender: Tobject; var Done: boolean);

protected
procedure ModifyTrayIcon(Action: DWORD);
procedure WndProc(var msg: TMessage); override;

在實作中寫下宣告的定義

// 使用startrun 來做是 form1 Create 完成後再進行 icon 的動作, 可以確保程式的安全性, 因為 create 當中
// 有些物件尚未被建立, 而這時如果建立icon 有可能會引發錯誤, 如果你想實證, 可以取消 startrun 相關設計
// 把 startrrun 中的 ModifyTrayIcon(NIM_ADD) 放到 onCreate 中去試試看就知道, 或許可行, 或許當掉
procedure TForm1.StartRun(Sender: Tobject; var Done: boolean);
var xhandle: longInt;
begin
xhandle:= FindWindow('TForm1',nil);
if xhandle = 0 then exit;
Application.OnIdle:= nil;
Done:= True;
Form1.Hide;
// 首次啟動畫面, 建立icon
ModifyTrayIcon(NIM_ADD);
end;

procedure TForm1.ModifyTrayIcon(Action: DWORD);
begin
BorderIcons := [];
with IconNotifyData do begin
hIcon := Application.Icon.Handle;
uCallbackMessage := WM_USER 5;
cbSize := sizeof(IconNotifyData);
Wnd := Handle;
uID := 0;
uFlags := NIF_MESSAGE NIF_ICON NIF_TIP;
end;
strPCopy(IconNotifyData.szTip, ''標題的caption);
shell_NotifyIcon(Action, @IconNotifyData);
end;

// 這段是在控制呼叫你的main form show 功能, 必須搭配 popup 功能
procedure TForm1.WndProc(var msg: TMessage);
var mousePos: TPoint;
begin
case msg.Msg of WM_USER 5:
begin
case msg.LParam of WM_LBUTTONDOWN:
begin
GetCursorPos(mousePos);
if Form1.Showing then Form_RS232.Hide
else begin
Show;
Form1.SetFocus;
end;
end;
end;
case msg.LParam of WM_RBUTTONDOWN:
begin
GetCursorPos(mousePos);
PopupMenu1.Popup(mousePos.x, mousePos.y); //right click, so popup menu
end;
end;
end;
end;
inherited;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
....... (如果有自己的程式, 不動, 最後加入下列這句)
Application.OnIdle:= StartRun;
end;

// 記住, 必須在 onCloseQuery 下寫, 而不是 onClose 下
// 因為如果點選視窗右上的[X] 不會觸發 onClose 事件
procedure TForm1.FormCloseQuery(Sender: TObject;
begin
...... (加入下列這句, 關閉程式才會釋放icon)
ModifyTrayIcon(NIM_DELETE);
end;

大致是這樣, 不知還有沒有漏掉的, 先做做看吧
cursegold
一般會員


發表:16
回覆:36
積分:15
註冊:2006-08-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-03-29 13:53:37 IP:59.125.xxx.xxx 未訂閱
感謝版主
------
蔡志全
系統時間:2024-05-17 6:52:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!