2010-04-16 16 views
2

我需要使用TPrinter進行一些打印。問題是我不能,由於各種原因,使用全局對象打印機。如何使用TPrinter的本地實例

我希望能夠創建我的TPrinter實例並使用該實例進行打印。

我試着用:

MyPrinter := TPrinter.Create; 
MyPrinter.BeginDoc; 

但這生成AV。

任何想法使用我的TPrinter實例打印什麼需要什麼?

問候 戈蘭·納吉

+0

爲什麼你不能使用全局打印機?您是否將多件東西同時打印到不同的打印機上? – 2010-04-16 13:33:22

回答

1

如果你看一下soucre打印機,該AbortProc使用全局FPrinter對象。
您可以在調用TPrinter.Create之前通過調用Printer函數解決此問題,然後它不會生成AccessViolation。 這將明顯地解決您的問題,但MyPrinter.Abort不會正常工作不正確。

告訴你爲什麼不能使用全局對象,爲其他用戶提供建議替代解決方案的可能性。

1

TPrinter對象並非真正設計爲在本地創建,而是設計用於在Printers單元中的「單例」函數Printer。通常你會使用它。

從幫助:

使用TPrinter來管理應用程序進行任何打印。通過調用打印機單元中的打印機功能來獲取TPrinter的實例。

編輯:其實,有過一個想你可以做這樣的事情:

procedure PrintThings; 
var 
    LMyPrinter: TPrinter; 
    LOldPrinter: TPrinter; 
begin 
    LMyPrinter := TPrinter.Create; 
    try 
    LOldPrinter := SetPrinter(LMyPrinter); 
    try 

     // your printing code goes here 

    finally 
     SetPrinter(LOldPrinter); 
    end; 
    finally 
    LMyPrinter.Free; 
    end; 
end; 
相關問題