这几天不知道是不是人品出了问题,老是遇上一些小bug。 昨天在公司里写了一个有浏览网页代码的小程序,图方便,使用的是TEmbeddedwb控件,这个控件在delphi自带的TWebBrowser控件上又提供了一些选项和方法。 拿回家以后打开这个工程,在打开浏览页面窗口的时候却出错了:“Error Creating Form:'''''''' is not a valid floating point value”。这个窗口上没有其他控件,就只有TEmbeddedWB控件,看情况应该是打开窗口时装载该控件时出的错,而错误应该是发生在作字符转换到float型时出现的。 新建一个工程,放上一个TEmbeddedWB控件,灭有问题啊。关掉后再打开,问题重现了。 打开EmbeddedWB.pas单元,首先查找StrToFloat函数,呵,还好,只有两个地方用到,一看都是在GetPrintValues函数用的,函数内容如下: procedure TembeddedWB.GetPrintValues; var S: string; regWinRegistry: TRegistry;
function ReadMargin(key: string): Real; begin S := RegwinRegistry.ReadString(key); S := Stringreplace(S, '''' '''', '''''''', [rfReplaceAll]); if DecimalSeparator <> ''''.'''' then S := Stringreplace(S, ''''.'''', DecimalSeparator, []); if Printoptions.Measure = mMetric then result := StrtoFloat(S) * InchToMetric else result := StrtoFloat(S); end;
begin regWinRegistry := TRegistry.Create; try with regWinRegistry do begin RootKey := HKEY_CURRENT_USER; if OpenKey(''''Software\Microsoft\Internet Explorer\PageSetup'''', False) then begin PrintOptions.Header := Readstring(''''header''''); PrintOptions.Footer := ReadString(''''footer''''); PrintOptions.Margins.left := ReadMargin(''''margin_left''''); PrintOptions.Margins.right := ReadMargin(''''margin_right''''); PrintOptions.Margins.top := ReadMargin(''''margin_top''''); PrintOptions.Margins.bottom := ReadMargin(''''margin_bottom''''); end; end; finally regWinRegistry.Free; end; end;
这个函数是在注册表中去取IE的打印设置,打开注册表一看,果然没有''''margin_left''''这四个项,加上这四个字符串值,并赋上初值0。打开窗口。OK。高兴之余也不禁感慨,这个xp的操作系统装上以后还灭怎么摧残过,照理这四个键不是偶搞掉的,也就说系统装上就没有的,到底是microsoft人品有问题还是偶人品有问题已经不重要了,可是偶现在才明白,原来大师的程序也有bug啊,为什么不用StrToFloatDef函数哩? 今天在公司机器上一看,果然有这四个键,每个值为0.75。
小bug一个,仅作记录,以供有同样情形的同志参考。
|