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

Вниз

System Menu   Найти похожие ветки 

 
bent   (2002-12-11 07:10) [0]

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


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

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


 
apay ©   (2002-12-11 09:13) [2]

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


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

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

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


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

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


 
apay ©   (2002-12-11 21:34) [4]

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


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

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


 
Юрий Зотов ©   (2002-12-11 23:23) [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-12 07:19) [7]

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-12 11:03) [8]

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

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

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

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

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


 
bent   (2002-12-12 15:50) [9]

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


 
Cobalt ©   (2002-12-13 01:22) [10]

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-13 07:18) [11]

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



Страницы: 1 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.012 c
7-87170
ctapik-net
2002-11-14 20:34
2003.01.27
Очень интересный вопрос


1-86861
jiura
2003-01-19 19:40
2003.01.27
РУсский язык в Delphi


3-86710
Aleksandr
2003-01-09 13:39
2003.01.27
Как создать убывающую индексацию для ClientDataSet?


14-87142
школьник
2003-01-10 14:05
2003.01.27
image3Click не работает 8-((


14-87110
DDDeN
2003-01-03 18:34
2003.01.27
Раскрутка !!!