我在一程序中需要列出连在我打印机上的所有打印机,并能根据需要选择其中的某一台(因在模拟阶段,所以我用了虚拟打印机--finefactory),这已实现,但是我需要自定义纸张的大小,现在问题是如果默认虚拟打印机的分辨率是300dpi,并在这个分辨率下正常打印,但我更换了另一台打印机,再选择finefactory这个虚拟打印机的话,分辨率就变为600dpi了,结果自然就不对了。然则我若重新运行程序就又恢复到300dpi了,很奇怪,打印机的分辨率会自动更改吗,该怎样让分辨率一直保持在300dpi?(我在Delphi6中用的getDeviceCaps()函数)急盼求解,分不够再加,谢谢!

解决方案 »

  1.   

    通过组合框选择打印机的程序片断如下:
    procedure TForm1.ComboBox3Change(Sender: TObject);
    var
      Device: array[0..255] of Char;
      Driver: array[0..255] of char;
      Port: array[0..255] of char;
      s : array[0..255] of Char;
      hDeviceMode: THandle;
    begin
      Printer.PrinterIndex := ComboBox3.ItemIndex;
      Printer.GetPrinter (Device, Driver, Port, hDeviceMode);
      StrCopy (s, Device);
      StrCat (s, ',');
      StrCat (s, Driver);
      StrCat (s, ',');
      StrCat (s, Port);
      WriteProfileString ('windows', 'device', s);
      StrCopy (s, 'windows');
      SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@s));
      form1.Refresh ;end;