Стан принтера. Як визначити?
Є необхідність обробляти поточний стан принтера. Друк проводитися на принтер штрих-кодів.
В буфер друку кидається не всі завдання, а по листу
Юзер повинен могти скасувати друк в будь-який момент часу.
Як визначити, що лист роздрукувався (принтер нічого не друкує). Використовую глобальний об'єкт Printer.
> Юзер повинен могти скасувати друк в будь-який момент часу.
прости, що з оффтопили, але чому б не дозволити йому це робити штатними засобами - скасовувати через чергу друку?
Відповіді не знаю, на жаль.
не піде - це прапорець самого printer. До принтера відношення не має.
Е. Я або чогось не розумію, або ось:
Use Printing to determine if a job is printing.
Printing is True when the application has called the BeginDoc method but the EndDoc method (or the Abort method) hasn "t yet been called.
Зупинити друк треба з програми?
> Зупинити друк треба з програми?
ну ти типу реалізацію printing подивися - це просто дельфовий прапорець.
>> це просто дельфовий прапорець.
Ну звичайно це просто індикатор процесу. але:
>> Юзер повинен могти скасувати друк в будь-який момент часу. = Abort
>> Як визначити, що лист роздрукувався (принтер нічого не друкує). # XA0; = Printing.
Тобто якщо зараз йде друк і треба скасувати цю саму печатку, то
if Printer.Printing then Printer.Abort
Правильно я зрозумів?
Начебто так, але ось що дивно. Надсилаємо запит на друк (BeginDoc), далі йде процес друку (Printing = true), і по завершенні завдання (неважливо як вона завершилася, хоч взагалі картрижд лопнув, аби система повідомила про це) отримуємо (EndDoc і Printing = false). Якщо папір зажував (наприклад), то Printing = true до тих пір, поки завдання не знята вручну, або методом, дійсно не мають відношення до TPrinter. Погодьтеся, визначити, що папір зажував, можна тільки візуально (тобто не програмно).
щось я не зрозумію про що ти:
procedure TPrinter.EndDoc;
begin
# XA0; CheckPrinting (True);
# XA0; EndPage (DC);
# XA0; if not Aborted then Windows.EndDoc (DC);
# XA0; FPrinting: = False;
# XA0; FAborted: = False;
# XA0; FPageNumber: = 0;
end;
я вже додаток закрив, тобто enddoc давно виконався, тобто printing = false, а принтер все друкує.
Надала роз'яснення. Коли у принтера закінчується папір він друкує повер останньої сторінки залишилися сторінки (такий принтер вже).
На рахунок властивості Printing, наступне - кидається одна сторінка, далі Printer.BeginDoc, після - Printer.EndDoc, в цьому проміжку Printing = True, реально друк йде після Printer.EndDoc. Далі мені треба якимось прапорцем визначити момент роздруківки сторінки (першої). Як.
Надала роз'яснення. Коли у принтера закінчується папір він друкує повер останньої сторінки залишилися сторінки (такий принтер вже).
На рахунок властивості Printing, наступне - кидається одна сторінка, далі Printer.BeginDoc, після - Printer.EndDoc, в цьому проміжку Printing = True, поза FALSE! Реально друк йде після Printer.EndDoc. Далі мені треба якимось прапорцем визначити момент роздруківки сторінки (першої). Як.