システムニューに新しい項目を追加する

ここではシステムメニューの「元のサイズに戻す」の上と「閉じる」の下に新しい項目を追加します。




■必要なコンポーネント

■使用するAPI関数

■InsertMenuの説明
第一引数 システムメニューのハンドル
第二引数 挿入位置(SC_××参照)
第三引数 MF_BYCOMMAND(挿入位置の上に項目を追加)
       MF_BYPOSITION(挿入位置の下に項目を追加)
第四引数 独自の番号をつける(メッセージをフックする時に使用)
第五引数 追加する名前(nilにすると区切り線になる)


定数一覧
項目名
SC_CLOSE 「閉じる」
SC_SIZE 「サイズ変更」
SC_MAXIMIZE 「最大化」
SC_RESTORE 「元のサイズに戻す」
SC_MINIMIZE 「最小化」
SC_MOVE 「移動」


■ソースは下記のようになります。

システムメニューに新しい項目を追加する処理
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);

private
{ Private 宣言 }
Procedure WMSYSCOMMAND(var Msg : TWMSYSCOMMAND);Message WM_SYSCOMMAND;

public
{ Public 宣言 }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
 hMen : hMenu;
begin

 //システムメニューのハンドルを取得
 hMen := GetSystemMenu(Handle,False);

 //システムメニューの「元に戻す」の上に追加
 InsertMenu(hMen, SC_RESTORE, MF_BYCOMMAND, 1, 'MADIAのVB研究室') ;

 //システムメニューの「閉じる」の下に追加

 
InsertMenu(hMen,SC_CLOSE, MF_BYPOSITION,2,'PAPY');

end;


Procedure TForm1.WMSYSCOMMAND(var Msg : TWMSYSCOMMAND);
begin


 //「MADIAのVB研究室」を押した時
 If Msg.CmdType =1 Then
 begin

  ShowMessage('当サイトはMADIAとPAPYの二人で運営しています。');

 end;


 //「PAPY」押した時
 If Msg.CmdType = 2 Then
 begin

  ShowMessage('このサンプルの製作者です。');

 end;


 //「最小化ボタンを押した時」
 If Msg.CmdType = SC_MINIMIZE Then

  //ウインドウを最小化する(これをしないとウインドウがタスクバーに入らない)
  CloseWindow(Application.Handle)

 else

  //残りの処理(「閉じる」など)をDelphiに任せる
  DefaultHandler(Msg);

end;

end.





Win32APIのページへ



ホーム PV ランキング