全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1336
推到 Plurk!
推到 Facebook!

Canvas->Handle

尚未結案
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-19 12:53:06 IP:61.218.xxx.xxx 未訂閱
請問,我因為需要在自己設定的物件內增加TCanvas的屬性, 其中有一列副程式設定 void load(void) { TWincontrol::Load(); //這一列為什麼一定要加在load的函式內,不能加在其他地方 Canvas->Handle = GetDC(Handle); } 還有就是有用GetDC不是就要再設一個ReleaseDC嗎? 我把它放在destroy的地方,編譯是沒有問題,可是用起來 會有誤,如果沒有加就OK,可是對系統是否有引響?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-19 17:45:45 IP:61.231.xxx.xxx 未訂閱
我查了一下我的 BCB5/6 的 TWinControl 內並沒有 Load() 這個 Method 呀? 是否您自己或別人有改寫過?    關於 HDC 建議您要用的時候再取用,用完就 release,以看到的 VC 程式大多像:
   HDC hDC=GetDC(Handle);
   // ... 對 hDC 畫畫 ^_^
   ReleaseDC(Handle,hDC);
而從 VCL 的原始碼中也可以看到類似的作法,轉成 BCB 的話,如下:
   myCanvas->Handle = GetDC(Handle);
   // ... 對 myCanvas 畫畫 ^_^
   myCanvas->Handle = 0;
HDC 占用不放的話,對於 9x 的系統好像會有影響,可參考 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_4esj.asp 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-19 18:15:56 IP:61.218.xxx.xxx 未訂閱
謝謝dllee版主的指示,你的大頭照很可愛,真的是你本人嗎? 我再使用時是用 Canvas->Handle = GetDC(Handle) //繪圖 結束用 ReleaseDC(Handle,Canvas->Handle); 這樣好像就會出錯!!在程式結束的時候
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-19 18:47:58 IP:61.231.xxx.xxx 未訂閱
引言: 謝謝dllee版主的指示,你的大頭照很可愛,真的是你本人嗎?
是我女兒 <>< face="Verdana, Arial, Helvetica">引言: 我再使用時是用 Canvas->Handle = GetDC(Handle) //繪圖 結束用 ReleaseDC(Handle,Canvas->Handle); 這樣好像就會出錯!!在程式結束的時候 我是建議要繪圖時再使用 Canvas->Handle = GetDC(Handle); //繪圖 Canvas->Handle = 0; 不然,您就在結束時再使用 Canvas->Handle = 0; 應該是不能使用 ReleaseDC,如果要使用,至少要在 Canvas->Handle = 0; 之後才能使用,否則這個 Canvas 還保留這個 Handle 而您確已將它 Release,這會造成 Canvas 失常。 在 TCanvas 的原始碼中還有用到一個執行緒在監控 Canvas 的 Handle ,如果指給它,最好先 Canvas->Handle = 0; 清除,否則,很難說會發生什麼事。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
jason_cyl329
高階會員


發表:123
回覆:155
積分:105
註冊:2003-05-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-20 09:39:12 IP:61.218.xxx.xxx 未訂閱
原來結束後要這樣才能release, 對不起,我前面的程式有寫錯一點 void TMyClass::loaded(void) { TWincontrol::Loaded(); //這一列為什麼一定要加在loaded的函式內,不能加在其他地方 Canvas->Handle = GetDC(Handle); } 我如果將Canvas->Handle = GetDC(Handle); 寫在Class Create的地方,Compile時可以通過,可是執行使用時就會有誤, Why?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-20 15:24:04 IP:61.231.xxx.xxx 未訂閱
引言: 我如果將Canvas->Handle = GetDC(Handle); 寫在Class Create的地方,Compile時可以通過,可是執行使用時就會有誤, Why?
這可能與 VCL 建立元件的過程有關,就像在 OnFormShow 的事件中如果去改變一些元件的 Visible 屬性時,有時就會發生 Exception ,說什麼隱藏了不能再設定 Visible 之類的訊息(對不起,不太記得了 )。 我想,您應該是有參考資料,或是真的運氣太好,讓您知道可以放在 >沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com
系統時間:2024-05-07 5:54:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!