معرفة خصائص الطابعة .
#1
السلام عليكم ورحمة الله وبركاته ،
كنت أبحث عن كيفية معرفة خصائص الطابعة ، هل تسمح بالطباعة على الجهتين  Recto/Verso  ، وجدت هذا المثال ، فوضعته هنا عسى أن يستفيد منه الإخوة.
1- لمعرفة جميع الطابعات المثبة على  جهازك ، مع معرفة إذا ما كانت تسمح بالطباعة على الجهتين .
أنشئ مشروع جديد ، ضع المكونات التالية :
 TListView
 Bouton
 Label


كود :
unit Unit1;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls, ComCtrls;   type   TForm1 = class(TForm)     Button1: TButton;     Label1: TLabel;     PrintDialog1: TPrintDialog;     ListView1: TListView;     procedure Button1Click(Sender: TObject);   private     { Déclarations privées }   public     { Déclarations publiques }     procedure InitListView;   end;   var   Form1: TForm1;   implementation uses Printers,WinSpool; {$R *.dfm} procedure TForm1.InitListView; var AListColumn:TListColumn; begin   ListView1.Clear;   ListView1.Columns.Clear;   ListView1.ViewStyle:=vsReport;     AListColumn:=ListView1.Columns.Add;   AListColumn.Caption:='Nom de l''imprimante';     AListColumn:=ListView1.Columns.Add;   AListColumn.Caption:='Nom du Driver';     AListColumn:=ListView1.Columns.Add;   AListColumn.Caption:='Recto Verso'; end;   procedure TForm1.Button1Click(Sender: TObject); var   i:integer;   AListItem:TListItem;   Device, Driver, Port: array[0..255] of Char;   hDevMode: THandle;   TypeDeDuplex:Integer;   s:string; begin   InitListView;   Printer.PrinterIndex:=-1;   Printer.GetPrinter(Device, Driver, Port, hDevmode);   Label1.Caption:='Imprimante par défaut : '+string(Device);   for i:=-1 to printer.Printers.Count-1 do   begin     Printer.PrinterIndex:=i;     Printer.GetPrinter(Device, Driver, Port, hDevmode);     TypeDeDuplex:=WinSpool.DeviceCapabilities(Device, Port, DC_DUPLEX, nil, nil);     AListItem:=ListView1.Items.Add;     AListItem.Caption:=Device;     s:=Driver;     if s='' then s:='<Non fourni>';     AListItem.SubItems.Add(s);     case TypeDeDuplex of       -1:s:='Erreur';        0:s:='Non';        1:s:='Oui';     end;     AListItem.SubItems.Add(s);   end; end;   end.


وهذا البرنامج للطباعة Recto Verso

كود :
unit Unit1;   interface   uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, StdCtrls;   type   TForm1 = class(TForm)     Button1: TButton;     PrintDialog1: TPrintDialog;     procedure Button1Click(Sender: TObject);   private     { Déclarations privées }   public     { Déclarations publiques }   end;   var   Form1: TForm1;   implementation uses WinSpool, Printers; {$R *.dfm} 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;   procedure ForceDuplexMode; var   Device, Driver, Port: array[0..80] of Char;   DevMode: THandle;   pDevmode: PDeviceMode; begin   Printer.GetPrinter(Device, Driver, Port, DevMode);   if Devmode <> 0 then begin     pDevMode := GlobalLock(Devmode);     if pDevmode <> nil then     try       with pDevmode^ do begin         dmDuplex := DMDUP_VERTICAL;         dmFields := dmFields or DM_DUPLEX;       end;     finally       GlobalUnlock(Devmode);     end;   end; { If } end;   procedure TForm1.Button1Click(Sender: TObject); begin   if PrintDialog1.Execute then   begin     ForceDuplexMode;       Printer.BeginDoc;     printer.canvas.TextOut(10,10,'Recto');       Printer.NewPage;       printer.canvas.TextOut(10,10,'Verso');       Printer.EndDoc;   end; end;   end.


بالتوفيق للجميع.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
[-] كل من 4 users say قال شكرا ل أبو معاذ على المشاركة المفيدة
  • bassem_43, Mr.DOS, h-farid, wadoud
الرد
#2
بارك الله فيك
كنت ابحث عنها recto verso
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم