Форум: "WinAPI";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизПечать принт-задания в *.prn-файл Найти похожие ветки
← →
Сергей М. © (2007-02-28 12:09) [0]Подскажите, в какой WinAPI-структуре хранится флаг настройки принтера "Печатать в файл"
← →
Rouse_ © (2007-02-28 12:22) [1]эээ... StartDocPrinter + DOC_INFO_1 ?
← →
Сергей М. © (2007-02-28 12:29) [2]
> Rouse_ © (28.02.07 12:22) [1]
Что-то я там не вижу флажка.. Ткни меня носом ?
Или ты намекаешь на pOutputFile (nil или не nil) ?
← →
Rouse_ © (2007-02-28 12:35) [3]Да, на это :)
← →
Сергей М. © (2007-02-28 12:56) [4]
> Rouse_ © (28.02.07 12:35) [3]
Поясню, откуда растут ноги у вопроса.
QReport использует для контроля/изменения настроек печати стандартный TPrinterSetupDialog, который не предусматривает ни интерактивный ни программный доступ к этому флажку.
Если этот флаг установлен, то при старте юзером печати отчета QReport сначала показывает юзеру примитивнейшее (по функциональности и удобству) диалоговое окно с предложением ввести "ручками" полный путь и имя файла.
Задача: исключить это интерактивный шаг, автоматически программно подставив вместо него нужное имя файла, либо хотя бы предложить юзеру более удобный диалог выбора директории и имени файла, а-ля TSaveDialog
p.s. Проект допотопный, крупные изменения, например, замена QReport на что-либо более подходящее, исключены.
← →
Rouse_ © (2007-02-28 13:16) [5]Ааа, ну тогда не вижу сложностей, локально перехватывай
function PrintDlg(var PrintDlg: TPrintDlg): Bool; stdcall;
и выставляйPrintDlg.Flags := PrintDlg.Flags or PD_PRINTTOFILE;
← →
Rouse_ © (2007-02-28 13:17) [6]Собственно в справке:
PD_PRINTTOFILE
If this flag is set, the Print to File check box is selected. If this flag is set when PrintDlgEx returns, the offset indicated by the wOutputOffset member of the DEVNAMES structure contains the string "FILE:". When you call the StartDoc function to start the printing operation, specify this "FILE:" string in the lpszOutput member of the DOCINFO structure. Specifying this string causes the print subsystem to query the user for the name of the output file.
← →
Сергей М. © (2007-02-28 13:37) [7]
> Rouse_ © (28.02.07 13:16) [5]
Спасибо, с этим разобрался.
Смотрим далее (цитата из справки к флагу PD_PRINTTOFILE):
When you call the StartDoc function to start the printing operation, specify this "FILE:" string in the lpszOutput member of the DOCINFO structure. Specifying this string causes the print subsystem to query the user for the name of the output file.
Не думаю, что QReport что-то там "локально перехватывает" для того чтобы при этом вывести собственную форму диалога выбора имени файла.
Полагаю, существует документированный механизм (предопределенное оконное сообщение ?), позволяющий нужным образом отреагировать на необходимость указания подсистеме печати целевого имени файла...
← →
Rouse_ © (2007-02-28 14:15) [8]ИМХО этот механизм и есть наличие включенного флага PD_PRINTTOFILE с
lpszOutput := "FILE:";
Тестовый пример просто писать нет времени :)
← →
Сергей М. © (2007-02-28 14:17) [9]
> Rouse_ © (28.02.07 14:15) [8]
Если я правильно понял, то решением будет
lpszOutput := "Путь\КонкретныйФайл.ext";
Так ?
← →
Rouse_ © (2007-02-28 14:37) [10]По идее да.
Слушай, я сейчас специально семерку поднял, там по CTRL+ALT+C все достаточно нормально видно что происходит при вызове, включая описания функций. Я просто с QReport-om не работал никогда, поэтому не знаю, как воспроизвести ситуацию, чтобы он показал свое окно для ввода пути к файлу...
← →
Сергей М. © (2007-02-28 14:49) [11]
> Rouse_ © (28.02.07 14:37) [10]
> По идее да.
Буду попробовать.
> не знаю, как воспроизвести ситуацию, чтобы он показал свое
> окно для ввода пути к файлу
Да и не надо ее воспроизводить.
Из любопытства же можешь глянуть скриншот окна этого диалога (7.4 кб):
http://slil.ru/24006211
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.052 c