麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Delphi > 正文

改良控件-Delphi自帶控件Bug的消除

2019-11-18 18:42:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
 

不管你想不相信Delphi自帶的組件里竟然存在著一個(gè)不容忽視的Bug。
開(kāi)始我一點(diǎn)都沒(méi)有想到是Delphi自帶的控件有Bug。害的我調(diào)試了很多遍,后來(lái)經(jīng)過(guò)跟蹤才發(fā)現(xiàn)的。
看到Samples頁(yè)上的TSpinEdit控件了嗎?他有MaxValue(最大值)、MinValue(最小值)的屬性。
Bug1:先把Value設(shè)為7,再把MaxValue設(shè)為5,MinValue設(shè)為0,Value竟然不會(huì)自動(dòng)改變!!!
Bug2:你設(shè)置一下MaxValue為-7,MinValue為7。看到了嗎?最大值竟然可以比最小值還小。
Bug3:當(dāng)最大值和最小值相等時(shí)Value竟然可以隨便設(shè)置...


我不明白這個(gè)作者當(dāng)時(shí)是如何設(shè)計(jì)的這么多的Bug,我不明白Borland為何采用這個(gè)控件。也許Borland的把關(guān)人員是位GG,而這位開(kāi)發(fā)這是位MM,于是......

言歸正轉(zhuǎn)讓我們打開(kāi)Delphi安裝目錄下/Source/Samples/Spin.Pas


找到PRoperty MaxValue: LongInt read FMaxValue write FMaxValue;
    property MinValue: LongInt read FMinValue write FMinValue;
Bug1、Bug2同時(shí)被找到!竟然連判斷都沒(méi)有,直接設(shè)置FMaxValue、FMinValue的值,也就是最大最小值竟然不受限制可以隨便設(shè)置。設(shè)置完最大最小值也不刷新Value,導(dǎo)致了Bug1的產(chǎn)生。
改為:
    property MaxValue: LongInt read FMaxValue write SetMaxValue;
    property MinValue: LongInt read FMinValue write SetMinValue;
在Private中添加兩個(gè)過(guò)程:
    procedure SetMaxValue(Value: LongInt);
    procedure SetMinValue(Value: LongInt);
內(nèi)容如下:

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函數(shù)嘛,讓我來(lái)看看。

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的原因此控件作者竟然沒(méi)有判斷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;



上一篇:不知您是笨蛋,還是我是笨蛋,關(guān)于Delphi的大Bug

下一篇:對(duì)Delphi控件的一點(diǎn)改良(三)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門(mén)圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 亚洲尻逼视频 | 国产美女的小嫩bbb图片 | 国产99久久精品一区二区300 | 亚洲精久久 | 91久久久久久久 | 激情宗合网| 一级黄色av电影 | av在线电影网站 | 日韩黄色片免费看 | 久草久视频 | 欧美精品 | 成人性生活视频在线观看 | 国产一区二区三区黄 | a视频在线播放 | 欧美在线a| 久久99国产精品视频 | 日本人乱人乱亲乱色视频观看 | 久久老司机精品视频 | 99热草| 亚洲最新黄色网址 | 国产日韩在线视频 | 欧美一级做一a做片性视频 日韩黄色片免费看 | 免费国产网站 | 亚洲国产精品高潮呻吟久久 | 91九色精品国产 | 亚洲国产美女视频 | 国产流白浆高潮在线观看 | 全黄性性激高免费视频 | 午夜天堂在线视频 | 成人富二代短视频 | 色97在线| 毛片免费观看日本中文 | 97中文字幕第一一一页 | 精品亚洲视频在线观看 | 亚洲视频欧美 | 免费午夜网站 | 久夜tv| 斗罗破苍穹在线观看免费完整观看 | 毛片在哪看 | jizzzxxxxhd| 天天干导航 |