请教:我用的是 fastreport 3.18 ,默认的打印机是 POS 票据打印机
path:=ExtractFilePath(ParamStr(0));MainUnitForm.frxReport1.LoadFromFile(path+'Report\'+'InMemberMessageLinS.fr3');
MainUnitForm.frxReport1.PrepareReport;
// MainUnitForm.frxReport1.ShowReport;
MainUnitForm.frxReport1.PrintOptions.ShowDialog:=False;
MainUnitForm.frxReport1.Print;
//*******************打印************************************但是客户也希望打印 A4 纸,
在打印 A4 纸的时候,我弹出打印对话框:
path:=ExtractFilePath(ParamStr(0));MainUnitForm.frxReport1.Clear;
MainUnitForm.frxReport1.LoadFromFile(path+'Report\'+'MemberMessageCz.fr3');
MainUnitForm.frxReport1.PrepareReport;
MainUnitForm.frxReport1.ShowReport;然后选择打印机可是我打印 A4 后,然后打印 票据 ,不能打印
因为它选择的是 打印 A4 的打印机。各位大哥,我要怎么才能在这两太打印机中切换,是写哪个语句啊?谢谢!
path:=ExtractFilePath(ParamStr(0));MainUnitForm.frxReport1.LoadFromFile(path+'Report\'+'InMemberMessageLinS.fr3');
MainUnitForm.frxReport1.PrepareReport;
// MainUnitForm.frxReport1.ShowReport;
MainUnitForm.frxReport1.PrintOptions.ShowDialog:=False;
MainUnitForm.frxReport1.Print;
//*******************打印************************************但是客户也希望打印 A4 纸,
在打印 A4 纸的时候,我弹出打印对话框:
path:=ExtractFilePath(ParamStr(0));MainUnitForm.frxReport1.Clear;
MainUnitForm.frxReport1.LoadFromFile(path+'Report\'+'MemberMessageCz.fr3');
MainUnitForm.frxReport1.PrepareReport;
MainUnitForm.frxReport1.ShowReport;然后选择打印机可是我打印 A4 后,然后打印 票据 ,不能打印
因为它选择的是 打印 A4 的打印机。各位大哥,我要怎么才能在这两太打印机中切换,是写哪个语句啊?谢谢!
解决方案 »
- Delphi调用C#编写的com组件?
- 如何让代码在主线程中执行?
- 求Select 语句 商品库存跟踪问题
- 求助:RAVE的DIRECT DATA VIEW 不能采集DBGRID里的数据
- 模拟组合键的操作!~
- 驱动级ie插件找人写
- 如何将richEdit中的文字导成BMP文件,并可以实现文字水平方向的居左、居中、居右以及垂直方向的居上、居中、居下的效果
- 能否实现dbgrid中的某一范围内的数据统一显示为‘**’
- Trim返回什么值?
- Delphi做数据库简直是一堆垃圾
- 使用DOCK PRESIDENT控件做停靠窗口,如何在程序启动的时候就把需要停靠的窗口停靠在想要的位置?
- Printer对象打印问题
接在并口:LPT1那要怎么调用吗?
客户一台机器联两台打印机,一台的票据打印机,一台的普通打印机。在同一个系统里面,当用户打印发票是系统自动调用票据打印机,当用户打印统计表的时候刚自动用普通打印机。工作原理就是不断地根据模块功能设置两台打印中一台为默认打印机。具体代码如下:1.取得所有安装在本机上的打印机:procedure TForm1.GetPrinterNames;
var
buffer: TPrinterBuffer;
currPos,n: integer;
printerName: string;
begin
PrinterNames.Free;
PrinterNames := TStringList.Create;
if GetProfileString(PChar('PrinterPorts'), nil, '', buffer, MAXPRINTERBUFFER) > 0 then
begin
currPos := 0;
n := 0;
while (true) do
begin
n := n + 1;
printerName := ParseNames(buffer, currPos);
if printerName <> '' then
begin
printerName := IntToStr(n) + ': ' + PrinterName;
PrinterNames.Add(printerName);
end else
break;
end;
end;
end;function TForm1.ParseNames(const namebuffer: TPrinterBuffer;
var startPos: integer): string;
var
i, j, NameLength: integer;
str: string;
begin
result := '';
if (startPos > High(namebuffer)) or (namebuffer[startPos] = Chr(0)) then
exit;
for i := startPos to High(namebuffer) do
begin
if namebuffer[i] = Chr(0) then
begin
nameLength := i - startPos;
SetLength(str, nameLength);
for j := 0 to nameLength - 1 do
str[j+1] := namebuffer[startPos + j];
result := str;
startPos := i + 1;
break;
end;
end;
end;2.设置打印机为默认打印机:function TForm1.SetDefaultPrinter(const PrinterName: String): boolean;
var
s2 : string;
dum1 : Pchar;
xx, qq : integer;
const
cs1 : pchar = 'Windows';
cs2 : pchar = 'Device';
cs3 : pchar = 'Devices';
cs4 : pchar = #0;
begin
try
xx := 254;
GetMem( dum1, xx);
Result := False;
qq := GetProfileString(cs3,pchar(printerName), #0, dum1, xx);
if (qq > 0)and(trim(strpas(dum1)) <> '')then
begin
s2 := PrinterName + ',' + strpas(dum1);
while GetProfileString(cs1, cs2, cs4, dum1, xx) > 0 do
WriteProfileString( cs1, cs2, #0);
WriteProfileString( cs1, cs2, pchar(s2));
Result := True;
end;
finally
FreeMem(dum1);
end;
end;