TEmbeddedwb的一个小bug

2008-04-09 04:23:29来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

这几天不知道是不是人品出了问题,老是遇上一些小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一个,仅作记录,以供有同样情形的同志参考。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Calling conventions(调用规则)

下一篇:Jujube项目架构图