Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1250337245
Чипырик
2009-08-15 15:54
2009.10.18
Вопрос по БД


2-1250593303
Miklyha
2009-08-18 15:01
2009.10.18
Не срабатывает Form1.Close;


15-1250254148
Копир
2009-08-14 16:49
2009.10.18
Цифра против аналогии.


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский