如何指定打印机打印
一台电脑安装了两台打印机(A和B )
要打印机两种报表,一种报表指定用A打印机打,一种报表指定用B打印机打
可是打印时,打印机是切换过来了,可是纸张不对
一个月前还是好的,突然一下,就不行了!
procedure TPayFrm.N6Click(Sender: TObject);
var strsql:string;
DaXie:string;
printno:integer;
begin
inherited;
//是否已交费
if not IsPay(adomst.fieldbyname('yhyear').AsString,
adomst.fieldbyname('yhmonth').AsString,
adomst.fieldbyName('yhcode').AsString ) then
begin
{ Messagedlg('用户:<'+adomst.FieldByName('yhcode').AsString+'>'+
adomst.FieldByName('yhyear').AsString+'年'+
adomst.FieldByName('yhmonth').AsString+'月,未交费,不能打印!' ,mtWarning,[mbok],0);
}
exit;
end;
SetPrinter(0);//设置打印机0
if adomst.IsEmpty then exit;
strsql:='select * from v_payvoince where yhyear='+
adomst.fieldbyname('yhyear').AsString+
' and yhmonth='+adomst.fieldbyname('yhmonth').AsString+
' AND YHCODE='''+adomst.fieldbyname('yhcode').AsString+'''';
// showmessage(strsql);
quyprint.Connection:=FrmQCDM.ADOCon;
quyprint.Close;
quyprint.SQL.Clear;
quyprint.SQL.Text:=strsql;
quyprint.Open;
// SetPaper(0);
DaXie:=XiaoXieToDaXie( FormatFloat('#.00', quyprint.FieldByName('payamount').AsFloat) );
With PrintFrm do
begin
BASIC_USE.DataSet:=quyprint;
RMReport1.LoadFromFile('.\report\Payvoince.rmf');
Diaxie:=DaXie;
RMReport1.PrinterName:=printer.Printers[printer.PrinterIndex];
RMReport1.ShowReport;
end;
end;
//污水费收据
procedure TPayFrm.N8Click(Sender: TObject);
var strsql:string;
sda:widestring;
P:Boolean;
digits:array[0..6] of string;
DaXie:array[0..8] of string;
i,n:integer;
begin
inherited;
if adomst.IsEmpty then exit;
SetPrinter(1); //设置打印机1
P:=IsPayPWF(adomst.fieldbyname('yhcode').AsString,
adomst.fieldbyname('yhyear').AsInteger,
adomst.fieldbyname('yhmonth').AsInteger);
if (P=False) AND (MessageDlg('你确认已收到< '+adomst.fieldbyname('yhcode').AsString+' >'+
adomst.fieldbyname('yhyear').AsString+'年'+adomst.fieldbyname('yhmonth').AsString+'月的污水费吗?',
mtInformation,[mbYes,mbNO],0) =mrNo) then exit;
UpdatePWF_LOCK(adomst.fieldbyname('yhcode').AsString,
adomst.fieldbyname('yhyear').AsInteger,
adomst.fieldbyname('yhmonth').AsInteger
);
strsql:=' select dbo.CalLast(a.yhyear,a.yhmonth) as PrevDate,a.yhaddress,a.pwf,PWFSFBQ,a.pwfprice,b.kaipiaoren,b.soukuangren '+
' from v_usedatabymonth a inner join yh_paydata b '+
' on a.serno=b.ref_useno '+
' where b.yhyear='+adomst.fieldbyname('yhyear').AsString+' and b.yhmonth='+
adomst.fieldbyname('yhmonth').AsString+
' AND b.YHCODE='''+adomst.fieldbyname('yhcode').AsString+'''';
//showmessage(strsql);
quyprint.Connection:=FrmQCDM.ADOCon;
quyprint.Close;
quyprint.SQL.Clear;
quyprint.SQL.Text:=strsql;
quyprint.Open;
// DaXie:=XiaoXieToDaXie( FormatFloat('0.00', quyprint.FieldByName('pwf').AsFloat) );
n:=0;
for i:=0 to High(DaXie) do
DaXie[i]:='0';
sda:=Small2Big(quyprint.fieldbyname('pwf').AsFloat );
// showmessage(sda[1]);
DaXie[Length(sda)]:='¥';
for i:=Length(sda) downto 1 do
begin
// showmessage(sda[i]);
DaXie[n]:=sda[i];
Inc(n);
end;
With PrintFrm do
begin
BASIC_USE.DataSet:=quyprint;
RMReport1.LoadFromFile('.\report\PWFVoince.rmf');
// Diaxie:=DaXie;
baiwan:=DaXie[8];
shiwan:=DaXie[7];
wang :=Daxie[6];
qian :=Daxie[5];
bai :=DaXie[4];
shi :=Daxie[3];
yuan :=Daxie[2];
jiao :=Daxie[1];
feng :=Daxie[0];
RMReport1.PrinterName:=printer.Printers[printer.PrinterIndex];
RMReport1.ShowReport;
end;
end;
procedure TPayFrm.SetPrinter(serno:integer);
var
Mydevice,Mydriver,MyPort,s:array[0..255] of char;
MyHandle:THandle;
i:integer;
pDMode:PDevMode;
begin
if printer.Printers.Count=1 then exit;
//printer.SetPrinter();
printer.Refresh;
printer.PrinterIndex:=Serno;
Printer.GetPrinter(Mydevice,
MyDriver,
MyPort,
MyHandle);
StrCat(MyDevice,',');
StrCat(MyDevice,MyDriver);
StrCat(MyDevice,',');
StrCat(Mydevice,MyPort);
//write win.ini
WriteProfileString('WINDOWS','DEVICE',Mydevice);
//tell all application that windows ini file has changed ,
//this will cause them all to recheck default printer
SendMessage(HWND_BROADCAST,
WM_WININICHANGE,
0,
LongInt(@MyDevice)
);
end;