-
Использую компонент TAcroPdf. Необходимо организовать печать нескольких pdf-файлов в цикле. Создаю форму, отображаю документ в ActiveX компоненте и вызываю метод Print. Прикол в том, что у этого метода нет результата. Т.е. не ясно, что нажал пользователь - Ок или Отмема. А как раз после печати мне необходимо закрыть форму с компонентом. Но я не знаю, как отследить событие закрытия формы печати. Это вообще возможно?
procedure PDFForm.Print;
begin
acroPDF.Print; ...
end;
-
> Tokisoda (04.07.16 15:34)
> необходимо закрыть форму с компонентом. Но я не знаю, как > отследить событие закрытия формы печати. Это вообще возможно?
Можно попытаться послать в конце procedure PDFForm.Print, скажем, PostMessage(Handle, WM_CLOSE, 0, 0). Ну, или хукнуть диалог печати, например, в духе https://groups.google.com/d/msg/fido7.ru.delphi/j0TvFfA66Jg/EMIipVG0dOUJ(библиотека в данном случае не нужна, т.к. приложение свое. Следить за WM_CLOSE или WM_DESTROY окна, хендл которого получен при WM_INITDIALOG). -- Regards, LVT.
-
> Leonid Troyanovsky © (04.07.16 16:57) [1]
> WM_CLOSE или WM_DESTROY
Ну, или WM_COMMAND, поlсмотреть можно WinSpy or WS32.exe
-- Regards, LVT.
-
> Leonid Troyanovsky © (04.07.16 16:57) [1]
Можно попытаться послать в конце procedure PDFForm.Print, скажем, PostMessage(Handle, WM_CLOSE, 0, 0).
У меня PDFForm.Print выполняется мгновенно, из документации: "This method returns immediately, even if the printing has not completed." Откуда вы предлагаете посылать сообщение? После вызова acroPDF.Print? Handle окна, вызываемого через acroPDF.Print неизвестен до выхода из procedure PDFForm.Print.
-
> Tokisoda (04.07.16 17:27) [3]
var hhk: HHook; hdlg: HWND;
function GetMsgProc(code: Longint; awparam: WParam; alparam: Lparam):LResult; stdcall; var msg: PCWPRETSTRUCT; begin Result := 0; msg := PCWPRETSTRUCT(alparam); case msg.message of WM_INITDIALOG: hdlg := msg.hwnd; WM_COMMAND: begin if msg.hwnd = hdlg then begin // вот здесь можно закрыть форму UnhookWindowsHookEx(hhk); Exit; end; end; end; if hhk <> 0 then Result := CallNextHookEx(hhk, code, awparam, alparam); end;
procedure TForm1.Button1Click(Sender: TObject); begin hhk := SetWindowsHookEx(WH_CALLWNDPROCRET, GetMsgProc, Hinstance, GetCurrentThreadId); MessageBox(Handle, nil, 'Dialog', 0); end;
-- Regards, LVT.
|