改良控制元件-Delphi自帶控制元件Bug的消除 (轉)
不管你想不相信自帶的裡竟然存在著一個不容忽視的。
開始我一點都沒有想到是Delphi自帶的有Bug。害的我了很多遍,後來經過跟蹤才發現的。
看到Samples頁上的TSpinEdit控制元件了嗎?他有MaxValue(最大值)、MinValue(最小值)的屬性。
Bug1:先把Value設為7,再把MaxValue設為5,MinValue設為0,Value竟然不會自動改變!!!
Bug2:你設定一下MaxValue為-7,MinValue為7。看到了嗎?最大值竟然可以比最小值還小。
Bug3:當最大值和最小值相等時Value竟然可以隨便設定...
我不明白這個作者當時是如何設計的這麼多的Bug,我不明白Borland為何採用這個控制元件。也許Borland的把關人員是位GG,而這位開發這是位MM,於是......
言歸正轉讓我們開啟Delphi目錄下SamplesSpin.Pas
找到property MaxValue: LongInt read FMaxValue write FMaxValue;
property MinValue: LongInt read FMinValue write FMinValue;
Bug1、Bug2同時被找到!竟然連判斷都沒有,直接設定FMaxValue、FMinValue的值,也就是最大最小值竟然不受限制可以隨便設定。設定完最大最小值也不重新整理Value,導致了Bug1的產生。
改為:
property MaxValue: LongInt read FMaxValue write SetMaxValue;
property MinValue: LongInt read FMinValue write SetMinValue;
在Private中新增兩個過程:
procedure SetMaxValue(Value: LongInt);
procedure SetMinValue(Value: LongInt);
內容如下:
procedure TSpinEdit.SetMaxValue(Value: LongInt);
begin
if Value >= FMinValue then
FMaxValue := Value;
SetValue(Self.Value);
end;
procedure TSpinEdit.SetMinValue(Value: LongInt);
begin
if Value <= FMaxValue then
FMinValue := Value;
SetValue(Self.Value);
end;
它的Private中明明有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;
找到了Bug3的原因此控制元件作者竟然沒有判斷FMaxValue、FMinValue相等的情況
更改為:
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
else
begin
Result:=FMaxValue;
end;
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 對Delphi控制元件的一點改良 (轉)控制元件
- 對Delphi控制元件的一點改良(二) (轉)控制元件
- 對Delphi控制元件的一點改良(三) (轉)控制元件
- 在Delphi中使用IP控制元件 (轉)控制元件
- 在delphi中使用flash控制元件 (轉)控制元件
- delphi 控制元件的拿來主義(一) (轉)控制元件
- 相當於delphi的日曆控制元件 (轉)控制元件
- Delphi控制元件的拿來主義(二) (轉)控制元件
- Delphi控制元件的拿來主義(三) (轉)控制元件
- 在Delphi中編寫控制元件的基本方法 (轉)控制元件
- 在Delphi中編寫控制元件的基本方法(1) (轉)控制元件
- AOP - 消除控制元件的點選抖動控制元件
- 原來的控制元件delphi7裡何處尋? (轉)控制元件
- delphi 控制元件 LssCalendar V2.0 (支援農曆的月曆控制元件)控制元件
- Vb中控制元件的自動排列 (轉)控制元件
- 實現控制元件的移動、改變大小(DELPHI實現) (轉)控制元件
- Delphi使用VB編寫的ActiveX控制元件全攻略 (轉)控制元件
- Delphi皮膚控制元件去NAG提示控制元件
- jQuery 樹形控制元件 TreeView 的 BugjQuery控制元件View
- Delphi 開發ActiveX控制元件(非ActiveForm)控制元件ORM
- 一個delphi控制元件的破解 (12千字)控制元件
- 控制元件 (轉)控制元件
- DELPHI也可以實現控制元件陣列,用定義陣列變數實現控制元件陣列 (轉)控制元件陣列變數
- delphi 常用控制元件屬性設定說明控制元件
- C# WinForm控制元件及其子控制元件轉成圖片(支援帶捲軸的長截圖)C#ORM控制元件
- Delphi控制元件EasyTable的去除NagScreen (4千字)控制元件
- 【組合控制元件】android自定義控制元件之帶文字的ImageView控制元件AndroidView
- 仿餓了麼加入購物車旋轉控制元件 – 自帶閃轉騰挪動畫 的按鈕控制元件動畫
- 仿餓了麼加入購物車旋轉控制元件 - 自帶閃轉騰挪動畫 的按鈕控制元件動畫
- 淺談控制元件(元件)製作方法一(附帶一delphi匯出資料到Excel的元件例項)(原創) (轉)控制元件Excel
- Delphi 完全時尚手冊之 Visual Style 篇---使非標準 Win32 控制元件或自畫控制元件也具有 Windows XP 的介面風格 (轉)Win32控制元件Windows
- 自定義控制元件中的控制元件呼叫引用控制元件的頁面裡的函式 (轉)控制元件函式
- 控制元件treeview的使用 (轉)控制元件View
- 用delphi製作無介面的activex控制元件控制元件
- IE CSS Bug系列:表單控制元件雙邊距BUGCSS控制元件
- Jquery 自動完成控制元件jQuery控制元件
- 帶農曆日曆的DatePicker控制元件!Xamarin控制元件開發小記控制元件
- 工具提示控制元件(轉)控制元件