Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Использование PASSTHROUGH для отправки данных прямо на принтер

Delphi , ОС и Железо , Принтеры и Печать

Использование PASSTHROUGH для отправки данных прямо на принтер

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  By using the Windows API Escape() function, 
  your application can pass data directly to the printer. 
  If the printer driver supports the PASSTHROUGH printer escape, 
  you can use the Escape() function and the PASSTHROUGH printer escape 
  to send native printer language codes to the printer driver. 
  If the printer driver does not support the PASSTHROUGH printer escape, 
  you must use the DeviceCapabilities() and ExtDevMode() functions instead. 


  Mit der Windows API Funktion Escape() kann man Daten direkt zum Drucker schicken. 
  Wenn der Drucker Treiber dies nicht unterstutzt, mussen die DeviceCapabilities() 
  und ExtDevMode() Funktionen verwendet werden. 
}

 //  DOS like printing using Passthrough command 
// you should use "printer.begindoc" and "printer.enddoc" 

type
   TPrnBuffRec = record
   bufflength: Word;
   Buff_1: array[0..255] of Char;
 end;

 function DirectToPrinter(S: string; NextLine: Boolean): Boolean;
 var
    Buff: TPrnBuffRec;
   TestInt: Integer;
 begin
   TestInt := PassThrough;
   if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT), @testint, nil) > 0 then
   begin
     if NextLine then  S := S + #13 + #10;
     StrPCopy(Buff.Buff_1, S);
     Buff.bufflength := StrLen(Buff.Buff_1);
     Escape(Printer.Canvas.Handle, Passthrough, 0, @buff, nil);
     Result := True;
   end
   else
     Result := False;
 end;

 // this code works if the printer supports escape commands 
// you can get special esc codes from printer's manual 

//  example: 
printer.BeginDoc;
 try
   directoprinter('This text ');
 finally
   printer.EndDoc;
 end;

Приведенный код - это программный проект на языке Delphi, который использует функцию Windows API Escape() для отправки данных напрямую в принтер, используя команду отключения PASSTHROUGH. Это позволяет приложению передавать native коды языка принтера в драйвер принтера.

Вот разбивка кода:

  1. Определен тип записи TPrnBuffRec, который состоит из двух полей: bufflength (значение типа Word) и Buff_1 (массив из 256 символов).
  2. Функция DirectToPrinter() принимает два параметра: S (строка для печати) и NextLine (логическое значение, указывающее, должен ли быть добавлен новый строковый символ после текста). Она возвращает логическое значение, указывающее, была ли печать успешной.
  3. В функции DirectToPrinter():
    • Используется константа PassThrough как аргумент в функции Escape() для проверки, поддерживает ли принтер команду отключения PASSTHROUGH. Если это так, функция продолжается; иначе, она возвращает False.
    • Если NextLine равно True, символ новой строки (#13 + #10) добавляется к концу строки S.
    • Используется функция StrPCopy() для копирования содержимого строки S в поле Buff_1 записи TPrnBuffRec.
    • Поле bufflength устанавливается равным длине буфера с помощью функции StrLen().
    • Функция Escape() вызывается снова с командой отключения PASSTHROUGH, передавая указатель на запись TPrnBuffRec. Это отправляет данные напрямую в принтер.
  4. В примере кода в конце:
    • Метод BeginDoc() объекта Printer вызывается для начала нового документа.
    • Используется блок try-finally для обеспечения вызова метода EndDoc() даже если возникает ошибка при печати.
    • Функция DirectToPrinter() вызывается с аргументом строки, и результат хранится в переменной Result.

Замечание:

  • Этот код предполагает, что драйвер принтера поддерживает команду отключения PASSTHROUGH. Если это не так, вам нужно использовать альтернативные методы, такие как DeviceCapabilities() и ExtDevMode(), как упоминалось в оригинальном тексте.
  • Приведенный пример кода - это базовая демонстрация использования этой функции. Вам может потребоваться модификация или добавление дополнительной логики для соответствия вашим конкретным требованиям печати.

В целом, этот код предоставляет способ для приложений Delphi отправлять данные напрямую в принтеры с помощью команды отключения PASSTHROUGH, позволяя более тонкую настройку процесса печати.

Использование функции Windows API Escape() позволяет передавать данные напрямую на принтер, если принтерный драйвер поддерживает escape-команду PASSTHROUGH.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Принтеры и Печать ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-06-02 10:20:12
2024-06-16 03:44:25/0.01456880569458/2