在 class 裡面 使用 Canvas 物件 需要先宣告什麼呢?? |
答題得分者是:jow
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
找到一個方法可以宣告...但是執行時會錯誤... [code cpp] TCanvas *ccc ; ccc= new TCanvas(); ccc->Pen->Width=2; ccc->Pen->Color=clRed; ccc->Rectangle(440,44,(448 w),(40 h)); [/code]
------
恩...
編輯記錄
istillloving 重新編輯於 2008-11-13 15:09:23, 註解 無‧
|
herbert2
尊榮會員 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
抱歉
小弟不才 不懂您所說的 可以示範一次嗎?? 我都是按右鍵然後看他的 Find Declaration 但是找不到 你所說的那ㄧ個物件呢 所以不知道怎麼宣告 以下是我另一種嘗試 也是可以編譯過 但是就是不能執行 [code cpp] class mvv{ public: void jjd() { Graphics::TCanvas *ccc; ccc= new TCanvas(); ccc->MoveTo(100,100); ccc->LineTo(200,200); } }; [/code] 在剛剛我才想到的一個觀念 我是不是要先把 class mv 設為 Geaphics 的 friend 才能存取呢??
------
恩...
編輯記錄
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
TCanvas 產生物件後,另外需要指定一個HDC給它
才可以work... [code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { HDC dc = GetDC(Panel1->Handle); try{ Graphics::TCanvas *c = new TCanvas(); try{ c->Handle = dc; c->Pen->Color = clRed; c->Pen->Width = 1; c->Pen->Style = psSolid; c->Pen->Mode = pmCopy; TRect r = Panel1->ClientRect; for(int i=0; i<20; i ){ InflateRect(&r,-2,-2); c->Rectangle(r); } } __finally{ delete c; } } __finally{ ReleaseDC(Panel1->Handle,&dc); } } [/code]
編輯記錄
jow 重新編輯於 2008-11-14 22:51:56, 註解 無‧
|
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
這位前輩
你的意思是說 如果我是在 Timer1 裡面呼叫到 class MV 的話 我就必須要在 Timer1 裡面 加入以下的程式碼嗎?? 可不可以告訴我這是什麼原因呢? 剛學BCB不久...抱歉了.. ===================引 用 jow 文 章=================== TCanvas 產生物件後,另外需要指定一個HDC給它 才可以work... [code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { HDC dc = GetDC(Panel1->Handle); try{ Graphics::TCanvas *c = new TCanvas(); try{ c->Handle = dc; c->Pen->Color = clRed; c->Pen->Width = 1; c->Pen->Style = psSolid; c->Pen->Mode = pmCopy; TRect r = Panel1->ClientRect; for(int i=0; i<20; i ){ InflateRect(&r,-2,-2); c->Rectangle(r); } } __finally{ delete c; } } __finally{ ReleaseDC(Panel1->Handle,&dc); } } [/code]
------
恩... |
istillloving
高階會員 發表:33 回覆:182 積分:183 註冊:2008-10-09 發送簡訊給我 |
謝謝各位的幫忙
已經找出可以宣告和執行的方法了 原來在class裡面需要指定 Form1 我也試過使用 using namespace std; 來看看是不是可以不需要指定namespace 但是好像沒辦法 所以還是乖乖的宣告吧 謝謝各位的幫忙了~! [code cpp] Graphics::TCanvas* Canvas ; Canvas = new Graphics::TCanvas; Form1->Canvas->Pen->Width=2; Form1->Canvas->Pen->Color=clBlue; Form1->Canvas->Rectangle(w,x,y,z); [/code]
------
恩... |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
已經找出可以宣告和執行的方法了????
(1)Graphics::TCanvas* Canvas ; (2)Form1->Canvas (1) 和 (2) 是兩個不同的 TCanvas 物件喔!!! 提供幾個觀念供你參考 1.作為一個Component Writer, 首先必須根據需要來 決定所寫的元件, 應該從哪裡繼承下來改寫, 以你的問 題為例, 其實可以用 TGraphicsControl 或 TCustomControl 做為基礎類別 2.TCanvas物件, 基本上是一組畫圖的工具, 所以要Assign 一個HDC給它, 好讓它知道要畫在哪裡. 3.許多現成元件的Canvas屬性是公開的, 如TForm, TPaintBox, TLabel等, 純就使用的角度而言, 擇一使用即可. 個人觀點, 僅供參考...
編輯記錄
jow 重新編輯於 2008-11-17 12:49:41, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |