任何人都可以解釋這應該如何工作(在Windows10上運行的Delphi XE2)?德爾福TPrinter和錯誤217
簡約的應用程序 - 包含兩個按鈕的形式 - 用下面的代碼:
procedure TForm2.Button1Click(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(10,10,'Hello World');
Printer.EndDoc;
end;
procedure TForm2.Button2Click(Sender: TObject);
var
MyPrinter : TPrinter;
begin
MyPrinter := Printer;
MyPrinter.BeginDoc;
MyPrinter.Canvas.TextOut(10,10,'Hello World');
MyPrinter.EndDoc;
MyPrinter.Free;
end;
如果我單擊Button1,該程序在我的默認打印機打印的「Hello World」,通常當我關閉關閉它(用關閉按鈕)。相反,如果我單擊Button2,程序將打印一個相同的頁面,但現在當我用關閉按鈕關閉時,我會收到錯誤217消息。
我無法在Delphi文檔中找到有關如何使用打印機功能和TPrinter變量的說明。我很高興使用Button1技術的派生物進行打印 - 如果確認這是「防彈」方式,但想了解爲什麼Button2方法不起作用。我是否應該假設它不是我的負責釋放任何我實例化的TPrinter對象,還是有更清晰的解釋?
因此,如果我理解正確,Printer函數只是返回一個預先創建的TPrinter對象,該對象設置爲與默認打印機相匹配。可以這麼說,它不應該被認爲是一個TPrinter工廠。那麼我是否正確,如果我只是使用打印機,就好像它是一個TPrinter類型的全局變量(而不是Delphi幫助中描述的函數)? – Penguino
是的。打印機函數返回全局「TPrinter」對象的實例,該實例在第一次使用時創建。只要你沒有使用'SetPrinter'函數,它就會在應用程序退出時自動釋放。 – Ari0nhh
@Penguino'Printer()'函數返回一個RTL爲你擁有的'TPrinter'單例對象。根據需要使用'TPrinter'。而且,您也不僅限於默認的打印機。您可以將TPrinter.PrinterIndex屬性設置爲與其他打印機一起使用。 –