Форум: "WinAPI";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
ВнизКнопки в системном меню Найти похожие ветки
← →
Deltas © (2008-08-26 20:34) [0]Мне нужно деактивировать все кнопки в системном меню. Следующий код деактивирует только кнопку "Закрыть". Почему? И как деактивировать остальные кнопки?
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;
← →
DVM © (2008-08-26 20:59) [1]
> И как деактивировать остальные кнопки?
>
у формы есть свойство BorderIcons
← →
Deltas © (2008-08-26 21:06) [2]Нет, BorderIcons не подходит. Например, с помощью BorderIcons нельзя настроить меню так, что будет видна только одна кнопка "Закрыть" в затемненном состоянии (MF_GRAYED).
← →
DVM © (2008-08-26 21:16) [3]
> что будет видна только одна кнопка "Закрыть" в затемненном
> состоянии (MF_GRAYED).
зачем нужна кнопка, которая все равно не работает?
← →
Leonid Troyanovsky © (2008-08-27 09:40) [4]
> Deltas © (26.08.08 20:34)
> код деактивирует только кнопку "Закрыть". Почему? И как
> деактивировать остальные кнопки?
http://groups.google.com/group/borland.public.delphi.winapi/msg/186a95701207b5b4
--
Regards, LVT.
← →
DVM © (2008-08-27 10:55) [5]
> http://groups.google.com/group/borland.public.delphi.winapi/msg/186a95701207b5b4
>
Непонятно, что за искусственные "ограничения системы" именно для кнопок свернуть и развернуть окно. А для закрыть, казалось бы более важной кнопки - ограничений нет. По-моему, это баг явный.
← →
Leonid Troyanovsky © (2008-08-27 13:33) [6]
> DVM © (27.08.08 10:55) [5]
> Непонятно, что за искусственные "ограничения системы" именно
> для кнопок свернуть и развернуть окно. А для закрыть, казалось
> бы более важной кнопки - ограничений нет. По-моему, это
> баг явный.
Ограничения, IMHO, касаются не только упомянутых кнопок,
только про это мало известно, бо не документировано.
В дельфи в таких случаях просто удаляют ненужные пункты.
--
Regards, LVT.
← →
Deltas © (2008-08-27 16:04) [7]
> Leonid Troyanovsky © (27.08.08 09:40) [4]
Спасибо. Статью прочитал.
Но, возникает еще один вопрос. Если в свойстве формы BorderIcons отключить biMinimize, а остальные флажки установить включенными, то при запуске приложения кнопка свернуть будет неактивной в затмненном состоянии. Для biMaximize аналогичная ситуация. Как Borland-овцы умудрились это сделать, ведь Delphi - красивая обертка WinAPI?
← →
Leonid Troyanovsky © (2008-08-27 16:18) [8]
> Deltas © (27.08.08 16:04) [7]
> Как Borland-овцы умудрились это сделать, ведь Delphi -
> красивая обертка WinAPI?
Если выбрать один biMaximize, то будет аналогично.
Дело не в борланде, они делают одно и тоже (Forms.pas):
procedure TCustomForm.WMNCCreate(var Message: TWMNCCreate);
Видимо, MS считает, что если эти возможности не нужны,
то им нет места в системном меню.
--
Regards, LVT.
← →
Deltas © (2008-08-27 16:33) [9]
> Leonid Troyanovsky © (27.08.08 16:18) [8]
Ничего не понял. Можно подробнее?
Я настриваю BorderIcons = [biSystemMenu, biMaximize]. При запуске программы, вижу, что кнопка "Свернуть" отображается затемненной, а все остальные - активными. Т.е., значит есть возможость отключить только кнопку "Свернуть". Модуль Forms.pas я смотрел, даже запускал прорамму по шагам со включнным флажком компилятора "Use Debug DCUs". Пока не понимаю, почему там отключается кнопка "Свернуть", а в моей процедуре (см. вопрос обсуждения) нет?
← →
Leonid Troyanovsky © (2008-08-27 18:09) [10]
> Deltas © (27.08.08 16:33) [9]
> Ничего не понял. Можно подробнее?
Ну, вот чего я сейчас непонятного сказал?
procedure TForm1.CreateParams(var Params: TCreateParams); // override;
begin
inherited;
Params.Style := Params.Style and not WS_MINIMIZEBOX and not WS_MAXIMIZEBOX;
end;
--
Regards, LVT.
← →
Deltas © (2008-08-27 18:40) [11]Т.е., системное меню конфигурируется при создании окна функциями CreateWindow, CreateWindowEx. А потом на нем хоть кол чеши, EnableMenuItem сможет изменить состояние только SC_CLOSE. Я правильно понял? :)
← →
Leonid Troyanovsky © (2008-08-28 11:15) [12]
> Deltas © (27.08.08 18:40) [11]
> Т.е., системное меню конфигурируется при создании окна функциями
> CreateWindow, CreateWindowEx. А потом на нем хоть кол чеши
The application can perform its own checking or graying by responding to the
WM_INITMENU message that is sent before any menu is displayed.
Дейс-но, в обработчике WM_INITMENU можно засерить макси/мини мизацию, но состояние кнопок уже не изменится.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.10.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c