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

請問TupDown元件的整數範圍問題

尚未結案
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-25 20:36:44 IP:211.74.xxx.xxx 未訂閱
TupDown目前使用上發現它的範圍在-32768~32767 但我的程式裡需要突破這個限制 所以程式裡的相關變數己宣告成__int32 不知TupDown有沒有辦法突破這個限制 例如可以讓使用者選-50000~50000或更大範圍 該如何設定??? 謝謝大家
海星
高階會員


發表:41
回覆:217
積分:106
註冊:2003-01-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-25 22:07:19 IP:59.104.xxx.xxx 未訂閱
看來 TupDown 的範圍數值為 __int16 而已,山不轉路轉, 那你就改用 TScrollBar 元件來取代 TupDown 就好了, 他就能符合你的需求到 50000了。
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-26 02:00:44 IP:61.64.xxx.xxx 未訂閱
引言: TupDown目前使用上發現它的範圍在-32768~32767 但我的程式裡需要突破這個限制 所以程式裡的相關變數己宣告成__int32 不知TupDown有沒有辦法突破這個限制 例如可以讓使用者選-50000~50000或更大範圍 該如何設定??? 謝謝大家
因為TUpDown的的Max, Min, Position均宣告為short, 所以值的範圍只能在-32768~32767之間, 若想要超過此範圍除了自己在寫一個元件外(繼承自TUpDown), 還有另一種方法, 就是自行處理TUpDown的Min, Max, Position, 純粹把TUpDown看做是只能點選上下鍵功能的元件. 怎麼做呢? 下面給你一個範例感受一下... < class="code"> //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; // 使用int範圍可從 -2147483648 ~ 2147483647 int iCurPos = 0; //目前TUpDown的位置 int iMin = -50000; // TUpDown的最小值 int iMax = 50000; // TUpDown的最大值 //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // 顯示目前的TUpDown的值 ShowMessage(IntToStr(iCurPos)); } //--------------------------------------------------------------------------- // 實作TUpDown的 OnChangingEx // 目的只是要知道使用者是按上還是按下. void __fastcall TForm1::UpDown1ChangingEx(TObject *Sender, bool &AllowChange, short NewValue, TUpDownDirection Direction) { // 若按上為遞增, 否則為遞減 if (Direction == updUp) { iCurPos ; // 檢查是否超過最大值 if (iCurPos > iMax) iCurPos = iMax; } else { iCurPos--; // 檢查是否小於最小值 if (iCurPos < iMin) iCurPos = iMin; } } //---------------------------------------------------------------------------
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-26 22:41:04 IP:203.67.xxx.xxx 未訂閱
引言: 看來 TupDown 的範圍數值為 __int16 而已,山不轉路轉, 那你就改用 TScrollBar 元件來取代 TupDown 就好了, 他就能符合你的需求到 50000了。
^^..其實後來我選擇使用海星的方法,TScrollBar喔!!
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-10 18:36:10 IP:211.72.xxx.xxx 未訂閱
引言:
引言: TupDown目前使用上發現它的範圍在-32768~32767 但我的程式裡需要突破這個限制 所以程式裡的相關變數己宣告成__int32 不知TupDown有沒有辦法突破這個限制 例如可以讓使用者選-50000~50000或更大範圍 該如何設定??? 謝謝大家
因為TUpDown的的Max, Min, Position均宣告為short, 所以值的範圍只能在-32768~32767之間, 若想要超過此範圍除了自己在寫一個元件外(繼承自TUpDown), 還有另一種方法, 就是自行處理TUpDown的Min, Max, Position, 純粹把TUpDown看做是只能點選上下鍵功能的元件. 怎麼做呢? 下面給你一個範例感受一下... < class="code"> //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; // 使用int範圍可從 -2147483648 ~ 2147483647 int iCurPos = 0; //目前TUpDown的位置 int iMin = -50000; // TUpDown的最小值 int iMax = 50000; // TUpDown的最大值 //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // 顯示目前的TUpDown的值 ShowMessage(IntToStr(iCurPos)); } //--------------------------------------------------------------------------- // 實作TUpDown的 OnChangingEx // 目的只是要知道使用者是按上還是按下. void __fastcall TForm1::UpDown1ChangingEx(TObject *Sender, bool &AllowChange, short NewValue, TUpDownDirection Direction) { // 若按上為遞增, 否則為遞減 if (Direction == updUp) { iCurPos ; // 檢查是否超過最大值 if (iCurPos > iMax) iCurPos = iMax; } else { iCurPos--; // 檢查是否小於最小值 if (iCurPos < iMin) iCurPos = iMin; } } //---------------------------------------------------------------------------
Zard 您好 你的Sample Code 依然受限於Max Min 我把Max 設成10做測試 當你position等於10時 Direction 會變成None本來按上反而變成了減 ......是否有其他方法可以達到 當作上下的按鈕鍵功能?? Ldd
ldd
一般會員


發表:12
回覆:62
積分:19
註冊:2004-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-10 19:12:56 IP:211.72.xxx.xxx 未訂閱
引言:
引言:
引言: TupDown目前使用上發現它的範圍在-32768~32767 但我的程式裡需要突破這個限制 所以程式裡的相關變數己宣告成__int32 不知TupDown有沒有辦法突破這個限制 例如可以讓使用者選-50000~50000或更大範圍 該如何設定??? 謝謝大家
因為TUpDown的的Max, Min, Position均宣告為short, 所以值的範圍只能在-32768~32767之間, 若想要超過此範圍除了自己在寫一個元件外(繼承自TUpDown), 還有另一種方法, 就是自行處理TUpDown的Min, Max, Position, 純粹把TUpDown看做是只能點選上下鍵功能的元件. 怎麼做呢? 下面給你一個範例感受一下... < class="code"> //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; // 使用int範圍可從 -2147483648 ~ 2147483647 int iCurPos = 0; //目前TUpDown的位置 int iMin = -50000; // TUpDown的最小值 int iMax = 50000; // TUpDown的最大值 //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // 顯示目前的TUpDown的值 ShowMessage(IntToStr(iCurPos)); } //--------------------------------------------------------------------------- // 實作TUpDown的 OnChangingEx // 目的只是要知道使用者是按上還是按下. void __fastcall TForm1::UpDown1ChangingEx(TObject *Sender, bool &AllowChange, short NewValue, TUpDownDirection Direction) { // 若按上為遞增, 否則為遞減 if (Direction == updUp) { iCurPos ; // 檢查是否超過最大值 if (iCurPos > iMax) iCurPos = iMax; } else { iCurPos--; // 檢查是否小於最小值 if (iCurPos < iMin) iCurPos = iMin; } } //---------------------------------------------------------------------------
Zard 您好 你的Sample Code 依然受限於Max Min 我把Max 設成10做測試 當你position等於10時 Direction 會變成None本來按上反而變成了減 ......是否有其他方法可以達到 當作上下的按鈕鍵功能?? Ldd
Sorry 已經找到解法了 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20942&ARCHIVE=
系統時間:2024-04-27 18:36:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!