如何偵測tray icon 所在座標 |
缺席
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
請問各位三個問題:
我利用這幾組參數寫了一支Service 的程式, 這是一支自動備份指定檔案的程式 procedure AddServiceIcon(); procedure DelServiceIcon(); procedure ServiceMessage(var Msg: TMessage); message WM_PAOSERVICEMESSAGE; procedure QueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION; 已經順利將程式加入到tray 中的icon, 如圖一(紅圈部份) 如今我想要在自動備份啟動時show一個form出來, 而這個form是跟隨icon相關位置顯示出來, 因為每一家的icon數不一定, 所以我希望form的啟始位置是可以在這個icon left 位置開始秀出來, 問題一, 如何取得 目前 icon 在scrren中的x,y座標, 如果我設定取得 BackupServiceForm.left (BackupServiceForm 是這個mainForm name), 得到的是這個main form 的位置, 而不是在tray 中icon位置, 所以有何函式可以抓到紅圈的x,y座標? 問題二, 當我以service模式寫這支程式, 如果我是這樣使用mainform的語法 if (Msg.LParam = WM_LBUTTONDBLCLK) then begin Label9.Caption:= 'x:' InttoStr(BackupServiceForm.Left); Label10.Caption:= 'y:' InttoStr(BackupServiceForm.Top); Show(); end; 當本段被執行時會有錯誤發生, 但如果我改成下列, 就沒有問題, 也就是說, 以Service在跑的程式無法加入該Formname BackupServiceForm.xxxxx 的方式, 這是為何? 若是以Application 則是沒有問題的, 換句話說, 如果我有好幾個form在service中, form2 就無法直接引用 BackupServiceForm 中的元件或public 變數, 我必須另外設定unit 來存取 bacupServiceForm 中的變數再傳到 form2 之中, 很麻煩 if (Msg.LParam = WM_LBUTTONDBLCLK) then begin Label9.Caption:= 'x:' InttoStr(left); Label10.Caption:= 'y:' InttoStr(top); Show(); end; 問題三 我發現, 如果被寫成Service mode 時, edit 類的元件無法輸入, 但在Application 下是正常的, 可是如 spinedit, combox, listbox 等卻又可以選擇, 是否service 下真的會被鎖定edit 之類無法輸入 如圖 編輯記錄
P.D. 重新編輯於 2007-11-02 21:59:27, 註解 無‧
|
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
問題一, 如何取得 目前 icon 在scrren中的x,y座標
因為你是用 Mouse在 icon 點選, 可以使用 GetCursorPos 取得目前 Mouse 所在座標 至於 Screen 座標與 TPoint 的轉換要用 ScreenToClient & ClientToScreen 就我所知問題二,三可能要將 Service 與 Form 界面分開寫, 不過這部份我沒寫過 ===================引 用 P.D. 文 章=================== 請問各位三個問題: 我利用這幾組參數寫了一支Service 的程式, 這是一支自動備份指定檔案的程式 procedure AddServiceIcon(); procedure DelServiceIcon(); procedure ServiceMessage(var Msg: TMessage); message WM_PAOSERVICEMESSAGE; procedure QueryEndSession(var Msg: TMessage); message WM_QUERYENDSESSION; 已經順利將程式加入到tray 中的icon, 如圖一(紅圈部份) 如今我想要在自動備份啟動時show一個form出來, 而這個form是跟隨icon相關位置顯示出來, 因為每一家的icon數不一定, 所以我希望form的啟始位置是可以在這個icon left 位置開始秀出來, 問題一, 如何取得 目前 icon 在scrren中的x,y座標, 如果我設定取得 BackupServiceForm.left (BackupServiceForm 是這個mainForm name), 得到的是這個main form 的位置, 而不是在tray 中icon位置, 所以有何函式可以抓到紅圈的x,y座標? 問題二, 當我以service模式寫這支程式, 如果我是這樣使用mainform的語法 if (Msg.LParam = WM_LBUTTONDBLCLK) then begin Label9.Caption:= 'x:' InttoStr(BackupServiceForm.Left); Label10.Caption:= 'y:' InttoStr(BackupServiceForm.Top); Show(); end; 當本段被執行時會有錯誤發生, 但如果我改成下列, 就沒有問題, 也就是說, 以Service在跑的程式無法加入該Formname BackupServiceForm.xxxxx 的方式, 這是為何? 若是以Application 則是沒有問題的, 換句話說, 如果我有好幾個form在service中, form2 就無法直接引用 BackupServiceForm 中的元件或public 變數, 我必須另外設定unit 來存取 bacupServiceForm 中的變數再傳到 form2 之中, 很麻煩 if (Msg.LParam = WM_LBUTTONDBLCLK) then begin Label9.Caption:= 'x:' InttoStr(left); Label10.Caption:= 'y:' InttoStr(top); Show(); end; 問題三 我發現, 如果被寫成Service mode 時, edit 類的元件無法輸入, 但在Application 下是正常的, 可是如 spinedit, combox, listbox 等卻又可以選擇, 是否service 下真的會被鎖定edit 之類無法輸入 如圖
------
將問題盡快結案也是一種禮貌! |
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |