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

在 class 裡面 使用 Canvas 物件 需要先宣告什麼呢??

答題得分者是:jow
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-11-13 13:59:45 IP:140.127.xxx.xxx 訂閱
因為我在class裡面使用Canvas 都會出現未定義Canvas的錯誤

所以請各位大大幫個忙了

是要在class裡面宣告 TCanvas ?

如何宣告呢?

拜託了
------
恩...
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-11-13 14:09:34 IP:210.208.xxx.xxx 訂閱
先試試 #include "Graphics.hpp"
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-11-13 14:16:33 IP:140.127.xxx.xxx 訂閱

應該不是這個原因

因為加下去後一樣出現錯誤
[C Error] Unit1.cpp(31): E2451 Undefined symbol 'Canvas'

class 裡面我想大概要宣告什麼類別吧.....

非常感謝您的回答

我繼續找找看
------
恩...
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-11-13 15:08:56 IP:140.127.xxx.xxx 訂閱


找到一個方法可以宣告...但是執行時會錯誤...


[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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-11-14 00:48:25 IP:211.72.xxx.xxx 訂閱
new 一個 PaintBox, 再使用該 PaintBox 之 Canvas, 應可 OK!
istillloving
高階會員


發表:33
回覆:182
積分:183
註冊:2008-10-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-11-14 21:13:53 IP:218.172.xxx.xxx 訂閱
抱歉

小弟不才 不懂您所說的

可以示範一次嗎??

我都是按右鍵然後看他的 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 才能存取呢??


------
恩...
編輯記錄
istillloving 重新編輯於 2008-11-14 21:15:25, 註解 無‧
istillloving 重新編輯於 2008-11-14 21:21:52, 註解 無‧
jow
尊榮會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-11-14 22:35:31 IP:123.193.xxx.xxx 未訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-11-15 11:39:19 IP:218.169.xxx.xxx 訂閱
這位前輩

你的意思是說 如果我是在 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-11-16 22:11:10 IP:220.129.xxx.xxx 訂閱
謝謝各位的幫忙

已經找出可以宣告和執行的方法了

原來在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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-11-17 12:33:50 IP:203.73.xxx.xxx 未訂閱
已經找出可以宣告和執行的方法了????

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