RzPageControl设置多页时显示关闭按钮

本文介绍了一种使用Raize5.x库中的RzPageControl组件实现融合窗口的方法。具体包括如何创建和管理子窗口、处理按键事件及窗口关闭逻辑等关键步骤。

假设您要将模式窗口为主的桌面程序改成融合窗口,原子窗口为TForm类型窗口。
用到的组件:Raize 5.x                  (不要问我为什么不用TFrame)

目前流行用Raize的RzPageControl来做融合窗口,因为它自带TabSheet的关闭按钮和
事件,所以大家都用这个了。

我的实现方法是放一个RzTabSheet当首页,上面显示一些通知通告、待办事项提醒的
项目,然后所有子模块的窗口直接动态创建到RzPageControl里去,创建代码如下: 

<pre>

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

——>procedure TfrmMain.N13Click(Sender: TObject);
var
f : TfrmCallTask;
//需要给子模块传递变量,所以这样定义
TabCtrl : TRzTabSheet;
//容器
i : Integer;
begin
for i :=0to RzPageControl1.PageCount -1do
if RzPageControl1.Pages[i].Caption ='任务列表'then
begin
RzPageControl1.Pages[i].Show;
exit;
end;//这里是根据子模块窗口的标题来区分有没有生成,有生成就激活显示
TabCtrl :
= TRzTabSheet.Create(RzPageControl1);//创建容器
TabCtrl.PageControl :
= RzPageControl1;//容器归属
RzPageControl1.ActivePageIndex :
= TabCtrl.PageIndex;//激活容器页
f :
= TfrmCallTask.Create(TabCtrl);//创建窗口
//我这里用的是TForm而不是TFrame,所以是有窗口标题这些属性的
TabCtrl.Caption :
= f.Caption;//用窗口标题当标签页名称
f.ManualDock(TabCtrl);
//将窗口融合到容器里
f.Align :
= alClient;//窗口自适应
f.vU :
= vU;//这里是设置窗口模块里的变量,当然也可以操作组件
f.vN :
= vN;
f.Show;
f.SetFocus;
//窗口显示后做个聚焦
end;
</pre>

关于窗口中的按键事件,也就是onKeyPress,因为我用的是TForm,所以可以直接使
用这个事件,只是切换组件时,需要以消息的形式来处理,代码如下:

<pre>

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

——>procedure TfrmCallList.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key = #13then
begin
Key :
= #0;
PostMessage(Handle, WM_KEYDOWN, VK_TAB, 
0);//模拟按下Tab键
//Perform(WM_NEXTDLGCTL, 10);//模式窗口时有效,融合窗口时无效
end;
end;
</pre>

关于融合窗口的关闭,也简单的,只要在RzPageControl的Close事件里设置
AllowClose为真即可,代码如下:

<pre>

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

——>procedure TfrmMain.RzPageControl1Close(Sender: TObject;
var AllowClose: Boolean);
begin//因为我不想关闭“首页”这个RzTabSheet,所以这样判断就行。
AllowClose :
= RzPageControl1.ActivePage.Caption <>'首页'
end;
</pre>

其他事项呢,不要忘记设置RzPageControl的几个相关属性来显示标签页样式和关闭
按钮就行了,比如ShowCloseButtonOnActiveTab为真,ShowCloseButton这个为假。

<think>好的,我现在要解决的问题是在Delphi或C++ Builder中设置RzPageControl1默认显示第一个tab页。首先,我需要回忆一下关于RzPageControl组件的使用经验,或者查找相关的文档和示例。 用户提到RzPageControl属于Raize组件库,这可能意味着它有一些特定的属性或方法需要调用。一般来说,对于标准的TPageControl组件,设置ActivePage属性就可以切换当前显示的页。但Raize组件可能有不同的实现方式。 首先,我应该确认RzPageControl是否有类似ActivePage或ActivePageIndex的属性。如果存在ActivePageIndex,将其设置为0应该能显示第一个标签页。比如在Form的OnCreate事件中,执行RzPageControl1.ActivePageIndex := 0;。另外,也可能需要直接设置ActivePage为第一个页面的实例,如RzPageControl1.ActivePage := TabSheet1;。 接下来,我需要考虑可能的错误情况。比如,如果页面是动态创建的,可能需要确保在设置ActivePageIndex之前所有页面已经正确初始化。此外,是否有其他属性或方法会影响默认显示,比如是否需要先设置某个属性来启用这种设置。 另外,参考引用[1]中提到如何在属性窗口中修改Caption属性,可能RzPageControl也有设计的属性可以设置默认页。比如在对象检查器中找到ActivePage属性并选择第一个页面。这样在窗体创建就会自动显示该页。 如果用户希望用代码实现,无论是通过ActivePageIndex还是ActivePage属性都是可行的。需要检查Raize的文档是否有特别说明,或者是否存在已知的问题。例如,某些组件可能在设计和运行的行为不一致,或者需要调用特定的方法来刷新界面。 最后,应该建议用户尝试这两种方法,并注意确保页面索引的正确性,避免越界错误。同,提醒在动态添加页面的处理方式,可能需要先添加页面再设置活动页。</think>在Delphi或C++ Builder中设置`RzPageControl1`默认显示第一个tab页,可通过以下两种方式实现: ### 方法1:通过属性设置(设计) 1. 在窗体设计器中选中`RzPageControl1`组件 2. 在Object Inspector中找到`ActivePage`属性 3. 从下拉列表中选择第一个tab页(如`TabSheet1`) 4. 保存并重新编译项目,运行将默认显示该页[^1] ### 方法2:通过代码设置(运行) 在窗体的`OnCreate`或`OnShow`事件中添加以下代码: ```delphi // Delphi示例 procedure TForm1.FormCreate(Sender: TObject); begin RzPageControl1.ActivePageIndex := 0; // 设置第一个页面的索引 // 或使用具体页面对象 RzPageControl1.ActivePage := TabSheet1; end; ``` ```cpp // C++ Builder示例 void __fastcall TForm1::FormCreate(TObject *Sender) { RzPageControl1->ActivePageIndex = 0; // 索引从0开始计数 // 或 RzPageControl1->ActivePage = TabSheet1; } ``` ### 注意事项: 1. 确保页面已正确创建,动态创建的页面需在设置前完成初始化 2. 使用`ActivePageIndex`需确认页面顺序,避免越界错误 3. 如果使用`TRzTabSheet`组件,其索引顺序与添加顺序一致 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值