![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить Handle системного Popup меню?
Cosinus © (2004-10-06 14:06:00)А именно того, который выскакивает при нажатии на правую кнопку, если указатель мыши находится например над TEdit(вырезать, копировать и т.д.)?
DVM (2004-10-06 20:55:00) [1]
> Cosinus © (06.10.04 17:06) [7]
Если это сообщение и посылается, то приходит оно не форме, а полю редактирования Edit и ловить его надо в его оконной процедуре.
Cosinus (2004-10-06 17:06:00) [2]
> Amoeba © (06.10.04 16:45) [6]
Это конечно выход, в итоге то видимо так и сделаю, но... Интересно :))
> Семен Сорокин © (06.10.04 16:30) [5]
А это без разницы, что на Форме не срабатывает, что на Эдите.
Я, кстати, прошу прощения за неправильный код, который я написал, просто пока экспериментировал много мусора осталось, вот и перепутал. А на самом деле у меня не срабатывает следующий код
procedure WMInitMenuPopup(var Msg: TWMInitMenuPopup);message WM_INITMENUPOPUP;
procedure TForm1.WMInitMenuPopup(var Msg: TWMInitMenuPopup);
begin
inherited;
AppendMenu(Msg.MenuPopup, MF_STRING,SC_MyMenuItem, 'MyItem');
end;
Amoeba (2004-10-06 16:45:00) [3]А если не возиться с системным, а просто сесть и написать заменяющее его собственное? Естественно, придется повозиться с Copy, Paste и прочим.
Семен Сорокин (2004-10-06 16:30:00) [4]а если перекрыть WndProc именно Edit'а, а не формы?
Cosinus (2004-10-06 16:15:00) [5]Пробую так...
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure TForm1.WMInitMenuPopup(var Msg: TWMInitMenuPopup);
begin
inherited;
AppendMenu(Msg.MenuPopup, MF_STRING,SC_MyMenuItem, 'MyItem');
end;
Почему то вообще не отрабатывет процедуру, не попадает в нее...
Семен Сорокин (2004-10-06 15:06:00) [6]а если попытаться поймать WM_INITMENUPOPUP в оконной процедуре?
Cosinus (2004-10-06 14:43:00) [7]Хм... Не прокатывает почему то...
У меня вот такая конструкция
procedure TForm1.ChangePopupMenu;
begin
AppendMenu(GetMenu(MyEdit.Handle), MF_SEPARATOR, 0, '');
AppendMenu(GetMenu(MyEdit.Handle), MF_STRING, SC_MyMenuItem, 'MyItem');
end;
Подозреваю, что вот из-за этого If the window is a child window, the return value is undefined.Но не уверен.
Облазил почти все функции в Menu Functions. The following functions are used with menus., но так ничего и не нашел.
Cosinus (2004-10-06 14:18:00) [8]Сорри за глупый вопрос, GetSystemMenu висело перед глазами, а GetMenu между глаз попало :))