有关打印机默认值设定???(50分)

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

delphi_xiaoqian

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大佬,请教一下,现在我同时装了两台打印机(富士 CX 400 &
Kodark 4720),现在我怎样用程序来改变打印机的默认值???
 
Tprinter.printers可列出所有已安装的Printer.
Tprinter.PrinterIndex为-1时,即为默认Printer.
printer.printers.count可以得到打印机数
printer.printers可以得到打印机列表
printer.printerINDEX可以设当前打印机
printer.printerINDEX:=-1可以恢复默认打印机
 
但是我怎么知道富士或Kodar的打印机的下标是哪个呀??假设我现在要设富士cx 400为当前打印机,怎么实现???有劳gzbxmcx兄了................高抬贵手给点代码吧
小弟再次感谢了!!!
 
gzbxmcx兄::::
procedure Tfrm_Main.Button7Click(Sender: TObject);
var
printers:TPrinter;
printercount:integer;
str:TStrings;
begin
printers:=TPrinter.Create;
str:=TStrings.Create;
printercount:=printers.Printers.Count;
//count=2 没有错,第一个是kodar,第二个是富士cx 400
printers.PrinterIndex:=1;
//为什么执行了这一句后当前的默认打印机还是kodar?????
end;

 
printer.printerINDEX := 2 设置当前打印机为
procedure Tfrm_Main.Button7Click(Sender: TObject);
var
printers:TPrinter;
printercount:integer;
str:TStrings;
begin
printers:=TPrinter.Create;
str:=TStrings.Create;
printercount:=printers.Printers.Count;
//count=2 没有错,第一个是kodar,第二个是富士cx 400
printer.printerINDEX := 2 //为什么执行了这一句后当前的默认打印机还是kodar?????
end;
 
gzbxmcx 兄:
我设定了 "printer.printerINDEX := 2 "还是不行,并且会出错,因为第一个打印机的默认下标是0,而第二个打印机的printerindex 的值应为1,这点没有错呀.
 
搂主,你怎么放分都少呢??
你的PrinterIndex分析是正确的,
不过想通过他进行设置就不正确啦,
我解说一下:
1、通过Prints得到 Driver, Device, Port,方法是:
Prints是一个TStrings对象他存了TPrintDevice,用Prints.Object[PrinterIndex]得到一个TPrintDevice,而 TPrintDevice内就有 Driver, Device, Porn。
2、最后用SetPrinter(ADevice, ADriver, APort: PChar;
ADeviceMode: THandle);加上面得到的数据作参数就OK。ADeviceMode给一个0 也可以,后正他会找一个的。
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
 
Netsoft 兄:
请原谅了小弟 最近很穷了 只剩下20块大洋了 你就做一下好事了 等以后富有了再报答了...
 
Netsoft 兄:
怎样才能得到所要设定的的打印机的Device,Drive,Port,Handle???然后才能用SetPrinter
 
难道你还有什么问题不成???
呵呵~~~~~~~~~~~~~
 
有问题:
就是我怎样才能得到所要设定的的打印机的Device,Drive,Port,Handle???然后才能得到SetPrinter的所有参数,最后才能设定.
再次麻烦 Netsoft 兄
 
PrinterName:=TStrings;
//声明
Printers:=TPrinter;
PrinterName:=TStrings.create;//创建
Printers:=TPrinter.create;
PrinterName:=Printers.Printers;//赋值,得到各个打印机名
//现在假设我的第二个打印名为 CX 400,那么怎样才能得到它的Device,Drive,Port,Handle???
 
我想过一会 mail你一个我的源码算了,
跟你说又没分太不值得,
我也公务忙的,
你的 妹妹是????
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
Netsoft 兄:
我一直在等着你的源码呢??
哈哈哈.....
 
列举指定打印机所能支持的打印纸列表等参数的程序(包括纸张名称、大小、编号及送纸器列表等)。
http://www.aidelphi.com/6to23/docu/EnumPrintParams.zip
到这来看看,有没有你用的??
 
你不把 mail告诉我,
我怎么给你呀,
呵呵~~~~
 
用INI保存记录
procedure TFrmMain.N8Click(Sender: TObject);
var
i:integer;
TmpFile,TmpPath:String;
MyIni:TIniFile;
begin
Try
if PrinterSetupDialog1.Execute then
begin
TmpPath:=ExtractFilePath(Application.ExeName);
MyIni:=TIniFile.Create(TmpPath+'/System.ini');
MyIni.WriteString('PrintName','PrtName',Printer.Printers.Strings[Printer.Printerindex]);
end;
finally
FreeAndNil(MyIni);
end;
end;

打印之前读去设定
Procedure SetPrinter;
var
TmpFile,TmpPath:String;
i:Integer;
IsDierection:Boolean;
MyIni:TIniFile;
begin
Try
TmpPath:=ExtractFilePath(Application.ExeName);
MyIni:=TIniFile.Create(TmpPath+'/System.ini');
//poLandscape 横向 poPortrait垂直;
//TmpFile:=MyIni.ReadString('Print','Direction','');
//if TmpFile='0' then
Printer.Orientation:=poLandscape else
Printer.Orientation:=poPortrait;
//指定默认的打印机
TmpFile:=MyIni.ReadString('PrintName','PrtName','');
for i:=0 to Printer.Printers.Count-1do
if Printer.Printers.Strings=TmpFile then
Printer.PrinterIndex:=i;
finally
freeandnil(MyIni);
end;
end.
 
TO seager
老兄,通过Printer.PrinterIndex:=i;
设置打印机是不正确的,我上面已经说过了,
呵呵~~~~~~~~~~~~~~~~~~~~~~
 
我的E_mail: xiaodaqiang@163.com
有劳了,再次感谢 Netsoft 兄 ....
 
Netsoft 兄 :
出差了吗????
我还没有收到你的 mail 的源码??
 
后退
顶部