請教OnPaint與Fresh 的用法 |
尚未結案
|
piemomoka
一般會員 發表:8 回覆:10 積分:3 註冊:2003-12-18 發送簡訊給我 |
請教各位前輩
我要將PaintBox設置在ScrollBox中,Run了之後,按下Button會在PaintBox中畫圖表,因為圖會消失,所以把Code寫在OnPaint中
void __fastcall TForm1::FormResize(TObject *Sender)
{
ScrollBox1->Height=Form1->ClientHeight*8/10;
ScrollBox1->Width=Form1->ClientWidth*8/10;
ScrollBox1->Top=(Form1->ClientHeight - ScrollBox1->Height)/4;
ScrollBox1->Left=(Form1->ClientWidth - ScrollBox1->Width)/6;
PaintBox1->Top=20;
PaintBox1->Left=20;
PaintBox1->Width=980;
PaintBox1->Height=600;
}
//-------------------------------------------------------------------
void __fastcall TForm1::OnPaint(TObject *Sender)
{
long double PBW=PaintBox1->Width;
long double PBH=PaintBox1->Height;
PaintBox1->Canvas->Brush->Color=clWhite;
PaintBox1->Canvas->Rectangle(0,0,PBW,PBH);
PaintBox1->Canvas->Pen->Width=2;
PaintBox1->Canvas->Pen->Color=clBlack;
PaintBox1->Canvas->MoveTo(100,50);
PaintBox1->Canvas->LineTo(100,500);
PaintBox1->Canvas->LineTo(900,500);
}
還有Event的設定是不是有錯,可以幫我看一下嗎?
PaintBox1 OnPaint OnPaint
Button1 OnClick OnPaint
Form1 OnCreat FormResize
OnResize FormResize
這樣的狀態下執行之後不用按Button1圖就自己跑出來了
人家告訴我
"要在按Button1之後再畫圖的話,在OnPaint加上PaintBox1->Refresh()"
可是我不知道該怎麼加,加在哪裡
麻煩各位前被指導一下
謝謝 發表人 - taishyang 於 2003/12/19 16:53:53
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
piemomoka您好:
我想您的意思就是開始時PaintBox是空的(塗成白色),在按下button後才把
線畫出來...而且拉動SrollBox時能重繪所畫出的圖形
不知我是否會錯意
如果是我說的這樣,以下倒是個辦法:
使用旗標控制
class="code">
private: // User declarations
bool IsPaint;
cpp檔
TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {//旗標初始 IsPaint = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormResize(TObject *Sender) {//這段是您寫的 ScrollBox1->Height=Form1->ClientHeight*8/10; ScrollBox1->Width=Form1->ClientWidth*8/10; ScrollBox1->Top=(Form1->ClientHeight - ScrollBox1->Height)/4; ScrollBox1->Left=(Form1->ClientWidth - ScrollBox1->Width)/6; PaintBox1->Top=20; PaintBox1->Left=20; PaintBox1->Width=980; PaintBox1->Height=600; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) {//畫圖的事情交給button,畫完後旗標為真 PaintBox1->Canvas->Pen->Width=2; PaintBox1->Canvas->Pen->Color=clBlack; PaintBox1->Canvas->MoveTo(100,50); PaintBox1->Canvas->LineTo(100,500); PaintBox1->Canvas->LineTo(900,500); IsPaint = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1Paint(TObject *Sender) {//OnPaint事件畫背景,並於旗標為真時畫出圖形 long double PBW=PaintBox1->Width; long double PBH=PaintBox1->Height; PaintBox1->Canvas->Brush->Color=clWhite; PaintBox1->Canvas->Rectangle(0,0,PBW,PBH); if (IsPaint == true) { PaintBox1->Canvas->Pen->Width=2; PaintBox1->Canvas->Pen->Color=clBlack; PaintBox1->Canvas->MoveTo(100,50); PaintBox1->Canvas->LineTo(100,500); PaintBox1->Canvas->LineTo(900,500); } }這樣就能辦到了... 不過我覺得這不是正規做法啦,有作弊之嫌< > 還是請您參考看看< > 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~ |
piemomoka
一般會員 發表:8 回覆:10 積分:3 註冊:2003-12-18 發送簡訊給我 |
|
piemomoka
一般會員 發表:8 回覆:10 積分:3 註冊:2003-12-18 發送簡訊給我 |
|
piemomoka
一般會員 發表:8 回覆:10 積分:3 註冊:2003-12-18 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |