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

更改系統選單程式有二個地方搞不懂?

尚未結案
0908
一般會員


發表:10
回覆:4
積分:2
註冊:2002-12-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-01-11 17:58:32 IP:218.165.xxx.xxx 未訂閱
下面這個程式可以將系統選單加上一個選項﹝前端顯示﹞即永遠保持在最前一個同時選中會有打勾標誌,但有二個地方我搞不懂不知是否有先進幫小弟解釋一下: // interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs,menus; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure SystemMenuCommand(var msg:TWMMENUSELECT); message WM_SysCommand; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin appendmenu(getsystemmenu(handle,false),MF_SEPARATOR,0,''); appendmenu(getsystemmenu(handle,false),MF_STRING,300,'前端顯示(&A)'); end; procedure tform1.SystemMenuCommand(var msg:TWMMENUSELECT); begin if msg.IDItem=300 then begin if form1.FormStyle=fsnormal then begin form1.FormStyle:=fsstayontop; appendmenu(getsystemmenu(handle,false),MF_SEPARATOR,0,''); appendmenu(getsystemmenu(handle,false),MF_STRING,300,'前端顯示(&A)'); modifymenu(getsystemmenu(handle,false),300,MF_CHECKED,300,'前端顯示(&A)'); END else begin form1.FormStyle:=fsnormal; appendmenu(getsystemmenu(handle,false),MF_SEPARATOR,0,''); appendmenu(getsystemmenu(handle,false),MF_STRING,300,'前端顯示(&A)'); end; end; inherited end; end. // 請問: procedure SystemMenuCommand(var msg:TWMMENUSELECT); message WM_SysCommand; 這二行宣告中:var msg:TWMMENUSELECT及message WM_SysCommand;是什麼意思? suen
------
孫鍾銳
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-01-11 22:22:16 IP:203.70.xxx.xxx 未訂閱
轉貼--google找到的 http://www.google.com.tw/search?q=cache:efuNAtlf_dMJ:www.cndevx.com/tips/showdoc.asp%3Fdetail_id%3D1086+WM_SysCommand&hl=zh-TW&lr=lang_zh-CN|lang_zh-TW&ie=UTF-8 首先需要知道一點是系統菜單的工作過程。當我們單擊系統菜單中某一項時,應用程序窗口會收到一條WM_SYSCOMMAND消息,該消息包含了系統菜單中所單擊那一項的標識符ID。此時,應用程序窗口的默認窗口函數會根據WM_SYSCOMMAND消息以及菜單標識符ID執行相應的操作,完成菜單命令。如果我們能攔截到達窗口的WM_SYSCOMMAND消息,並且識別出菜單的標識符ID,我們就能夠在系統菜單上添加自己的菜單項,並且執行指定的動作。下面的例子就是在系統菜單上添加一條分隔符和"關於…"菜單項    其實如果打TWMMENUSELECT會有更多資訊... > 永遠追不上技術更新的速度
------
星期一,二...無窮迴圈@@
0908
一般會員


發表:10
回覆:4
積分:2
註冊:2002-12-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-01-12 17:17:23 IP:218.165.xxx.xxx 未訂閱
謝謝pgdennis大大的解說,我研究半天都搞不懂原來要更改系統選單不是WM_COMMMAND而是WM_SYSCOMMAND訊息難怪搞了半天都搞不懂啊!基本上要重載WM_SYSCOMMAND訊息其程式目的就是在前端顯示和not前端顯示中選項!又學會一招了,這個程式蠻好玩的我想解釋程式中幾個API的用法有興趣的同好可以玩玩以體認DELPHI在這方面的威力! appendmenu(getsystemmenu(handle,false),MF_SEPARATOR,0,''); 可將一個新的選項加入選單中: 他有四個參數值1.欲變更選單之HANDLE//2.FLAG旗標(MF_SEPARATOR)是指在指定的位置上加上一條分隔線//(MF_STRING)指在指定的位置上放置一個字串//3.ID//這裡值為零因為是分隔線不要回傳其值//如是(MF_STRING)則需指定一個整值//4.內容//分隔線無內容以空值表示//如是(MF_STRING)則需指定要顯示的選項的文字。 getsystemmenu(handle,false)這個api是重點你要更改windows的系統選單必須要告訴windows允許更改!他有二個值//1.handle//2.false值允許更改並回傳選單ID//true值維持為預設的選單。 modifymenu(getsystemmenu(handle,false),300,MF_CHECKED,300,'前端顯示(&A)'); //變更一個已存在的項目外觀這個API他的參數值大致和上一個類似其中(MF_CHECKED)是指你在選中時會有一個打勾的記號出現,二個整值第一個是要變更的選項,後一個是要修改的選項。 suen
------
孫鍾銳
系統時間:2024-05-21 18:07:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!