Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

System Menu [D5, Win95/98, WinME]


bent ©   (2002-12-11 07:10:00) 

Как вазвать системное меню окна? Иещё один вопрос: Можно ли добавить свой пункт в меню приложения(то, которое появляется, когда мы на кнопке приложения на таскбаре правой кнопкой тыркнем) и как это сделать?


bent   (2002-12-13 07:18:00) [1]

Подождите, я чё-то не чё не понял. Что ине нужно сделать?


Cobalt   (2002-12-13 01:22:00) [2]

a-la apay ©
английский тоже неплохо учить вместе с русским
hWnd

Identifies the window that owns the shortcut menu. This window receives all messages from the menu. The window does not receive a WM_COMMAND message from the menu until the function returns.
------------------------------
Указывает окно, которое владеет шорткатами меню. Это окно получает все сообщения от меню (типа WM_MEASUREITEM and WM_DRAWITEM messages). Окно не получает сообщение WM_COMMAND от меню до тех пор, пока ф-ия не возвратит результат.

В общем, форма не будет замораживаться, потому, что (подозреваю), в этой ф-ии есть цикл приема-обработки сообщений. Имелось в виду, что как только один из пунктов будет выбран, то ф-ия вернет результат и в очереди будет сообщение WM_COMMAND.


bent   (2002-12-12 15:50:00) [3]

Я создаю форму без CaptionBar(вместо CaptionBar - label). И мне нужно, чтобы этот Label был похож на CaptionBar. И я хочу, чтобы при нажатие правой кнопки мыши на label"e появлялось системное меню формы со стандартными пунктами и при выборе одно из пунктов, приложение выполняло стандартное действие, соответствующее этому пункту меню(например при выборе пункта "свернуть" приложение сворачивалось в TaskBar).


Юрий Зотов   (2002-12-12 11:03:00) [4]

Читаем исходный вопрос.

1. Как вызвать системное меню окна?
Ответ был дан - TrackPopupMenu(Ex).

2. Можно ли добавить свой пункт в меню приложения ... и как это сделать?
Ответ тоже был дан, в виде работающего примера.

Что же еще нужно-то? При чем тут WM_COMMAND и стандартные сообщения? Неясно.

Вы бы рассказали о задаче подробнее. Что-нибудь придумаем.


bent   (2002-12-12 07:19:00) [5]

To Юрий Зотов © (11.12.02 23:23)
Да добовлять пункт я умею, мне надо, чтобы форма реагировала на стандартные сообщения,но Win Help пишут:"The window does not receive a WM_COMMAND message from the menu until the function (TrackPopupMenuEx()) returns." Может есть какой-то другой срособ
отобразить системное меню?


Юрий Зотов   (2002-12-11 23:23:00) [6]

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
end;

...

const
SC_MyMenuItem = WM_USER + 1;

procedure TForm1.FormCreate(Sender: TObject);
begin
AppendMenu(GetSystemMenu(Handle, FALSE), MF_SEPARATOR, 0, "");
AppendMenu(GetSystemMenu(Handle, FALSE), MF_STRING, SC_MyMenuItem, "Hello!")
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MyMenuItem then ShowMessage("Hello!") else inherited
end;


bent   (2002-12-11 22:05:00) [7]

To apay © (11.12.02 21:34)
Да какая разница, форма то всё равно не риагирует


apay   (2002-12-11 21:34:00) [8]

WinAPI help иногда и читать полезно!!!
от системного меню идут WM_SYSCOMMAND


bent   (2002-12-11 18:24:00) [9]

Теперь ещё один вопрос. Меню появляется, но в WinAPI help пишут: "... The window does not receive a WM_COMMAND message from the menu until the function returns." А функция возвращает значение только после токо, как мы кликнем на какой-нибудь пункт в меню, так что форма не реагирует на WM_COMMAND, посылаемые ей меню. Так чёж делать-то?


apay   (2002-12-11 09:13:00) [10]

Получить его:
var
SysMenu: HMENU;
...
SysMenu := GetSystemMenu( FormX.Handle, False );


переделываем его:
(см. "Menu Functions" в WinAPI help )
с помощью WinAPI >

Отобразить его:
TrackPopupMenuEx( SysMenu, ... );

P.S.
WinAPI help иногда и читать полезно!!!


Song   (2002-12-11 08:36:00) [11]

Что значит "вызвать"?
Добавить пункт - InsertMenuItem()


Наверх

Титульная страница Поиск, карта сайта Написать письмо