📄 u_prn_set.pas
字号:
unit U_prn_set;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons,Printers, ComCtrls;
type
TF_prn_set = class(TForm)
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
BitBtn1: TBitBtn;
Memo1: TMemo;
BitBtn2: TBitBtn;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
ComboBox2: TComboBox;
Label1: TLabel;
Label2: TLabel;
GroupBox4: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
UpDown1: TUpDown;
UpDown2: TUpDown;
Label3: TLabel;
Label4: TLabel;
BitBtn3: TBitBtn;
Label5: TLabel;
Label6: TLabel;
procedure BitBtn1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
private
procedure repprn;
{ Private declarations }
public
{ Public declarations }
end;
var
F_prn_set: TF_prn_set;
show_right:boolean=false;
implementation
const techno:array[0..6] of string=('Plotter','Grid-screen',
'Grid-Printer','?',
'Sign-Printer','Metafile',
'?');
{$R *.dfm}
procedure setpapersize(x,y:integer);
var
device:array[0..255] of char;
driver:array[0..255] of char;
port:array[0..255] of char;
hdmode:Thandle;
pdmode:PDEVMODE;
begin
//printer.PrinterIndex:=printer.PrinterIndex;
printer.GetPrinter(device,driver,port,hDmode);
if hDmode<> 0 then
begin
pdmode:=globallock(hdmode);
if pdmode<> nil then
begin
if (x=0) or (y=0) then
begin
pdmode^.dmFields:=pdmode^.dmFields or dm_papersize;
pdmode^.dmPaperSize:=dmpaper_fanfold_us;
end
else
begin
pdmode^.dmFields:=pdmode^.dmFields or
dm_papersize or
dm_paperwidth or
dm_paperlength;
pdmode^.dmPaperSize:=dmpaper_user;
if pdmode^.dmOrientation = dmorient_landscape then
begin
pdmode^.dmPaperWidth:=x;
pdmode^.dmPaperLength:=y;
end
else
begin
pdmode^.dmPaperWidth:=y;
pdmode^.dmPaperLength:=x;
end;
end;
globalunlock(hdmode);
end;
end;
printer.PrinterIndex:=printer.PrinterIndex;
end;
procedure TF_prn_set.repprn;
var dc:Thandle;
n,i:integer;
begin
memo1.Clear;
dc:=Printer.Handle;
memo1.Lines.Add('打印机名称:'+Printer.Printers[printer.printerindex]);
memo1.Lines.Add('驱动程序版本:'+inttostr(getdevicecaps(dc,
driverversion)));
memo1.Lines.Add('技术支持:'+techno[getdevicecaps(dc,technology)]);
memo1.Lines.Add('纸张宽度(mm):'+inttostr(getdevicecaps(dc,horzsize)));
memo1.Lines.Add('纸张高度(mm):'+inttostr(getdevicecaps(dc,vertsize)));
memo1.Lines.Add('宽(象素):'+inttostr(getdevicecaps(dc,horzres)));
memo1.Lines.Add('高(象素):'+inttostr(getdevicecaps(dc,vertres)));
memo1.Lines.Add('页面左边距(象素):'+inttostr(getdevicecaps(dc,PHYSICALOFFSETX)));
memo1.Lines.Add('页面上边距(象素):'+inttostr(getdevicecaps(dc,PHYSICALOFFSETY)));
memo1.Lines.Add('分辨率:'+inttostr(getdevicecaps(dc,logpixelsx))+'*'+
inttostr(getdevicecaps(dc,logpixelsy)));
memo1.Lines.Add('色彩:'+inttostr(getdevicecaps(dc,numcolors)));
memo1.Lines.Add('支持的字体:'+inttostr(printer.Fonts.Count)+'种');
end;
procedure TF_prn_set.BitBtn1Click(Sender: TObject);
var
device:array[0..255] of char;
driver:array[0..255] of char;
port:array[0..255] of char;
s:array[0..255] of char;
hdevicemode:Thandle;
begin
printer.PrinterIndex:=combobox1.ItemIndex;
printer.GetPrinter(device,driver,port,hdevicemode);
strcat(s,device);
strcat(s,',');
strcat(s,driver);
strcat(s,',');
strcat(s,port);
writeprofilestring('windows','device',s);
strcopy(s,'windows');
sendmessage(HWND_BROADCAST,WM_WININICHANGE,0,longint(@s));
repprn;
messagedlg('打印机配置成功',mtinformation,[mbok],0);
end;
procedure TF_prn_set.FormActivate(Sender: TObject);
var
dc:Thandle;
begin
dc:=printer.Handle;
label6.Caption:=inttostr(getdevicecaps(dc,vertsize));
label5.Caption:=inttostr(getdevicecaps(dc,horzsize));
edit1.Text:=label5.Caption;
edit2.Text:=label6.Caption;
combobox2.Text:=combobox2.SelText;
combobox1.Items:=printer.Printers;
combobox1.ItemIndex:=printer.PrinterIndex;
groupbox4.Visible:=false;
end;
procedure TF_prn_set.BitBtn2Click(Sender: TObject);
begin
show_right:=not show_right;
if show_right then
f_prn_set.Width:=f_prn_set.Width+150
else
f_prn_set.Width:=f_prn_set.Width-150;
end;
procedure TF_prn_set.BitBtn3Click(Sender: TObject);
var
dc:Thandle;
begin
setpapersize(strtoint(edit1.Text),strtoint(edit2.Text));
dc:=printer.Handle;
label6.Caption:=inttostr(getdevicecaps(dc,vertsize));
label5.Caption:=inttostr(getdevicecaps(dc,horzsize));
messagedlg('正确更改了纸张大小',mtinformation,[mbok],0);
end;
procedure TF_prn_set.ComboBox2Change(Sender: TObject);
begin
if trim(combobox2.Text)='A4' then
begin
edit1.Text:='2100';
edit2.Text:='2970';
end
else if trim(combobox2.Text)='A5' then
begin
edit1.Text:='1480';
edit2.Text:='2100';
end;
if trim(combobox2.Text)='定制' then
begin
groupbox4.Visible:=true;
end
else
groupbox4.Visible:=false;
bitbtn3.Click;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -