線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3179
推到 Plurk!
推到 Facebook!

如何直接在panel元件上劃圖呢??

答題得分者是:jow
valex
一般會員


發表:3
回覆:2
積分:1
註冊:2007-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-08 23:36:00 IP:140.115.xxx.xxx 訂閱
各位先進您好:
如題.想請教如何在panel上劃圖.
我在表單上有一個panel 想要在上面劃一個矩形,我打下面的指令不知道為什麼會錯呢??(或是能提攻其它方法呢??)

[code cpp]
this->Panel1->Brush->Bitmap->Canvas->Rectangle(x1,y1,x2,y2);
[/code]

謝謝您
valex 上
編輯記錄
valex 重新編輯於 2007-12-08 23:37:04, 註解 無‧
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-12-09 01:06:21 IP:211.74.xxx.xxx 未訂閱
參考看看
[code cpp]
TCanvas *pCanvas = new TCanvas;
HDC hDC=GetDC(Panel1->Handle);
pCanvas->Handle=hDC;
pCanvas->Rectangle(10,10,Panel1->Width-10,Panel1->Height-10);
ReleaseDC(0, hDC);
delete pCanvas;

[/code]
------
~§~迷時師渡,悟了自渡~§~
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-12-09 01:12:17 IP:123.193.xxx.xxx 訂閱
(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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-12-10 11:57:53 IP:140.115.xxx.xxx 訂閱
謝謝你們的回答,讓學生受益良多.
再次感謝

valex 敬上
系統時間:2024-11-22 21:16:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!