フォームの最小化ボタンのみ表示

解決


デルデル  2007-04-08 20:39:01  No: 25673

お世話になります。
起動時にフォームを最大化しておいて実行中フォームの最小化ボタンのみ有効
にする方法知りませんか。
フォームのサイズ全てを無効にするプロパティはありますが、最小化のみ
有効にするプロパティが見つかりません。


orz  2007-04-09 05:09:54  No: 25674

こんなんかな?

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;


みんみん  2007-04-12 07:05:54  No: 25675

TFormのBorderIconsプロパティは?
biMaximizeをFlaseにすれば最大化ボタンは使用不可になりますけど・・・。

それとも「最小化」以外のシステムメニューを
全削除したいということなのかな?


デルデル  2007-04-25 01:54:16  No: 25676

ありがとうございました。


ホントに?  2007-04-25 03:41:16  No: 25677

「最小化ボタンのみ有効」だよね。
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;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加