Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.49 MB
Время: 0.02 c
14-33814
Rouse_
2003-08-22 04:43
2003.09.11
Глюки форума


4-33842
Ребенок Кирилл
2003-07-12 18:49
2003.09.11
Как изменить размер окна другого приложения


3-33468
pavel_guzhanov
2003-08-20 13:58
2003.09.11
Картинка из поля BLOB в DBImage


1-33652
Макс
2003-08-30 16:11
2003.09.11
активное окно


3-33510
uhhax
2003-08-20 03:55
2003.09.11
нестандартный просмотр отчета