在运行时更改 Intraweb IWFrame
Changing Intraweb IWFrames at runtime
我有一个简单的 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 相同)
现在,我可以在设计时轻松地将框架分配给 body 区域,方法是将框架从工具板拖放到该区域。
问题是如何在运行时将其更改为 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;
我在 body 地区一无所获!
如果我在设计时手动添加它,我会得到相同的声明,但我无法更改它!
我是不是遗漏了什么或者不可能遗漏什么?
顺便说一句,我在 Delphi 柏林 10.1 和 IW14.1.12。
声明字段的"removal"不是IntraWeb的东西,而是Delphi"feature"。在 "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可见性,如上所示。
我有一个简单的 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 相同)
现在,我可以在设计时轻松地将框架分配给 body 区域,方法是将框架从工具板拖放到该区域。
问题是如何在运行时将其更改为 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;
我在 body 地区一无所获!
如果我在设计时手动添加它,我会得到相同的声明,但我无法更改它!
我是不是遗漏了什么或者不可能遗漏什么?
顺便说一句,我在 Delphi 柏林 10.1 和 IW14.1.12。
声明字段的"removal"不是IntraWeb的东西,而是Delphi"feature"。在 "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可见性,如上所示。