Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.09.11;
Скачать: [xml.tar.bz2];

Вниз

Как работать с очередью на печать   Найти похожие ветки 

 
АТ   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
14-33790
RUSLAN_
2003-08-21 20:40
2003.09.11
Программа для игрового клуба


14-33799
Nerv
2003-08-22 11:53
2003.09.11
Книги


1-33677
rom
2003-09-01 16:29
2003.09.11
Видимость subitems в ListView


6-33712
Skywalker
2003-07-08 16:11
2003.09.11
Как работает веб-сервер?


1-33587
Andrushk
2003-08-28 09:34
2003.09.11
работа с COM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский