![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как работать с очередью на печать
АТ © (2003-06-15 20:43:00)
Надо как-то контрольровать поступление документа в очередь на печать. Подскажите пожалуйста какие функции я могу для этого использовать. Может в природе существуют какие-то статьи по этому вопросу.
Возможно эта проблема уже обсуждалась ранее на этом форуме, только я что-то не нашел такую тему...
АТ (2003-06-28 00:11:00) [1]
Все, разобрался, синтаксис следующий:
copy /b имя_файла \\сетевой_путь_к_принтеру\имя_принтера.
АТ (2003-06-27 22:42:00) [2]
По всей видимости надо команду "Copy" использовать. Только как полностью команду записать я не знаю. Может кто знает, подскажите плз.
Cobalt (2003-06-27 22:05:00) [3]
Кстати, а как потом распечатывать файл, который получился при "печати в файл"?
АТ (2003-06-27 21:56:00) [4]
Кстати нарыл оригинальный способ контроля печати документов, которые прописываются в очереди на печать одинаковым именем. Наверняка кому-то интерестно... Короче печатаем не на принтер а в файл. После нажатия кнопки "Печать" в приложении, появляется окошко, в котором запрашивается имя создаваемого файла. Именем может быть например номер лицевого счета. После завершения печати, всех лицевых счетов мы получим файлы с уникальными именами. Эти имена можно сравнить с изначальным списком счетов к печати и если все сходится послать файлы на принтер средствами Windows.
АТ (2003-06-26 19:43:00) [5]
Хе-хе, а мужики-то не знают...
АТ (2003-06-24 04:51:00) [6]
Откопал в самой Delphi неплохую функцию - Printer называется.
В ней тоже количество отпечатанных страниц и т.д. Только мне не это надо.
Вообще ситуация такая, может кто сталкивался:
итак, в очередь на печать поступают документы, один за другим. Они печатаются из одного приложения( не моего) и сл-но в очереди прописываются одним именем. Одновременно с поступлением этих документов на печать, происходит и, собственно, печать, т.е. исчезновение ентих документов из очереди. Есть подозрение, что приложение может пропустить какой-нибудь документ, т.е. я нажал в нем на кнопку печатать, а документ на печать не поступил. Вот этот-то момент и надо засечь и известить меня об этом.
Вижу тут 2 возможных решения: 1-вести документ с момента нажатия в приложении кнопки "Печать" до момента постановки его в очередь на печать. Т.е. предполагаю что существует какой-то пераметр, по которому документ, который только что был у меня на экране можно идентифицировать в очереди на печать;
2-предполагаю наличие функций, которые четко сообщают мне состояние очереди на печать - если все события поступления и исчезновения документов в очереди я смогу зафиксировать, то значит я смогу контролировать и последний документ, который только что был послан на печать.
Насколько я понял именно второе и реализует ф-ия FindFirstPrinterChangeNotification. Но только разобраться в ней у меня не получилось.
Помогите!
Gigabyte (2003-06-23 21:42:00) [7]
Можешь таке попробовать поработать с WM_SPOOLERSTATUS. Сам пробоввал. Отправка на печать и удаление из очереди работает хорошо, но свойства(т.е. количество отпечатанных страниц, сумарное количество страниц...) не очень.
АТ (2003-06-23 21:23:00) [8]
Дескриптор получил, вот код:
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 - для всех получаю один и тот же дескриптор. Разве так должно быть?
АТ (2003-06-22 19:19:00) [9]Что-то у меня даже 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. Поставил первое что пришло в голову. Может там сетевой путь прописать...
Song (2003-06-15 21:40:00) [10]
FindFirst/NextPrintChangeNotification()