Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Вывести все способы подачи бумаги для печати

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

Вывести все способы подачи бумаги для печати

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

uses
   WinSpool, Printers;

 procedure GetPaperBins(sl: TStrings);
 type
   TBinName      = array [0..23] of Char;
   TBinNameArray = array [1..High(Integer) div SizeOf(TBinName)] of TBinName;
   PBinnameArray = ^TBinNameArray;
   TBinArray     = array [1..High(Integer) div SizeOf(Word)] of Word;
   PBinArray     = ^TBinArray;
 var
   Device, Driver, Port: array [0..255] of Char;
   hDevMode: THandle;
   i, numBinNames, numBins, temp: Integer;
   pBinNames: PBinnameArray;
   pBins: PBinArray;
 begin
   Printer.PrinterIndex := -1;
   Printer.GetPrinter(Device, Driver, Port, hDevmode);
   numBinNames := WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, nil, nil);
   numBins     := WinSpool.DeviceCapabilities(Device, Port, DC_BINS, nil, nil);
   if numBins <> numBinNames then
   begin
     raise Exception.Create('DeviceCapabilities reports different number of bins and bin names!');
   end;
   if numBinNames > 0 then
   begin
     pBins := nil;
     GetMem(pBinNames, numBinNames * SizeOf(TBinname));
     GetMem(pBins, numBins * SizeOf(Word));
     try
       WinSpool.DeviceCapabilities(Device, Port, DC_BINNAMES, PChar(pBinNames), nil);
       WinSpool.DeviceCapabilities(Device, Port, DC_BINS, PChar(pBins), nil);
       sl.Clear;
       for i := 1 to numBinNames do
       begin
         temp := pBins^[i];
         sl.addObject(pBinNames^[i], TObject(temp));
       end;
     finally
       FreeMem(pBinNames);
       if pBins <> nil then
         FreeMem(pBins);
     end;
   end;
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   GetPaperBins(Listbox1.Items);
 end;

Программный код на Delphi, предназначенный для извлечения списка корзин (trays) по умолчанию принтера и отображения их в списке.

Следующий шаг:

  1. Процедура GetPaperBins отвечает за извлечение списка корзин. Она использует модуль WinSpool, который предоставляет функции для взаимодействия с принтерами.
  2. Процедура начинает с установки свойства PrinterIndex в -1, что означает "использовать по умолчанию принтер".
  3. Затем она вызывает GetPrinter, чтобы извлечь информацию о по умолчанию принтере, включая его имя устройства, драйвер и порт.
  4. Далее она использует DeviceCapabilities для извлечения двух частей информации: количества корзин (trays) и их имен. Константа DC_BINNAMES используется для этого цели.
  5. Если количество корзин не равно количеству имен корзин, исключение генерируется, указывая на несоответствие между ожидаемым и фактическим количеством корзин.
  6. Если количество имен корзин больше 0, процедура выделяет память для двух массивов: pBinNames (для хранения имен корзин) и pBins (для хранения соответствующих значений).
  7. Затем она вызывает DeviceCapabilities снова, чтобы извлечь фактический список корзин и их соответствующие значения.
  8. Процедура проходит по списку корзин, добавляя каждое имя к строковому списку (sl) вместе с его соответствующим значением.
  9. Наконец, она освобождает память, выделившуюся для массивов.

В обработчике события Button1Click, когда кнопка нажата, процедура GetPaperBins вызывается, и полученный список корзин добавляется в список (Listbox1).

В статье описаны способы подачи бумаги для печати с использованием компонента WinSpool в Delphi.


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 09:27:53/0.0080130100250244/1