计算机二级Delphi控件:WebSnap控件组简介
来源:优易学  2011-6-5 17:05:20   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  SetStrings和GetStrings方法是为了控制TstringsValuesList的Strings属性。如果你研究一下GetStrings方法,你将发现它只有当strings没有准备好并且组件没有被加载的时候才调用PrepareStrings方法
  理想的情况是这:当首次需要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属性的值设为迭代的值。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训