我正在使用 Delphi XE3,下面是我的示例应用程序:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
uses Vcl.Printers;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Printer.Printers[Printer.PrinterIndex]);
end;
end.
窗下| 控制面板 | 设备和打印机,有 3 台打印机:
- CutePDF Writer(默认打印机)
- 我的传真
- Microsoft XPS 文档编写器
当我运行示例应用程序并单击 Button1 时,它显示“CutePDF Writer”作为默认打印机。在不关闭示例应用程序的情况下,我转到 Windows | 控制面板 | 设备和打印机将“我的传真”设置为默认打印机,然后我返回示例应用程序并再次单击 Button1,它仍然显示“CutePDF Writer”作为默认打印机(它应该显示“我的传真”)。在学习了单元 Vcl.Printers 中的 TPrinter 类之后,我可以编写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Printer.Printing then
Printer.PrinterIndex := -1;
ShowMessage(Printer.Printers[Printer.PrinterIndex]);
end;
对于每次需要将 PrinterIndex 设置为 -1 来说,这不是一个好方法。我的问题是我的应用程序如何知道是否有默认打印机更改通知?因此,如果有默认打印机更改通知,我只会将 PrinterIndex 设置为 -1。