我在程序中打开PrintSetupDlg设置打印机后,为什么打印是没有按照我的设定值打印,还是使用的默认设置?(50分)

  • 主题发起人 主题发起人 drawpharos
  • 开始时间 开始时间
D

drawpharos

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中打开PrintSetupDlg设置打印机后,为什么打印是没有按照我的设定值打印,
还是使用的默认设置?

我使用的Printer.begin
Doc何Printer.EndDoc来实现打印的。
 
自己在程序中指定TPrinter的设定,
TPrinter.Orientation设置横向或竖向.
纸张大小也设置一下就行.
 
请问hbezwwl兄:
TPrinter.Orientation的值是那两个?
 
但是我要设置打印质量,墨水种类等等高级设置,该怎么办?
 
DELPHI文本和图形的打印
首 先 在FORM 当 中 加 入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG
和 两 个BUTTON 控 件, 两 个 BUTTON 的CAPTION 分 别 为
“ 打 印 设 置” 和“ 打 印”。 然 后 编 写BUTTON 的 事 件 驱 动
程 序( 代 码 在 下 面),这 个 简 单 的 例 子 中 只 要 单 击
“ 打 印” 按 钮 时 便 可 以 在 打 印机 上 输 出 文 件0S2.TXT,
打 印 事 件 的 清 单 如 下:
implementation
uses printers;
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin

printersetupdialog1.execute;
//选择输出的打印机以及其他打印控制选项
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
lines:integer;
prntext:system.text;
//****************将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件
begin

if printdialog1.execute then

assignprn(prntext);
//将PRNTEST分配给打印机
rewrite(prntext);
//调用REWRITE函数,为输出打开已分配的文件
printer.canvas.font:=memo1.font;
//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
for lines:=0 to memo1.lines.count-1do

writeln(prntext,memo1.lines[lines]);
//把MEMO的内容写到打印机对象
system.close(prntext);
//关闭打印文件
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

memo1.lines.loadfromfile('c:/dos/os2.txt');
//在FORM建立时读入C:/DOS/OS2.TXT文件
end;

end.

 
trHorizontal:横向
trVertical:竖向
 
用TDeviceMode结构设置打印质量,墨水种类等等高级设置:
procedure TForm1.Button3Click(Sender: TObject);
var
aDevice,aDriver,aPort:array[0..255] of char;
DeviceHandle:Thandle;
DevMode:PDeviceMode;// 指向TDeviceMode 结构的指针
begin

printer:=Tprinter.Create;
printer.GetPrinter(aDevice,aDriver,aPort,Devicehandle);
//首先获取Tprinter的TDeviceMode 结构的句柄
if deviceHandle=0 then
//若handle=0 ,则设备没有装入,设置printer index,再装入
begin

printer.printerIndex:=Printer.PrinterIndex;
printer.GetPrinter(aDevice,aDriver,aPort,Devicehandle);
end;


if deviceHandle=0 then
//若handle=0,则发生错误,产生异常
raise Exception.create('不能初始化TDeviceMode 结构')
else
// 否则用GlobalLock获取TDeviceMode 结构的指针
begin

DevMode:=GlobalLock(DeviceHandle);
with DevMode^do

begin

dmFields:=dmFields or //设置纸张大小
DM_PAPERSIZE or
DM_PAPERWIDTH or
DM_PAPERLENGTH;
dmPaperWidth:=你要设的纸张宽度;//dmpapersize:=Dmpaper_letter;dmpaper_A4,dmpaper_A5等
dmPaperLength:=你要设的纸张宽度;

dmFields:=dmFields or DM_ORIENTATION;
//设置打印方向
dmOrientation:=DMORIENT_PORTRAIT //纵向;DMORIENT_LANDSCAPE;
横向

dmFields :=dmFields or DMBIN_MANUAL;
//设置纸张来源
dmDefaultSource:=DMBIN_Auto;
//dmDefaultSource:=DMBIN_MANUAL;手动

dmFields :=dmFields or Dm_printQuality;
dmprintQuality:=Dmres_high;//还有dmres_medium(中),dmres_low(低),dmres_draft(草图)

dmFields :=dmFields or dm_color;
dmcolor:=dmcolor_color;//设置为彩色,dmcolor_monochrome为单色;

dmFields :=dmFields or Dm_scale;//设置打印比例
dmscale:=50;
end
end;
//else


if not DeviceHandle=0 then

GlobalUnlock(DeviceHandle);
//此处加你的代码;
end;

end;

 
正巧,前几天,我也碰到过这样的问题,在这里也贴了,好多朋友回了,
但是总觉的不可行,
后来,我直接到打印机的文件夹下,对那个默认打印机按右键,在里面设置
虽然表面上和在自己的程序中设置的界面是一样的,但是,效果不一要,
在这里设置,可以控制,而在其他地方设置,都不行
 
接受答案了.
 
后退
顶部