最近在使用Samples頁中的SpinEdit控件時,發現SpinEdit的最大值(MaxValue)和最小值(MinValue)的處理有漏洞。當最大值和最小值相等且不為零時,設置形同虛設;當最大值小於最小值時,SpinEdit的取值為最大值和最小值。查看Spin.pas時發現,SpinEdit的CheckValue函數如下:
function TSpinEdit.CheckValue (NewValue: LongInt): LongInt;
begin
Result := NewValue;
if (FMaxValue <> FMinValue) then
begin
if NewValue < FMinValue then
Result := FMinValue
else if NewValue > FMaxValue then
Result := FMaxValue;
end;
end;
可見沒有對MaxValue = MinValue 且MinValue <> 0 及 MaxValue < MinValue 進行處理。所以在使用SpinEdit控件時應該在程序中對上述兩種情況進行必要的處理。
我在發現這個問題的之前花費了不少時間調試程序,以為是代碼的問題。結果發現是個BUG。這個問題可能早就有人發現並提出來了,只不過我沒有看到而已。不過我還是把它貼出來,希望其他朋友不要在這個問題上浪費時間。呵呵,其實私底下還是想賺分的:)。