WebSnap 控件组简介(2)
2008-04-09 04:28:51来源:互联网 阅读 ()
理想的情况是这:当首次需要strings的时候,PrepareStrings应该被调用,当请求被停用的时候,ImplNotifyDeactivate应该将StringsPrepared设回为否,所以当再次请求时PrepareStrings将再次被调用,然而,事实却不是这样,理由如下:
function TCustomStringsValuesList.ImplGetListName: string;
begin
if FIndex < FStrings.Count then
Result := FStrings.Names[FIndex]
else
Result := '''''''';
end;
function TCustomStringsValuesList.ImplGetListValue: Variant;
var
S: string;
begin
if FIndex < FStrings.Count then
begin
S := FStrings.Names[FIndex];
if S <> '''''''' then
Result := FStrings.Values[S]
else
Result := FStrings[FIndex]
end
else
Result := Unassigned;
end;
function TCustomStringsValuesList.ImplNextIteration(
var OwnerData: Pointer): Boolean;
begin
Inc(FIndex);
Result := FIndex < FStrings.Count;
end;
当脚本需要使用 strings的时候,代码访问的是内部Fstrings变量,从而“骗过”了GetStrings方法!唉!为了解决这个问题,只需将所有涉及Strings的方法中对Fstrings的首次调用由Fstrings改为Strings就可以了。
增加CurrentIteration属性CurrentIteration属性的作用也许你也能猜出来,在Delphi的代码中,你的页面脚本所在位置就是它的current iteration,这个功能很容易实现,在迭代的实现方法中,分配返回的字符串:
function TudStringsValuesList.ImplStartIterator(var OwnerData: Pointer):Boolean;
begin
FIndex := 0;
Result := FIndex < Strings.Count;
if Result then
FCurrentIteration := Strings[FIndex];
end;
function TudStringsValuesList.ImplNextIteration(var OwnerData:Pointer): Boolean;
begin
Inc(FIndex);
Result := FIndex < Strings.Count;
if Result then
FCurrentIteration := Strings[FIndex];
end;
如果迭代成功,结果为真,如果结果为真,我们将CurrentIteration属性的值设为迭代的值。
结束语
WebSnap就象一个万维网上的机器,如果你有机会,请打开它的引擎盖,看看博览的做工是多么出众,如果你看到需要改进的地方,请动手完善我们的WebSnap,我想这也正是设立这个社区的目的吧!
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
