Delphi为属性使用变量

时间:2014-05-12 12:28:44

标签: delphi

我在获取属性中的变量时遇到了一些问题。

这是原始的工作代码:

// Note: "b1" is the name of the component in this case a TChromium component.

MainForm.b1.Browser.MainFrame.ExecuteJavaScript

我需要插入变量而不是名称,所以我这样做了:

MainForm.'+myVariable+'.Browser.MainFrame.ExecuteJavaScript

上面给出了一个错误:

  

[dcc32错误] main.pas(225):E2029预期标识符但发现字符串常量

我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果你可以有多个实例,并且它们可以增长,而是将它们保存在列表中。

TChromium(FList.Items[I]).Browser.MainFrame.ExecuteJavaScript;

这意味着您还需要在运行时添加它们:

FList.Add(TChromium.Create(...));

您需要考虑如何选择在不同情况下使用的实例。例如。您可以拥有一个页面控件,其中每个页面都链接到特定的TChromium实例。

答案 1 :(得分:1)

这是我不时使用的功能。这将返回树中所有子组件的平面列表:

Function GetAllRecursive(var AList : TList<TComponent>; 
                             AParent : TComponent) : TList<TComponent>;
var
  i: integer;
Begin
   If AParent = nil Then begin
     result := AList;
     Exit;
   end else
     AList.Add(AParent);
   for i := 0 to AParent.ComponentCount - 1 do
     GetAllRecursive(AList, AParent.Components[i]);
   result := AList;
End;

您可以将其修改为仅获取TChromium个组件,或者稍后可以对其进行过滤,例如:

//in type definition 
private    
  FComponents : TList<TComponent>;
  FChromiums : TList<TChromium>;
  //... etc

procedure TForm1.FormCreate(Sender: TObject);
var 
  cpt : TComponent;
begin
  FComponents := TList<TComponent>.Create;
  FChromiums := TList<TChromium>.Create;
  GetAllRecursive(FComponents, self);
  for cpt in FComponents do 
    if cpt is TChromium then FChromiums.Add(cpt as TChromium);
end;

然后您可以将其用作

for cpt in FChromiums do ExecuteJS(cpt);

procedure TForm1.ExecuteJS(AChromium: TChromium);
begin
  AChromium.Browser.MainFrame.ExecuteJavaScript;
end;