如何直接在panel元件上劃圖呢?? |
答題得分者是:jow
|
valex
一般會員 發表:3 回覆:2 積分:1 註冊:2007-08-13 發送簡訊給我 |
|
harpist
資深會員 發表:3 回覆:251 積分:430 註冊:2002-10-03 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
(1)TPanel底下沒有Brush屬性, TPanel底下的Canvas下才有.
(2)可是, TPanel的Canvas屬性宣告放在protected, 所以你無法直接存取它 (3)所以, 應該先用TPanel的Handle, 透過GetDC()向系統取得一個Device Context資源, 編號為一個HDC (4)再來, 動態產生一個TCanvas, 你所有繪圖動作的對象, 都在這個TCanvas物件上, 只是此時它還少了個Handle (5)然後, 將(3)取得的HDC指定給(4)產生的TCanvas 物件, 這樣就可以動手繪圖了. (6)最後, 資源用完記得要釋放, 還給系統. 包括HDC, TCanvas物件, 如程式碼所示. (7)另外, 有些元件像TLabel, TListBox, TStringGrid 這些元件的Canvas屬性為public, 所以你可以直接存取它. 個人見解, 提供你參考................. [code cpp] //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HDC dc = GetDC(Panel1->Handle); if(dc != NULL){ try{ TCanvas* canvas = new TCanvas(); try{ canvas->Handle = dc; canvas->Pen->Color = clRed; canvas->Pen->Width = 2; canvas->Pen->Style = psSolid; canvas->Pen->Mode = pmCopy; canvas->Brush->Color = clBlue; canvas->Brush->Style = bsSolid; TRect rect = Rect(0, 0, 200, 200); for(int i=0; i<2; i ){ switch(i){ case 0: OffsetRect(&rect, 50, 50); break; case 1: InflateRect(&rect, 10, 10); break; } canvas->FrameRect(rect); } } __finally{ delete canvas; } } __finally{ ReleaseDC(Panel1->Handle, dc); } } } //--------------------------------------------------------------------------- [/code] ===================引 用 valex 文 章=================== 各位先進您好: 如題.想請教如何在panel上劃圖. 我在表單上有一個panel 想要在上面劃一個矩形,我打下面的指令不知道為什麼會錯呢??(或是能提攻其它方法呢??) [code cpp] this->Panel1->Brush->Bitmap->Canvas->Rectangle(x1,y1,x2,y2); [/code] 謝謝您 valex 上 |
valex
一般會員 發表:3 回覆:2 積分:1 註冊:2007-08-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |