我有一个简单的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。
答案 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可见性,如上所示。