Текущий архив: 2003.09.11;
Скачать: CL | DM;
Вниз
Как работать с очередью на печать Найти похожие ветки
← →
АТ (2003-06-15 20:43) [0]Надо как-то контрольровать поступление документа в очередь на печать. Подскажите пожалуйста какие функции я могу для этого использовать. Может в природе существуют какие-то статьи по этому вопросу.
Возможно эта проблема уже обсуждалась ранее на этом форуме, только я что-то не нашел такую тему...
← →
Song (2003-06-15 21:40) [1]FindFirst/NextPrintChangeNotification()
← →
АТ (2003-06-22 19:19) [2]Что-то у меня даже Handle принтера определить не удается...
Вот код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
PrintHandle:THANDLE;
PD:PPRINTERDEFAULTS;
begin
if not OpenPrinter(PChar("HP LaserJet 4050 PS"), PrintHandle, PD)
( "Не-а!") Что-то у меня даже Handle принтера определить не удается...
Вот код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
PrintHandle:THANDLE;
PD:PPRINTERDEFAULTS;
begin
if not OpenPrinter(PChar("HP LaserJet 4050 PS"), PrintHandle, PD)
then ShowMessage("Не-а!");
end;
Я честно говоря не совсем понял что должно стоять первым параметром в ф-ии OpenPrinter. Поставил первое что пришло в голову. Может там сетевой путь прописать...
← →
АТ (2003-06-23 21:23) [3]Дескриптор получил, вот код:
procedure TForm1.Button1Click(Sender: TObject);
var PrintHandle:THANDLE;
PD:PPRINTERDEFAULTS;
s:String;
begin
Form1.Label1.Caption:=Form1.ComboBox1.Text;
if OpenPrinter(PCHAR(Form1.ComboBox1.Text),PrintHandle,nil)
then Form1.Label2.Caption:=IntToStr(PrintHandle)
else Form1.Label2.Caption:="";
ClosePrinter(PrintHandle);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.ComboBox1.Items.Assign(Printer.Printers);
Form1.ComboBox1.Text:=Form1.ComboBox1.Items.Strings[0];
end;
только сетевых принтеров у нас много, и какой бы из них я не выбрал в ComboBox1 - для всех получаю один и тот же дескриптор. Разве так должно быть?
← →
Gigabyte (2003-06-23 21:42) [4]Можешь таке попробовать поработать с WM_SPOOLERSTATUS. Сам пробоввал. Отправка на печать и удаление из очереди работает хорошо, но свойства(т.е. количество отпечатанных страниц, сумарное количество страниц...) не очень.
← →
АТ (2003-06-24 04:51) [5]Откопал в самой Delphi неплохую функцию - Printer называется.
В ней тоже количество отпечатанных страниц и т.д. Только мне не это надо.
Вообще ситуация такая, может кто сталкивался:
итак, в очередь на печать поступают документы, один за другим. Они печатаются из одного приложения( не моего) и сл-но в очереди прописываются одним именем. Одновременно с поступлением этих документов на печать, происходит и, собственно, печать, т.е. исчезновение ентих документов из очереди. Есть подозрение, что приложение может пропустить какой-нибудь документ, т.е. я нажал в нем на кнопку печатать, а документ на печать не поступил. Вот этот-то момент и надо засечь и известить меня об этом.
Вижу тут 2 возможных решения: 1-вести документ с момента нажатия в приложении кнопки "Печать" до момента постановки его в очередь на печать. Т.е. предполагаю что существует какой-то пераметр, по которому документ, который только что был у меня на экране можно идентифицировать в очереди на печать;
2-предполагаю наличие функций, которые четко сообщают мне состояние очереди на печать - если все события поступления и исчезновения документов в очереди я смогу зафиксировать, то значит я смогу контролировать и последний документ, который только что был послан на печать.
Насколько я понял именно второе и реализует ф-ия FindFirstPrinterChangeNotification. Но только разобраться в ней у меня не получилось.
Помогите!
← →
АТ (2003-06-26 19:43) [6]Хе-хе, а мужики-то не знают...
← →
АТ (2003-06-27 21:56) [7]Кстати нарыл оригинальный способ контроля печати документов, которые прописываются в очереди на печать одинаковым именем. Наверняка кому-то интерестно... Короче печатаем не на принтер а в файл. После нажатия кнопки "Печать" в приложении, появляется окошко, в котором запрашивается имя создаваемого файла. Именем может быть например номер лицевого счета. После завершения печати, всех лицевых счетов мы получим файлы с уникальными именами. Эти имена можно сравнить с изначальным списком счетов к печати и если все сходится послать файлы на принтер средствами Windows.
← →
Cobalt (2003-06-27 22:05) [8]Кстати, а как потом распечатывать файл, который получился при "печати в файл"?
← →
АТ (2003-06-27 22:42) [9]По всей видимости надо команду "Copy" использовать. Только как полностью команду записать я не знаю. Может кто знает, подскажите плз.
← →
АТ (2003-06-28 00:11) [10]Все, разобрался, синтаксис следующий:
copy /b имя_файла \\сетевой_путь_к_принтеру\имя_принтера.
Страницы: 1 вся ветка
Текущий архив: 2003.09.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.009 c