打印机控制问题!?(100分)

  • 主题发起人 主题发起人 保龙
  • 开始时间 开始时间

保龙

Unregistered / Unconfirmed
GUEST, unregistred user!
在计算机里连接了两台计算机 [P1],[P2] !
如何在程序里控制 T1文案使用[P1]打印机打印, T2文案使用[P2]打印机打印?
多谢!
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=6194
一种方法:通过改变默认打印机来操作。
另:可用printers单元的printer系统变量的相关属性来获取和指定打印机。
 
如何把两台打印机安装在不同的端口里,能不能在程序里直接那个端口直接打印呢?
 
作为用户,你只须关心设备类相对号而不必太在意其绝对号。因为你的目的是使用设备。只要你在控制面板上安装了打印机,那么就可以方便地用程序来控制其操作了。
上述方法一,在笔记里有详尽的叙述,请参考:
Windows系统默认的打印机信息存放于Win.INI文件中,只有修改了相应的文件内容,再通知Windows系统进行刷新,才算改变了默认的打印机。
下面是程序片断:
var
strINI : Array [0..MAX_PATH] of Char;
arrWindows : Array [0..46] of Char;
begin
GetWindowsDirectory(strINI,SizeOf(strINI));
StrCat(strINI,'Win.INI');
with TINIFile.Create(strINI)do
try //更改WIN.INI文件中的默认打印机设置
WriteString('Windows','device','HPLaserJet 4 Plus,HPPCL5MS,LPT1');
finally
Free;
end;
StrCopy(arrWindows,'Windows');
SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,LongInt(@arrWindows));
//发消息
end;

方法二:
uses printers;
var myprinter : integer;
//`枚举打印机列表
var i : integer;
pstr : string;
begin
myprinter := -1;
Memo1.Lines.clear;
for i := 0 to printer.printers.count - 1do
begin
pstr := printer.printers.string;
Memo1.Lines.Add(pstr);//枚举
if pstr = 'MyPrinter' then
myprinter := i;//'MyPrinter'`为控制面板上的打印机名
//设定打印机,初值为-1时为默认打印机
end;
end;

以TQuickRep组件编程调用为例来调用设定的打印机输出:
QuickRep1.PrinterSettings.PrinterIndex := myprinter;
QuickRep1.Print;
 
function Tfm_ICandOil.AlterPrint(PrName: String): Boolean;
var //选择打印机
WinIni:TIniFile;
WinIniFileName:Array[0..MAX_PATH] of char;
S:Array[0..64] of char;
begin
// PrName:='EPSON TM-U210D,HPPCL,LPT1:'
// if SelectPrint = 1 then
PrName:='EPSON TM-U210D,HPPCL,LPT1:';
GetWindowsDirectory(WinIniFileName,Sizeof(WinIniFileName));
StrCat(WinIniFileName,'/Win.ini');
WinIni:=TIniFile.Create(WinIniFileName);
try
WinIni.WriteString('Windows','Device',PrName);
finally
WinIni.Free;
end;
StrCopy(S,'Windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0 ,Longint(@S));
SelectPrint:=1;
//选择打印机(1)小票打印机,(2)报表打印机
end;
 
接受答案,并分配积分
 
后退
顶部