請問如何用程式打開TMainMenu中的某個子選項呢 |
尚未結案
|
webber
初階會員 發表:54 回覆:76 積分:26 註冊:2004-04-20 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
>請問如何用程式打開TMainMenu中的某個子選項呢
>有可能要打開某個子選項中的子選項 是可以做到的!不過....而且要讓焦點停在字選項上....!@#$% 難了!-_-
procedure TForm1.Button1Click(Sender: TObject); Const AutoItemID = 1; {要打開子選項的編號} var ARect : TRect; begin { 取得該子選項的位置座標} if GetMenuItemRect(Handle,MainMenu1.Handle,AutoItemID,ARect) then begin {該子選項為按下按鈕的狀態} HiliteMenuItem(Handle, MainMenu1.Handle,AutoItemID, MF_BYPOSITION or MF_HILITE); {顯示該子選項的項目} with ARect do TrackPopupMenuEx(MainMenu1.Items[AutoItemID].Handle, 0,Left,Bottom, Handle, nil); {取消該子選項為按下按鈕的狀態} HiliteMenuItem(Handle, MainMenu1.Handle,AutoItemID, MF_BYPOSITION or MF_UNHILITE); end; end;>另外, 有辦法知道目前的焦點停在那個子選項上嗎 接管 WM_MENUSELECT 訊息就可以了。 |
webber
初階會員 發表:54 回覆:76 積分:26 註冊:2004-04-20 發送簡訊給我 |
|
webber
初階會員 發表:54 回覆:76 積分:26 註冊:2004-04-20 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
>另外, 有辦法知道目前的焦點停在那個子選項上嗎
接管 WM_MENUSELECT 訊息就可以了 如下:
type TForm1 = class(TForm) MainMenu1: TMainMenu; N111111111: TMenuItem; N22222222221: TMenuItem; N3333333333331: TMenuItem; N44444441: TMenuItem; N555555551: TMenuItem; Label1: TLabel; private Procedure WMMENUSELECT(var Message:TWMMenuSelect);Message WM_MENUSELECT; public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} Procedure TForm1.WMMENUSELECT(var Message:TWMMenuSelect); begin Label1.Caption := inttostr(Message.IDItem); end; |
sprewell
一般會員 發表:13 回覆:21 積分:6 註冊:2003-11-10 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
引言: 請問關於停留在子選項的部份, 我試了一下, ㄧ樣利用GetMenuItemRect(Handle,bbb1.Handle,1,ARect) [bbb1是含有其他Item的TMenuItem] 可以取到TRect, 不過要再做按下按鈕跟顯示項目就有點怪怪的>< 可以請大大再指點ㄧ下嗎?說指點不敢當! 主要認為 要讓焦點停在字選項上.... 就系統消息機制面,來說是可能做不到的。 主要跟滑鼠移動相關。 事實上,應可用取巧方式。 在該項目 利用 OnDrawItem (自己畫)使其反藍聚焦。 再利用 WM_MENUSELECT 取消反藍。 發表人 - wameng 於 2005/01/25 11:56:21 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |