使用 TChart 在 TThread 中產圖,Free 物件時發生 System Error Code 5 拒絕存取。 |
尚未結案
|
Jiaga
一般會員 發表:1 回覆:1 積分:0 註冊:2013-03-16 發送簡訊給我 |
我自已寫了一個 TFrame 裡面放了一個 TChart。
在單獨使用時不管是顯示、產圖都很正常。 但在 TThread 裡面產圖會發生,圖檔不完整,我參考了下列網址說明。 http://www.teechart.net/support/viewtopic.php?f=3&t=7639 在產圖前先 TChart.Draw 到一個 TBitmap 再產圖,但在 Free 物件時會發生 System Error Code 5 拒絕存取。 不進行 TChart.Draw 就不會有這個問題,但就是圖檔不完整。 產圖在 Synchronize 進行就不用 TChart.Draw,產圖也都正常,但不想這樣寫。 想請問有什麼『System Error Code 5 拒絕存取』的處理方式,或注意的地方,謝謝。 Delphi XE 10.1 [code delphi] procedure TfrmFormulaChart.SaveFormulaChartImage(); var bmpChart: TBitmap; wsChartFile: WideString; begin bmpChart := TBitmap.Create; try bmpChart.Width := self.Width; bmpChart.Height := self.Height; chtFormulaChart.Draw(bmpChart.Canvas, Rect(0, 0, bmpChart.Width, bmpChart.Height)); //bmpChart.SaveToFile(psImageFolder psMaxDate '_' psChartName '.bmp'); wsChartFile := psImageFolder psMaxDate '_' psChartName; if (psImageFormat.CompareTo('PNG') = 0) then TeeSaveToPNG(chtFormulaChart, wsChartFile '.png') else if (psImageFormat.CompareTo('JPG') = 0) then TeeSaveToJPEG(chtFormulaChart, wsChartFile '.jpg', -1, -1) else if (psImageFormat.CompareTo('BMP') = 0) then chtFormulaChart.SaveToBitmapFile(wsChartFile '.bmp'); finally FreeAndNil(bmpChart); end; end; [/code] |
stacker_liew
中階會員 發表:59 回覆:168 積分:65 註冊:2004-05-17 發送簡訊給我 |
Delphi就是這樣,顯示畫面是在Main Thread,其它Thread若要存取它必需使用Synchronize進行,不然會有不可預料的後果發生。
除非你自己處理資源管理,那你就要去看TThead的原始碼,雖然這樣有點脫褲子放屁的感覺。 ===================引 用 Jiaga 文 章=================== 我自已寫了一個 TFrame 裡面放了一個 TChart。 在單獨使用時不管是顯示、產圖都很正常。 但在 TThread 裡面產圖會發生,圖檔不完整,我參考了下列網址說明。 http://www.teechart.net/support/viewtopic.php?f=3&t=7639 在產圖前先 TChart.Draw 到一個 TBitmap 再產圖,但在 Free 物件時會發生 System Error Code 5 拒絕存取。 不進行 TChart.Draw 就不會有這個問題,但就是圖檔不完整。 產圖在 Synchronize 進行就不用 TChart.Draw,產圖也都正常,但不想這樣寫。 想請問有什麼『System Error Code 5 拒絕存取』的處理方式,或注意的地方,謝謝。 Delphi XE 10.1 [code delphi] procedure TfrmFormulaChart.SaveFormulaChartImage(); var bmpChart: TBitmap; wsChartFile: WideString; begin bmpChart := TBitmap.Create; try bmpChart.Width := self.Width; bmpChart.Height := self.Height; chtFormulaChart.Draw(bmpChart.Canvas, Rect(0, 0, bmpChart.Width, bmpChart.Height)); //bmpChart.SaveToFile(psImageFolder psMaxDate '_' psChartName '.bmp'); wsChartFile := psImageFolder psMaxDate '_' psChartName; if (psImageFormat.CompareTo('PNG') = 0) then TeeSaveToPNG(chtFormulaChart, wsChartFile '.png') else if (psImageFormat.CompareTo('JPG') = 0) then TeeSaveToJPEG(chtFormulaChart, wsChartFile '.jpg', -1, -1) else if (psImageFormat.CompareTo('BMP') = 0) then chtFormulaChart.SaveToBitmapFile(wsChartFile '.bmp'); finally FreeAndNil(bmpChart); end; end; [/code] |
fuuk21
一般會員 發表:16 回覆:7 積分:4 註冊:2003-04-18 發送簡訊給我 |
在 TfrmFormulaChart 內 建立 一個 )
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |