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

自製TrackBar元件,移動slider時畫面閃動該何如處理.?

缺席
trumpet
一般會員


發表:6
回覆:8
積分:2
註冊:2002-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-18 22:59:43 IP:61.228.xxx.xxx 未訂閱
各位大大好: 小弟在自製一個有圖形能力的TrackBar元件.. 繼承自Tcustomcontrol 使用了三張圖.. 分別表示 slider 和 slider的上方部份及下方部份.. 我把繪圖的工作放在 paint()中..當改變 position時便執行Invalivade(); 以重繪圖.. 在 .h 檔中 加入 DYNAMIC void _-fastcall MouseMove(....... 來作為用mouse移動slider事件的處理.. 當在程式中使用這個VCL時.. 若連續改變position時.. VCL圖面不會有閃動的情形 , 但是若用mouse拖slider移動時郤閃得很嚴重... 先試著把繪圖的部份移到 mousemove 的function 內,但是沒有改善 也有試過攔 WM_MOUSEMOVE 取代 mousemove 但是結果一樣.. DoubleBuffer也設了... Paint()中 也是先設了一個bitmap將圖都畫好 , 再畫在上VCL的Canvas上.. 還有 reasebkg 的message 我也拿掉了..仍無法解決// 不知有那位大大知道,可以分享如何能克服這個閃動的問題..謝謝
trumpet
一般會員


發表:6
回覆:8
積分:2
註冊:2002-12-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-28 23:52:02 IP:61.228.xxx.xxx 未訂閱
小弟已自行解決了,將心得分享一下.. 1.寫OnChange的envent時,用攔WM_MOUSEMOVE的方法,會比改寫TCustomControl的OnMousemove的效率要高很多.. 2.當OnChange時及Position值改變時的重繪動作,最好是自行處理..不會再呼叫Invalidate()或是Paint(),可以增加重繪時的效率... 小弟之前是在 TCustomcontrol上再放上一個Image當作Slider,改寫image的MouseDown, mouseup,及mousemove當作onchage的event,這樣只要移動image的TOP就有TrackBar效果.但是CPU的使用率郤高得很60~70%...(雖然在重繪時不會閃動).. 後來改攔WM_MOUSEMOUSE,... 直接算MytrackBar中Slider的位置 . 再直接繪圖..,就改善了很多( CPU 11~15% )..而且很順..在此提供給大家參考..也請大家多多指教 ^_^ /"
系統時間:2024-05-14 17:35:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!