全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1291
推到 Plurk!
推到 Facebook!

快速大量移動元件

缺席
ttnnrsseb
中階會員


發表:30
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-10-06 11:55:14 IP:220.229.xxx.xxx 訂閱
 請教各位先進,
我用迴圈來改變大量的Label 或 Button 的Left 和 Top,處理上會頓很久。
不知有無大量移動元件又可以比較順暢的方式呢?
謝謝!
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-10-06 21:01:47 IP:219.84.xxx.xxx 訂閱
是處理很久?? 還是會閃爍.....

把 Form.DoubleBuffered 設為 True 試看看...





===================引 用 ttnnrsseb 文 章===================
請教各位先進,
我用迴圈來改變大量的Label 或 Button 的Left 和 Top,處理上會頓很久。
不知有無大量移動元件又可以比較順暢的方式呢?
謝謝!
ttnnrsseb
中階會員


發表:30
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-10-06 23:06:29 IP:180.218.xxx.xxx 訂閱
已有設DoubleBuffered了,是處理很久。

我要做複數選取元件,然後一起移動的功能。
原本是滑鼠移動就會跟著移動,但這樣會很頻繁的做處理。
後來改為滑鼠放開才計算移動,不過就算只移動一次,元件數如果100個還是會頓很久,才移動完成。



===================引 用 carstyc 文 章===================
是處理很久?? 還是會閃爍.....

把 Form.DoubleBuffered 設為 True 試看看...





===================引 用 ttnnrsseb 文 章===================
請教各位先進,
我用迴圈來改變大量的Label 或 Button 的Left 和 Top,處理上會頓很久。
不知有無大量移動元件又可以比較順暢的方式呢?
謝謝!
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-10-06 23:33:13 IP:219.84.xxx.xxx 訂閱
單移動 100 個元件的位置....理論上應該不會很久啊....

猜測1: 你的 P II or P III 電腦有可能會跑比較久 ....

猜測2: 你的迴圈中間還有處理別的事...是別的事耽誤到了...讓你以為是頓很久....

猜測3: 你每秒鐘幾十萬上下....所以等個 0.1 秒都覺得頓很久.....

你要不要把移動元件的那段程式碼貼出來看一下啊.....應該比較容易看到問題.....




===================引 用 ttnnrsseb 文 章===================
已有設DoubleBuffered了,是處理很久。

我要做複數選取元件,然後一起移動的功能。
原本是滑鼠移動就會跟著移動,但這樣會很頻繁的做處理。
後來改為滑鼠放開才計算移動,不過就算只移動一次,元件數如果100個還是會頓很久,才移動完成。



===================引 用 carstyc 文 章===================
是處理很久?? 還是會閃爍.....

把 Form.DoubleBuffered 設為 True 試看看...





===================引 用 ttnnrsseb 文 章===================
請教各位先進,
我用迴圈來改變大量的Label 或 Button 的Left 和 Top,處理上會頓很久。
不知有無大量移動元件又可以比較順暢的方式呢?
謝謝!
ttnnrsseb
中階會員


發表:30
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-10-07 10:01:19 IP:220.229.xxx.xxx 訂閱
 我寫個簡單的測試,200個元件大概1秒。
看來真的是有其它的判斷去影響了。

不過真的不能更快了嗎?
像Windows桌面的一堆icon在移動感覺超快的。

[code cpp]
unsigned long time1 = GetTickCount();
for(int i=0;i<100;i )
{
shape[i]->Left = 50;
shape[i]->Top = 50;

label[i]->Left = 50;
label[i]->Top = 50;
}
unsigned long time2 = GetTickCount();
Label1->Caption = IntToStr(time2 - time1);
[/code]
編輯記錄
ttnnrsseb 重新編輯於 2011-10-06 20:02:14, 註解 無‧
ttnnrsseb
中階會員


發表:30
回覆:77
積分:51
註冊:2004-11-22

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-10-07 10:51:34 IP:220.229.xxx.xxx 訂閱
 我發現問題所在了,程式都不變,
如果元件後面有個TImage當底圖且Align設為alClient,
原本的1秒竟然變19秒!!!
但設alNone就OK了!
編輯記錄
ttnnrsseb 重新編輯於 2011-10-06 20:58:17, 註解 無‧
系統時間:2017-12-16 15:22:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!