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

Вниз

Перехватить нажатие пункта меню   Найти похожие ветки 

 
L.N.N. ©   (2003-08-07 10:42) [0]

Добрый день.
Есть программа для бухгалтерии. При отправке на печать документа, она создаёт отчет в Ворде. Отчет людей не устраивает, поэтому я хочу, чтобы когда пользователь нажимает на определённый пункт в менюшке, действие передалось моей программе. А вот в каком направлении работать я не знаю. Хэндл программы, меню, и подменю с пунктом печати, я нахожу. Но как узнать, что пункт был нажат?


 
Игорь Шевченко ©   (2003-08-07 11:31) [1]

Очевидно, обрабатывать сообщение WM_COMMAND, которое посылается главному (или неглавному :)) окну системы при клике на пункте меню.


 
L.N.N. ©   (2003-08-07 12:39) [2]

GetMessage? Или что-то другое. И каким образом ловить это сообщение? По таймеру? Можно немного поподробнее?
Заранее спасибо.


 
Игорь Шевченко ©   (2003-08-07 12:44) [3]

Если в чужом приложении - то хуком WH_CALLWNDPROC скорее всего


 
L.N.N. ©   (2003-08-07 15:20) [4]

Я пытаюсь делать следующим образом:

Так устанавливаю хук.

theHook := SetWindowsHookEx(WH_CALLWNDPROC, @TfmMain.CBTHookProc, hInstance, 0);
if theHook = 0 then messageBox(0,"Error!","Error!",mb_ok);

А так, насколько я понимаю, надо отфильтровывать только сообщения из необходимой программы. Всё правильно?

function TfmMain.CBTHookProc(Code: Integer; wParam: Longint;lParam:
Longint):Longint;
begin
Result := 0;
// А как реализовать проверку здесь?
Result := 1;
end;
Если нетрудно, то можете указать материалы по хукам в интернете.



 
Игорь Шевченко ©   (2003-08-07 15:25) [5]


> Если нетрудно, то можете указать материалы по хукам в интернете.

Раздел "Статьи" на этом сайте


 
L.N.N. ©   (2003-08-07 16:47) [6]

Прочитал. Только всё равно не понятно, как я фильтре определю нужное мне приложение, допустим зная его хэндл.


 
Игорь Шевченко ©   (2003-08-07 17:40) [7]

Все вроде проще - в hook передается структура, одним из полей которой является hwnd. Сравниваешь его с окном твоей программы, поле Message сравниваешь с WM_COMMAND, поле wParam - с тем самым идентификатором меню, который вызывает печать отчета. Но, IMHO, все это неверный в корне путь.
Программа для печати отчета ведь какие-то данные использует, правильно ? А их ты откуда брать собираешься ?


 
L.N.N. ©   (2003-08-08 10:31) [8]

Объясняю. Есть программа для бухгалтерии, которая хранит счета. Она при печати создаёт Вордовский документ, который и печатает. Но маркетингу отчет не нравится (нельзя передать по факсу), и изменить его нельзя, так как прогамма его создает с нуля. Поэтому я написал программу, которая создает удобный для всех отчет в Экселе, используя базу бухгалтерской программы. Но начальник хочет, чтобы я автоматизировал свою программу, чтобы народ просто нажимал кнопку печати в той программе, а печатала моя.
За пояснение спасибо. Будем разбираться.



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

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

Наверх




Память: 0.48 MB
Время: 0.018 c
3-40247
Rider
2003-09-23 14:48
2003.10.13
фильтрация в базе по дататайму


1-40356
Eagle Owl
2003-09-30 23:40
2003.10.13
Delphi 7


8-40522
Charly
2003-06-13 23:55
2003.10.13
TBitmap.Scanline


7-40708
XenonXX
2003-07-28 04:25
2003.10.13
SetSystemTime


4-40747
R4D][
2003-08-03 11:49
2003.10.13
SetWindowsHookEx