Кнопки у системному меню

Мені потрібно деактивувати усі кнопки в системному меню. Наступний код деактивує лише кнопку "Закрити". Чому? І як деактивувати решту кнопок?

procedure TMainForm.FormCreate(Sender: TObject); var hMenu: THandle; begin hMenu := GetSystemMenu(Handle, False); EnableMenuItem(hMenu, SC_MINIMIZE, MF_GRAYED); EnableMenuItem(hMenu, SC_MAXIMIZE, MF_GRAYED); EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED); end;

> І як деактивувати решту кнопок? >у форми є властивість BorderIcons

Ні, BorderIcons не підходить. Наприклад, за допомогою BorderIcons не можна налаштувати меню так, що буде видно лише одну кнопку "Закрити" в затемненому стані (MF_GRAYED).

> що буде видно тільки одну кнопку "Закрити" в затемненому > стані (MF_GRAYED).навіщо потрібна кнопка, яка все одно не працює?

> код деактивує лише кнопку "Закрити". Чому? І як > деактивувати інші кнопки? http://groups.google.com/group/borland.public.delphi.winapi/msg/186a95701207b5b4

> http://groups.google.com/group/borland.public.delphi.winapi/msg/186a95701207b5b4 >Незрозуміло, що за штучні "обмеження системи" саме для кнопок згорнути та розгорнути вікно. А для закрити, здавалося б важливішої кнопки – обмежень немає. На мою думку, це баг явний.

> Незрозуміло, що за штучні "обмеження системи" саме > для кнопок згорнути та розгорнути вікно. А для закриття, здавалося > важливішої кнопки - обмежень немає. На мою думку, це > баг явний. Обмеження, IMHO, стосуються не тільки згаданих кнопок, тільки про це мало відомо, бо не документовано. У дельфі в таких випадках просто видаляютьнепотрібні пункти.

> Як Borland-вівці примудрилися це зробити, адже Delphi – > красива обгортка WinAPI? Якщо вибрати один biMaximize, то буде аналогічно. Справа не в борланді, вони роблять одне і теж (Forms.pas): procedure TCustomForm.WMNC );

Мабуть, MS вважає, що якщо ці можливості не потрібні, то їм немає місця в системному меню.

> Нічого не зрозумів. Чи можна докладніше? Ну, ось чого я зараз незрозумілого сказав?

procedure TForm1.CreateParams(var Params: TCreateParams); // override; begin inherited; Params.Style := Params.Style and not WS_MINIMIZEBOX and not WS_MAXIMIZEBOX; end;

Тобто системне меню конфігурується при створенні вікна функціями CreateWindow, CreateWindowEx. А потім на ньому хоч кілок чеші, EnableMenuItem зможе змінити стан лише SC_CLOSE. Я правильно зрозумів? :)

> Тобто системне меню конфігурується під час створення вікна функціями > CreateWindow, CreateWindowEx. А потім на ньому хоч кілок чеші Застосування може виконувати його власний контроль або заохочення відповідно до WM_INITMENU message that is sent before any menu is displayed.

Насправді, в обробнику WM_INITMENU можна засерити максі/мінімізацію, але стан кнопок вже не зміниться.