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

關於ScrollBar上的position

答題得分者是:RaynorPao
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-25 15:09:30 IP:139.175.xxx.xxx 未訂閱
請問一下: 關於ScrollBar上的position, 假設min =0,max=8192、SmallChange=16 LargeChange=256, 但卻沒那屬性設定當我們用滑鼠去移動那捲軸時, 數值會增加多少? 因為我想當我用滑鼠移動捲軸時,它所增加的值 會跟SmallChange一樣,但結果此數值卻大了許多, 也就是SmallChange=16,下次=32,但此值卻在這範圍內。 有任何方法可改善嗎? 謝謝~
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-02-25 15:19:13 IP:203.73.xxx.xxx 未訂閱
引言: 請問一下: 關於ScrollBar上的position, 假設min =0,max=8192、SmallChange=16 LargeChange=256, 但卻沒那屬性設定當我們用滑鼠去移動那捲軸時, 數值會增加多少? 因為我想當我用滑鼠移動捲軸時,它所增加的值 會跟SmallChange一樣,但結果此數值卻大了許多, 也就是SmallChange=16,下次=32,但此值卻在這範圍內。 有任何方法可改善嗎? 謝謝~
frederick 你好:
(1)請問你說的 ScrollBar 是指某個 VCL 元件上的 ScrollBar 還是
   TScrollBar 這個元件呢??
(2)如果是指 TScrollBar 的話,不是就有你所說的屬性可以設定嗎??
(3)也可以用以下方式來驗證 ScrollBar 的 Position
   void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
         TScrollCode ScrollCode, int &ScrollPos)
   {
      Label1->Caption=IntToStr(ScrollPos);
   }
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/02/25 15:26:10
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-02-25 17:51:06 IP:139.175.xxx.xxx 未訂閱
引言:
frederick 你好:
(1)請問你說的 ScrollBar 是指某個 VCL 元件上的 ScrollBar 還是
   TScrollBar 這個元件呢??
(2)如果是指 TScrollBar 的話,不是就有你所說的屬性可以設定嗎??
(3)也可以用以下方式來驗證 ScrollBar 的 Position
   void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
         TScrollCode ScrollCode, int &ScrollPos)
   {
      Label1->Caption=IntToStr(ScrollPos);
   }
-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/02/25 15:26:10
您好: 我使用的是單獨TScrollBar,我之前也有使用此方法(ScrollBar1Scroll), 但這跟OnChange的結果是一樣的。 其值仍不是SmallChange,也就是16、32、48、64做變更。 我是用一個TRichEdit、TScrollBar,RichEdit固定大小,我有一陣列, 用TScrollBar來show出其範圍。 也就是說,我陣列大小是8192,但我RichEdit一次只要顯示256個, 所以我用TScrollBar來移動它的範圍。 您或許會問說為何不直接載入,用RichEdit本身的ScrollBar? 但我之前試過,用TMemo載入64K的檔案, 要一分多鐘,8K也會停一會,(有經過一些字串相加、轉換IntToHex...之類的運算)所以才不會想直接載入。RichEdit不會比較快吧~ 因此才會有此問題。 發表人 - frederick 於 2003/02/25 17:52:29 發表人 - frederick 於 2003/02/25 17:53:28
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-02-26 08:45:10 IP:203.73.xxx.xxx 未訂閱
引言: 我使用的是單獨TScrollBar,我之前也有使用此方法(ScrollBar1Scroll), 但這跟OnChange的結果是一樣的。 其值仍不是SmallChange,也就是16、32、48、64做變更。 我是用一個TRichEdit、TScrollBar,RichEdit固定大小,我有一陣列, 用TScrollBar來show出其範圍。 也就是說,我陣列大小是8192,但我RichEdit一次只要顯示256個, 所以我用TScrollBar來移動它的範圍。 您或許會問說為何不直接載入,用RichEdit本身的ScrollBar? 但我之前試過,用TMemo載入64K的檔案, 要一分多鐘,8K也會停一會,(有經過一些字串相加、轉換IntToHex...之類的運算)所以才不會想直接載入。RichEdit不會比較快吧~ 因此才會有此問題。
frederick 你好: 如果我沒有記錯的話
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-02-26 10:13:23 IP:139.175.xxx.xxx 未訂閱
引言: frederick 你好: 如果我沒有記錯的話 >< face="Verdana, Arial, Helvetica"> 您好: LargeChange看了說明好像是當我們改變了邊邊(軌道), 而不是中間那顆移動扭(thumb)本身。 如果我改變了邊邊或者上下的箭頭,ScrollBar會照者 SmallChange(箭頭)與LargeChange(軌道)作改變。 但當您用滑鼠拖曳了移動扭(thumb),無論是移動中的 ScrollPos或最終的Position,它所改變的值卻不是 SmallChange or LargeChange值的累加。 實在找不出有什麼屬性可以設定的。
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-02-26 10:30:19 IP:203.73.xxx.xxx 未訂閱
引言: LargeChange看了說明好像是當我們改變了邊邊(軌道), 而不是中間那顆移動扭(thumb)本身。 如果我改變了邊邊或者上下的箭頭,ScrollBar會照者 SmallChange(箭頭)與LargeChange(軌道)作改變。 但當您用滑鼠拖曳了移動扭(thumb),無論是移動中的 ScrollPos或最終的Position,它所改變的值卻不是 SmallChange or LargeChange值的累加。 實在找不出有什麼屬性可以設定的。
frederick 你好: 那如果是這樣呢??(不知道能不能符合你的需求??) < class="code"> void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos) { if(ScrollPos%ScrollBar1->SmallChange!=0) ScrollPos=(ScrollPos/ScrollBar1->SmallChange 1)*ScrollBar1->SmallChange; Label1->Caption=IntToStr(ScrollPos); } -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-02-27 11:39:19 IP:139.175.xxx.xxx 未訂閱
引言: frederick 你好: 那如果是這樣呢??(不知道能不能符合你的需求??) < class="code"> void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender, TScrollCode ScrollCode, int &ScrollPos) { if(ScrollPos%ScrollBar1->SmallChange!=0) ScrollPos=(ScrollPos/ScrollBar1->SmallChange 1)*ScrollBar1->SmallChange; Label1->Caption=IntToStr(ScrollPos); } -- Enjoy Researching & Developing --
您好: 經試了結果,您的code已經把變動範圍縮小了許多。 我之前也是有試過取餘數的方式,但是用position。 我想這是它(thumb)的問題。 因當移動時,他的變化就不是線性(倍數成長), 有時會跳個兩倍(指SmallChange的值)。 但這取餘數的值大一點(連同相關變數也改) ,如256,(變成移動thumb幾格後才會有變化),他又粉線性。 另一方面,我想這跟ScrollBar的外型長度、MAX vaule有關。 相同ScrollBar、外型長度一樣: 1. MAX=1024 2. MAX=200 SmallChange都設1,如果用thumb去移動,結果MAX=200的ScrollBar 會依照SmallChange作遞增。但如果MAX=1024的ScrollBar, 卻不會會依照SmallChange作遞增(所遞增的值不是SmallChange的倍數)。 我想一般沒人去care這麼小的變化吧。 不過還是謝謝您!!! ^_^
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-02-27 11:51:27 IP:203.73.xxx.xxx 未訂閱
引言: 經試了結果,您的code已經把變動範圍縮小了許多。 我之前也是有試過取餘數的方式,但是用position。 我想這是它(thumb)的問題。 因當移動時,他的變化就不是線性(倍數成長), 有時會跳個兩倍(指SmallChange的值)。 但這取餘數的值大一點(連同相關變數也改) ,如256,(變成移動thumb幾格後才會有變化),他又粉線性。 另一方面,我想這跟ScrollBar的外型長度、MAX vaule有關。 相同ScrollBar、外型長度一樣: 1. MAX=1024 2. MAX=200 SmallChange都設1,如果用thumb去移動,結果MAX=200的ScrollBar 會依照SmallChange作遞增。但如果MAX=1024的ScrollBar, 卻不會會依照SmallChange作遞增(所遞增的值不是SmallChange的倍數)。 我想一般沒人去care這麼小的變化吧。 不過還是謝謝您!!! ^_^
frederick 你好:
(1)如果把 LargeChange 設為 SmallChange 的整數倍數
(2)Min=0, Max 也設為 SmallChange 的整數倍數
(3)Position 一開始的初始值設為 0
(4)配合以上程式碼的控制,應該可以在執行期控制 Position 的數值是
   SmallChange 的整數倍數吧
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
frederick
中階會員


發表:101
回覆:108
積分:66
註冊:2002-08-01

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-02-27 19:49:41 IP:139.175.xxx.xxx 未訂閱
引言:
frederick 你好:
(1)如果把 LargeChange 設為 SmallChange 的整數倍數
(2)Min=0, Max 也設為 SmallChange 的整數倍數
(3)Position 一開始的初始值設為 0
(4)配合以上程式碼的控制,應該可以在執行期控制 Position 的數值是
   SmallChange 的整數倍數吧
    -- >< face="Verdana, Arial, Helvetica">
哈~我想可能是我的語意不清,讓您誤解了。
經取餘數後,再乘上某一數值,結果當然會是整數倍。
我的意思是:假設SmallChange=16
當我們用上下鍵:
它變化是0、16、32、64、80、96、112.....
用滑鼠移動thumb:
它的變化或許是0、16、64、96、112...    同樣是16倍數阿 ^_____________^    而我是希望當用滑鼠移動thumb時所變化的值跟用上下鍵一樣。    結果如上篇文章說,如果把ScrollBar長度再拉長一點,就沒問題了。
但總不能太長,所以仍會有此問題。
所以我想這跟元件長度、滑鼠也有關係吧~     
        
系統時間:2024-05-03 13:03:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!