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

TUpDown的上下ChangingEx使用注意事項

 
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-01 14:56:30 IP:210.85.xxx.xxx 未訂閱
[前提]: 那天和版友turboted在討論一個用TUpDown來改變TEdit的問題 所有的問題都解決了, 但沒事按了一按, 居然發現一個很奇怪的現象! 好像只要按Up來往上加, 再按Down往回減時, 居然到了原先的初始值就不動了? 怎麼會這麼神奇, 好比說TEdit的值是0x00, 然後就一直加, 加到0x10都沒問題 這時, 再按Down一直減, 減到0x00後, 就不能讓值減為0xFF了 於是乎, 改個初始值, 比如說0x25, 玩一下, 加到0x27, 沒問題 再往下減......到了0x25, 居然真的又不能往下減了.     [思索]: 開始檢查程式 --> 往上加和開下減的function是沒問題的 那這問題可能會在那裡呢? 於是開始用BCB的Debug功能, 單步執行, 而且把所有的變數一起dump出來看. 在這個好用的元件裡! 唯一會知道User是按了Up , 還是Down 的Event 只有ChangingEx這一個, 當然, 我們的DoUP()和DoDown也是放在這裡作判斷的 而這個procedure很奇特的是, 除了一進來會, VCL會傳TObjec *Sender外  還有AllowChange, NewValue和Direction. 當然, 會用這個Event就是因為Direction會傳三個值:updUp, updDown,updNone 由這個來判斷User現在是按了Up or Down, 可是心中一定會有個疑問! 怎麼會有None? 不是只有Up和Down兩個按鈕嗎? 好吧! 先不管, 開始Debuger    [追蹤]: 1. 我發現由我們自己宣告的變數, 一切正常, 所以DoUp()和DoDown()是沒問題的 2. 當程式不能往下減時, VCL老是把NewValue傳-1給我們, 而且這時Direction一定是傳updNone, 怎麼會這樣呢? 明明按了Down, 怎麼會傳updNone呢?    [問題]: 於是抓到方向了, 現在的問題不是我們程式本身的問題, 而是跟VCL有關. 看了看這個TUpDown的所有可設變數! 疑? 有Max, Min, Position, 這是作什麼 用的呀? Default:Max=100, Mix=0, Position=0, Increment=1. 於是玩了一下Postiont, 喔! 原來這四個是有關連的. Max:是說內定值的上限(有點像ScrollBar的意味) Min:是說內定值的下限 Position:內定值的起始位置(就像ScrollBar要定在那個位置) Increment: 每次按Up/Down的增減量 終於抓到root cause, 原來是Position=0, 按Up-->Position=1 ChangingEx檢查有沒有超過Max? 沒有的話Direction=updUP 如果往下減, Position-=1, VCL檢查Position有沒有小於Min沒有的話Direction=updDown.  如果Position大於Max or 小於Min, 會讓Direction=updNone (終於出現啦) 至於Position在VCL加/減完, 會由NewValue傳到ChangingEx    [解法] 雖然找到原因, 但是我們還是要想辦法讓Up/Down正常運作才對 再找一下. 發現有個Wrap, 好奇怪的東東, 設個true, 玩玩看 哇........往上再往下減看似沒問題耶! 但是會停一次! 1. 為什麼設了這個就可以一直往下減?    看了一下Help又實作了一下, 才知道, 原來這個屬性設true後    每次你的Position如果>Max or Max or Max or
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-02 00:59:34 IP:61.216.xxx.xxx 未訂閱
為了這個問題,我和lcsboy 兄兩個人,和我女朋友 在咖啡館坐到AM:00:05 我眼看服務生真想衝過來了...哈 還好還是OK了...真是感謝..lcsboy兄的友情支援
系統時間:2024-03-29 16:53:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!