お世話になります。
起動時にフォームを最大化しておいて実行中フォームの最小化ボタンのみ有効
にする方法知りませんか。
フォームのサイズ全てを無効にするプロパティはありますが、最小化のみ
有効にするプロパティが見つかりません。
こんなんかな?
type
TForm1 = class(TForm)
private
procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND;
public
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
//最大化を維持するためリストア無効
if (Msg.CmdType and $FFF0) <> SC_RESTORE then begin
inherited;
end;
end;
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
//最小化ボタンを無効化
Params.Style := Params.Style AND (not WS_MAXIMIZEBOX);
end;
TFormのBorderIconsプロパティは?
biMaximizeをFlaseにすれば最大化ボタンは使用不可になりますけど・・・。
それとも「最小化」以外のシステムメニューを
全削除したいということなのかな?
ありがとうございました。
「最小化ボタンのみ有効」だよね。
procedure SetSysMemuMode(SysMode: Boolean);
var
hMenuHandle: HMENU;
vConst: LONGINT;
lStyle: LONGINT;
begin
case SysMode of
False: vConst := MF_GRAYED;
True : vConst := MF_ENABLED;
end;
hMenuHandle := GetSystemMenu(Form1.Handle, False);
if hMenuHandle <> 0 then begin
EnableMenuItem(hMenuHandle, SC_CLOSE, (MF_BYCOMMAND + vConst));
end;
lStyle := GetWindowLong(Form1.Handle, GWL_STYLE);
case SysMode of
False: lStyle := lStyle and (not WS_MAXIMIZEBOX);
True : lStyle := lStyle or WS_MAXIMIZEBOX;
end;
SetWindowLong(Form1.Handle, GWL_STYLE, lStyle);
DrawMenuBar(Form1.Handle);
SysMode := not SysMode;
end;
ツイート | ![]() |