在运行时更改Intraweb IWFrame

时间:2017-09-03 13:44:16

标签: delphi intraweb

我有一个简单的IntraWeb测试项目,我的Unit1有一个包含3个区域的IWform:header,body&页脚如下:

type
  TIWForm1 = class(TIWAppForm)
    Body_Region: TIWRegion;
    Header_Region: TIWRegion;
    Footer_Region: TIWRegion;
  public
  end;

implementation

{$R *.dfm}


initialization
  TIWForm1.SetAsMainForm;

end.

我的Unit2和Unit3是一个IWFrame,它们只有一个按钮,如下所示:

type
  TIWFrame2 = class(TFrame)
    IWFrameRegion: TIWRegion;
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

{$R *.dfm}

end.

unit3与unit2相同

现在,我可以通过将工具板上的框架从该区域拖放到该区域,轻松地在设计时为框体区域指定框架。

问题是如何在运行时将其更改为unit3 Frame?

如果我尝试将其添加到类型部分

type
  TIWForm1 = class(TIWAppForm)
    Body_Region: TIWRegion;
    Header_Region: TIWRegion;
    Footer_Region: TIWRegion;

    MyFram2: TIWFrame2; // added here

    procedure IWAppFormShow(Sender: TObject);
  public
  end;

系统会尝试删除它!

如果我强迫它将其用作

Body_Region.Parent := MyFram2;

我身体区域什么都没有!

如果我在设计时手动添加它,我得到了相同的声明,我得到它的工作,但我不能改变它!

我在这里遗漏了什么或者不可能这样做吗?

btw我正在使用Delphi Berlin 10.1和IW14.1.12。

1 个答案:

答案 0 :(得分:2)

"删除"声明字段不是IntraWeb的东西,而是Delphi"功能"。在'" private"中声明它是这样的。除此之外,它将被视为公布:

TIWForm1 = class(TIWAppForm)
  Body_Region: TIWRegion;
  Header_Region: TIWRegion;
  Footer_Region: TIWRegion;
  procedure IWAppFormCreate(Sender: TObject);  // use OnCreate event
private
  FMyFram2: TIWFrame2; // put it inside a "Private" section. 
  FMyFram3: TIWFrame3;
public
end;

删除OnShow事件并改为使用OnCreate事件。在OnCreate事件中创建框架实例,如下所示:

procedure TIWForm1.IWAppFormCreate(Sender: TObject);
begin
   FMyFram2 := TIWFrame2.Create(Self);  // create the frame
   FMyFram2.Parent := Body_Region;      // set parent
   FMyFram2.IWFrameRegion.Visible := True;  // set its internal region visibility.

   // the same with Frame3, but lets keep it invisible for now  
   FMyFram3 := TIWFrame3.Create(Self);
   FMyFram3.Parent := Body_Region;           
   FMyFram3.IWFrameRegion.Visible := False;

   Self.RenderInvisibleControls := True;  // tell the form to render invisible frames. They won't be visible in the browser until you make them visible
end;

然后你可以设置一个可见的和另一个不可见的设置Frame.IWFrameRegion可见性,如上所示。