请教:我用的是 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 的打印机。各位大哥,我要怎么才能在这两太打印机中切换,是写哪个语句啊?谢谢!

解决方案 »

  1.   

    SetPrinter(ADevice, ADriver, APort: PChar; ADeviceMode: THandle);到底是怎么调用的啊?比如:我的打印机名称为 :name1
    接在并口:LPT1那要怎么调用吗?
      

  2.   

    我遇到的问题是这样的:
    客户一台机器联两台打印机,一台的票据打印机,一台的普通打印机。在同一个系统里面,当用户打印发票是系统自动调用票据打印机,当用户打印统计表的时候刚自动用普通打印机。工作原理就是不断地根据模块功能设置两台打印中一台为默认打印机。具体代码如下: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;