![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как обработать сообщение
Юрий_К © (2007-08-14 23:31:00)Добавkztvм к примеру в контекстное меню в подменю "Open With" функцией InsertMenuItem свой пункт с WMID = 1111 и со строкой названия некоторой программы (например Notepad). В листбоксе с названиями файлов по правой кнопке вызывается меню и по нажатию на этот пункт подменю та программа должна начать работу с этим файлом. Как эту обработку сообщения WM_COMMAND с WMID = 1111 добавить в основную программу на Delphi, где этот листбокс и находится?
Юрий_К (2007-08-16 00:15:00) [21]Нет захода в функцию TFormMain.WMCommand вообще.
Юрий_К (2007-08-16 00:13:00) [22]Не помогло, не знаю, что не так.
Коды такие:
В ДЛЛ на СИ, вызывается программой на Дельфи.
if (nOpenWith >= 0)
{
char szText[] = "Notepad";
MENUITEMINFO mii = {
sizeof(mii),
MIIM_TYPE,
MFT_STRING,
0,
wmID,
0,
0,
0,
0,
szText,
sizeof(szText)};
InsertMenuItem(hSubMenu, nCnt, true, &mii);
}
В программе на Дельфи.
procedure TFormMain.WMCommand(var Message: TWMCommand);
var sPath: string;
begin
if (Message.ItemID = 1111) then
begin
sPath := lstFiles.Items[lstFiles.ItemIndex];
ShellExecute(0, 'open', 'notepad.exe', PCHAR(sPath), nil, SW_SHOWNORMAL);
end
else
inherited;
end;
DrPass (2007-08-15 13:44:00) [23]Delphi позволяет добавлять произвольные обработчики сообщений Windows, см. директиву message
Юрий_К (2007-08-15 13:41:00) [24]"б) добавить к ее форме обработчик WM_COMMAND и перекомпилировать"
Добавить как? Просто этого делать не приходилось. Обработка сообщений происходить в модуле Forms, не туда же добавлять.
DrPass (2007-08-14 23:47:00) [25]Ну... если исходников нет, то
а) Внедрить туда свою DLL, с ее помощью подменить оконную функцию той формы, в новой оконной функции обрабатывать WM_COMMAND либо в остальных случаях передавать управление старой оконной функции
Если исходники есть, то
б) добавить к ее форме обработчик WM_COMMAND и перекомпилировать