2013-08-06 58 views
2

我有一個應用程序將使用測量,特別是下至1/16英寸。我真的很想爲最終用戶輸入一個值,包括小數部分,例如3 7/16。我意識到我可以要求用戶輸入十進制值(即3.1875),但我真的很喜歡更好的方式。有誰知道一個下拉或旋轉控制,這使得這個很容易進入? (理想的是DB版本控制的。)如何在Delphi中輸入分數?

+0

獲取用戶輸入文本,然後解析它。 GUI控件將是可怕的使用。 –

+0

或...如果您允許的唯一分數可以表示爲1/16的倍數,那麼您只需要提示用戶分子。一個下拉列表或旋轉控制就可以。您可以使用分子的一個控件和分母的一個控件來允許更大範圍的預設分數,可以並排顯示一個「/」,或者一個在另一個上面,並在畫布之間繪製一條線他們(也許是一個高度爲1或2像素的矩形TShape)。 – Sam

+0

你想用這些分數做什麼?我認爲你應該考慮允許用戶輸入自由格式的表達式,例如'3/4「',然後可以使用你設計的類來保存這些值,這些類可以存儲用戶的輸入,然後處理這些值。我將其稱爲'TDimension',它將原始字符串輸入值和它的十進制值作爲字段輸入到內部 –

回答

7

你可以做簡單的

function FractionToFloat(const S: string): real; 
var 
    BarPos: integer; 
    numStr, denomStr: string; 
    num, denom: real; 
begin 
    BarPos := Pos('/', S); 
    if BarPos = 0 then 
    Exit(StrToFloat(S)); 
    numStr := Trim(Copy(S, 1, BarPos - 1)); 
    denomStr := Trim(Copy(S, BarPos + 1, Length(S))); 
    num := StrToFloat(numStr); 
    denom := StrToFloat(denomStr); 
    result := num/denom; 
end; 

這將接受3/7-4/91.5 examplified形式的輸入。

爲了允許一個整數部分,添加

function FullFractionToFloat(S: string): real; 
var 
    SpPos: integer; 
    intStr: string; 
    frStr: string; 
    int: real; 
    fr: real; 
begin 
    S := Trim(S); 
    SpPos := Pos(' ', S); 
    if SpPos = 0 then 
    Exit(FractionToFloat(S)); 
    intStr := Trim(Copy(S, 1, SpPos - 1)); 
    frStr := Trim(Copy(S, SpPos + 1, Length(S))); 
    int := StrToFloat(intStr); 
    fr := FractionToFloat(frStr); 
    result := int + fr; 
end; 

這將在另外接受1 1/2 examplified形式的輸入。

+2

並擴展此選項以在前面輸入整數(您可以通過存在空格字符) - 只需在一個TEdit中輸入完整的數字是用戶*和*允許他們在同一個控件中使用小數的最簡單方法,如果他們寧願輸入3.5而不是3 1/2 –

+0

我想我可能會傾向於在這裏使用JCL表達式求值器,按照1月所建議的調整 –

+0

使用真正的表達式求值器的想法是好的,然後你可以輸入'4.5 +(10.2 + 3.83)* 3.67'等東西 –

0

我恰好在很多年前寫了一個控件,目前我正在完成一個包含度量轉換的更新。它允許用戶和開發人員在右鍵單擊或在設計時設置模式之間在英尺,英寸,英尺,毫米,釐米,米之間切換。它還處理四捨五入到最接近的第十六,第三十二或你需要的公制。查看大多數delphi組件網站,例如torry.net或我的舊網站http://www.enhancedtechsolutions.com/delphi/ 我希望在一天或2天內完成新版本併發布。

忘了提及最重要的部分:它叫TMaskFtInch

+0

這是否也有DB啓用版本? – user1009073

+0

@ user1009073您可以自己做那部分? –

+0

不是,但正如大衛所說,它不會太困難你可以通過代碼來管理I/O,而不僅僅是一個控制鏈接。下載包括一個演示exe文件,以便您可以檢查出當前的功能,而無需安裝任何東西。 –