Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

По следам К.Пачеко. Двусторонняя печать [D7, WinXP]


так себе ©   (2006-04-08 16:04:00) 

В книге К.Пачеко приводится пример получения информации о принтере. В частности, как узнать поддерживает ли принтер двустороннюю печать. Использую из примера:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   ComboBox1: TComboBox;
   Label2: TLabel;
   Label1: TLabel;
   procedure FormCreate(Sender: TObject);
   procedure ComboBox1Change(Sender: TObject);
  private
   { Private declarations }
   Device,Driver,Port: array[0..255] of char;
 public
   { Public declarations }
   procedure GetDuplexSupport;
 end;

var
 Form1: TForm1;

implementation
uses Printers, WinSpool;

const
    NoYesArray: array[Boolean] of string = ('Нет','Да');
var
 Rslt: Integer;

{$R *.dfm}

procedure TForm1.GetDuplexSupport;
begin
Rslt := DeviceCapabilitiesA(Device, Port, DC_DUPLEX,nil,nil);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//получаем список доступных принтеров в ComboBox
ComboBox1.Items.Assign(Printer.Printers);
//Принтер по умолчанию
ComboBox1.ItemIndex := Printer.PrinterIndex;
ComboBox1Change(nil);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
//Выбор принтера
begin
 try
 Printer.PrinterIndex := ComboBox1.ItemIndex;
 GetDuplexSupport;
 Label1.Caption := ('Принтер - ' + ComboBox1.Items[ComboBox1.ItemIndex] +#13#10 +
                    'Двусторонняя печать - '+ NoYesArray[Rslt=1]);
 except
 end;
end;

end.

В системе установлен принтер HP LaserJet 2200 Series, поддерживающий двустороннюю печать, однако с помощью вышеприведенного примера это не определяется. В чем причина?


так себе   (2006-04-08 16:54:00) [1]


> MBo ©   (08.04.06 16:10) [1]

Спасибо, всё заработало!


MBo   (2006-04-08 16:10:00) [2]

Device, Port где заполняются?

Function PrinterSupportsDuplex: Boolean;
Var
 Device, Driver, Port: Array [0..255] of Char;
 hDevMode: THandle;
Begin
 Printer.GetPrinter(Device, Driver, Port, hDevmode);
 Result :=
   WinSpool.DeviceCapabilities( Device, Port, DC_DUPLEX, Nil, Nil ) <> 0;
End;


Наверх

Титульная страница Поиск, карта сайта Написать письмо