Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.18;
Скачать: CL | DM;

Вниз

Кнопки в системном меню   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2009.10.18;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
2-1250248366
Dymok
2009-08-14 15:12
2009.10.18
Как автоматически ставить пробел после запятой


2-1250058131
Sergey2
2009-08-12 10:22
2009.10.18
деление без остатка


2-1250151996
Дмитрий Л.
2009-08-13 12:26
2009.10.18
Система контроля ошибок


1-1220000095
Boris12
2008-08-29 12:54
2009.10.18
MSBuild + Delphi 2007 = дружат или нет?


2-1250445565
alvonen
2009-08-16 21:59
2009.10.18
TOP_MOST окно перекрывается другими