更改系統選單程式有二個地方搞不懂? |
尚未結案
|
0908
一般會員 發表:10 回覆:4 積分:2 註冊:2002-12-31 發送簡訊給我 |
下面這個程式可以將系統選單加上一個選項﹝前端顯示﹞即永遠保持在最前一個同時選中會有打勾標誌,但有二個地方我搞不懂不知是否有先進幫小弟解釋一下:
//
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 發送簡訊給我 |
轉貼--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 發送簡訊給我 |
謝謝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
------
孫鍾銳 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |