06-04-2016, 08:48 PM
السلام عليكم ورحمة الله وبركاته ،
كنت أبحث عن كيفية معرفة خصائص الطابعة ، هل تسمح بالطباعة على الجهتين Recto/Verso ، وجدت هذا المثال ، فوضعته هنا عسى أن يستفيد منه الإخوة.
1- لمعرفة جميع الطابعات المثبة على جهازك ، مع معرفة إذا ما كانت تسمح بالطباعة على الجهتين .
أنشئ مشروع جديد ، ضع المكونات التالية :
TListView
Bouton
Label
وهذا البرنامج للطباعة Recto Verso
بالتوفيق للجميع.
كنت أبحث عن كيفية معرفة خصائص الطابعة ، هل تسمح بالطباعة على الجهتين 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.
بالتوفيق للجميع.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.