TImage canvas 在視窗最大化時會 lag? |
尚未結案
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
附件為測試 project 檔,以下說明
程式按鈕後會有一個 timer 在對 一個 TImage 做移動 另一個TImage在滑鼠按下並拖拉時,在畫布上畫出路徑 當視窗沒有最大化時,一切看似正常 當視窗最大化時,為什麼當畫出路徑時,另一個做移動的TImage 竟然會暫停 我試過直接畫在 Form1 上,結果一樣 也試過移動的圖,直接用畫清掉、畫清掉,結果一樣 不知哪位前輩有愛迪爾 感恩~ [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- void DrawOnImage( TImage *TargetImage, int Mode , TRect DrawRect ){ switch(Mode){ case 0: TargetImage->Canvas->Pen->Color = clBlue; break; case 1: TargetImage->Canvas->Pen->Color = clWhite; TargetImage->Canvas->Brush->Color = clWhite; TargetImage->Canvas->Rectangle( DrawRect ); break; case 2: TargetImage->Canvas->Pen->Color = clGreen; TargetImage->Canvas->Rectangle( DrawRect ); break; } } __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Image2->Width = Form1->ClientWidth; Image2->Height = Form1->ClientHeight; Form1->DoubleBuffered = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Image2MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Image2->Tag = 1; TPoint CurrentPoint; GetCursorPos( &CurrentPoint ); Image2->Canvas->PenPos = ScreenToClient( CurrentPoint ); } //--------------------------------------------------------------------------- void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(Image2->Tag == 1){ Image2->Canvas->LineTo(X,Y); Form1->Caption = ( IntToStr(X) ", " IntToStr(Y) ); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Image2MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Image2->Tag = 0; } //--------------------------------------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { if( Image1->Left > 300 ){ Image1->Left = 5; }else{ Image1->Left = 5; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Timer1->Enabled = false; Image1->Left = 5; Image1->Top = 20; if( RadioGroup1->ItemIndex == 0 ) Image1->Picture->LoadFromFile("import.bmp"); else Image1->Picture->LoadFromFile("import2.bmp"); Image2->Width = Form1->ClientWidth; Image2->Height = Form1->ClientHeight; Image2->Canvas->Pen->Width = 3; Image2->BringToFront(); Image2->Tag = 0; TRect DrawRect; DrawRect = TRect( 0, 0, Image2->Width, Image2->Height ); DrawOnImage( Image2, 1 , DrawRect); DrawRect = TRect( Image1->Left -1, Image1->Top -1, Image2->Width -3, Image1->Top Image1->Height 1 ); DrawOnImage( Image2, 2 , DrawRect); DrawRect = TRect( 0, 0, Image2->Width, Image2->Height ); DrawOnImage( Image2, 0 , DrawRect); Timer1->Enabled = true; } //--------------------------------------------------------------------------- [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
boss.tw
高階會員 發表:15 回覆:109 積分:194 註冊:2005-05-17 發送簡訊給我 |
感謝 taishyang 回覆
我試了將 Timer 改為 thread 的方式 原本做移動的TImage 會暫停,變成會有慢下來的感覺 雖然解決了停下來的問題 不過就算我把 thread 的 優先權調到最高,還是會有 lag 的感覺 不知道有沒有前輩遇過此問題 [code cpp] __fastcall thDraw::thDraw(bool CreateSuspended, int Direction) : TThread(CreateSuspended) { this->FreeOnTerminate; pvDirection = Direction; //this->Priority = tpTimeCritical; } //--------------------------------------------------------------------------- void __fastcall thDraw::Execute() { while( Form1->Image1->Left < Form1->ClientWidth -5 ){ switch( pvDirection ){ case 0: Form1->Image1->Left = 3; break; case 1: Form1->Image1->Top = 3; Form1->Image1->Left = 3; break; } } Form1->Image1->Top = 20; Form1->Image1->Left = 5; this->Terminate(); } //--------------------------------------------------------------------------- [/code] |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |