close 與 close() 的差別 |
尚未結案
|
jacky_5678
一般會員 ![]() ![]() 發表:5 回覆:14 積分:3 註冊:2004-04-21 發送簡訊給我 |
|
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
jacky_5678
一般會員 ![]() ![]() 發表:5 回覆:14 積分:3 註冊:2004-04-21 發送簡訊給我 |
這是我的close code ,不曉得哪裡會出錯..造成 close 不起來
procedure TFrmTest.FormClose(Sender: TObject; var Action: TCloseAction); begin // 清除預覽的印表機屬性 QRPreview.QRPrinter.ClosePreview(Self); QRPreview.QRPrinter := nil; // 關閉視窗時, 自動從記憶體中移除程式. Action := caFree; end;發表人 - jacky_5678 於 2005/06/08 17:31:39 |
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
您好:
ClosePreview()的原型是ClosePreview(Control:TWinControl)所以當然要傳參數進入.
如果像From.Close他的原型是procedure Close;所以你可用Form.Close;跟Form.Close()都一樣. 至於您提到的
QRPreview.QRPrinter.ClosePreview(Self);
為何會有錯誤訊息,我找了一些資料提到只要將Form給Close掉就可以了,並不需要自己去Close.
另外如果要把您那段改成正常,參考下面,但我並不能夠很確定是否沒有問題.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
AQRPrinter:TQRPrinter;
begin
AQRPrinter:=TQRPrinter.Create();
QRPreview1.QRPrinter:=AQRPrinter;
QRPreview1.QRPrinter.ClosePreview(Self);
QRPreview1.QRPrinter:=nil;
Action := caFree;
end; 參考資料:
http://www.mail-archive.com/delphi@delphi.org.nz/msg11387.html
http://www.mail-archive.com/delphi@itb.ac.id/msg03431.html
|
jacky_5678
一般會員 ![]() ![]() 發表:5 回覆:14 積分:3 註冊:2004-04-21 發送簡訊給我 |
你好:
我想我在敘述一下我的問題一下,可能敘述的不是很清楚,如下
procedure TFrmTest.Button1Click(Sender: TObject); begin close(); end; procedure TFrmTest.FormClose(Sender: TObject; var Action: TCloseAction); begin // 清除預覽的印表機屬性 QRPreview.QRPrinter.ClosePreview(Self); QRPreview.QRPrinter := nil; // 關閉視窗時, 自動從記憶體中移除程式. Action := caFree; end; 出現錯誤訊息如下 Exception: ----------------------------------------------------------------------------------------------------- 2.1 Date : Wed, 1 Jun 2005 09:54:55 0800 2.2 Address: 0082BF00 2.3 Module : qrpt70.bpl 2.4 Type : EAccessViolation 2.5 Message: Access violation at address 0082BF00 in module 'qrpt70.bpl'. Read of address 00000044. Call Stack Information: ----------------------------------------------------------------------------------- |Address |Module |Unit |Class |Procedure/Method |Line| ----------------------------------------------------------------------------------- |0082BF00|qrpt70.bpl |Qrprntr.pas |TQRPrinter |ClosePreview | | |0082BEFC|qrpt70.bpl |Qrprntr.pas |TQRPrinter |ClosePreview | | |00716B49|SCking70.bpl|FrmTest.pas|TFrmTest|FormClose |265 |===== 永遠都是初學者 ===== |
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
jacky_5678
一般會員 ![]() ![]() 發表:5 回覆:14 積分:3 註冊:2004-04-21 發送簡訊給我 |
你好: 你寫的方式,應該是不可行的,因為我的QRPreview 是本身已經 拉到畫面上的元件,所以應該不需要再Create , 現在的問題是,我不知道會有什麼樣的情況,會使得 QRPreview.QRPrinter.ClosePreview(Self); QRPreview.QRPrinter := nil; 這兩行會有錯誤,我有點懷疑,是不是 QRPreview 還在作動作,可能印表中, 可能還在產生報表中,但是這兩個判斷我已經有做了, 還是還有其他狀況我沒有判斷到的所導致....< > ===== 永遠都是初學者 ===== < > 發表人 - jacky_5678 於 2005/06/09 11:55:52 |
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
我知道你的QRPreview是一個可視元件,不用去Create,但我的Create是QRPrinter耶,不曉得你有沒有仔細看.
請你把他改成像我下面這樣試試. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
AQRPrinter:TQRPrinter;
begin
AQRPrinter:=TQRPrinter.Create();
QRPreview1.QRPrinter:=AQRPrinter;
QRPreview1.QRPrinter.ClosePreview(Self);
QRPreview1.QRPrinter:=nil;
Action := caFree;
end; 你所提的:
>這兩行會有錯誤,我有點懷疑,是不是 QRPreview 還在作動作,可能印表中,
>可能還在產生報表中,但是這兩個判斷我已經有做了,
我測試不是這個狀況,你可以測試一下,只要很單純的使用QRPreview,然後使用你的方式去Close他就會出現錯誤訊息了. 根據我查資料你要使用ClosePreview必須要去設定他的QRPrint才行,我猜測是ClosePreview他必須要去釋放QRPrint,而如果沒有去指定他的
QRPreview1.QRPrinter:=AQRPrinter;
則ClosePreview在釋放時便會產生錯誤訊息. 你可在測以下的方式.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
AQRPrinter:TQRPrinter;
begin
AQRPrinter:=TQRPrinter.Create();
QRPreview1.QRPrinter:=AQRPrinter;
QRPreview1.QRPrinter.ClosePreview(Self);
AQRPrinter.Free();//你單步追蹤這裡將出現錯誤訊息,原因是他已經被ClosePreview釋放了
Action := caFree;
end; 最後我詢問有使用QRPreview相關經驗的朋友,據他們表示,把Form關掉就可以了,無須自己去釋放.
|
jacky_5678
一般會員 ![]() ![]() 發表:5 回覆:14 積分:3 註冊:2004-04-21 發送簡訊給我 |
|
supman
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:770 積分:924 註冊:2002-04-22 發送簡訊給我 |
|
jacky_5678
一般會員 ![]() ![]() 發表:5 回覆:14 積分:3 註冊:2004-04-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |