快速又改动少的将窗口改成融合窗口

假设您要将模式窗口为主的桌面程序改成融合窗口,原子窗口为TForm类型窗口。
用到的组件:Raize 5.x (不要问我为什么不用TFrame)
目前流行用Raize的RzPageControl来做融合窗口,因为它自带TabSheet的关闭按钮和事件,所以大家都用这个了。
我的实现方法是放一个RzTabSheet当首页,上面显示一些通知通告、待办事项提醒的项目,然后所有子模块的窗口直接动态创建到RzPageControl里去,创建代码如下:

procedure TfrmMain.N13Click(Sender: TObject);
var
  f                 : TfrmCallTask;//需要给子模块传递变量,所以这样定义
  TabCtrl           : TRzTabSheet;//容器
  i                 : Integer;
begin
  for i := 0 to RzPageControl1.PageCount - 1 do
    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;

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

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

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

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

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

参考:http://www.e8e.net/post/2b9e8b_b876c0 (星五的博客)

时间: 2024-11-03 03:27:58

快速又改动少的将窗口改成融合窗口的相关文章

Oracle中表列由VARCHAR2类型改成CLOB

情景 原来表中的列定义成VARCHAR2类型,众所周知,VARCHAR2类型最大支持长度为4000.假设因为业务须要.想把此列转换为CLOB类型,在Oracle中直接通过ALTER语句转换是行不通的.以下依据详细事例解说在Oracle数据库中怎样把表列由VARCHAR2类型转换为CLOB类型. 演示样例准备 1. 新建两张张表TB_WITHOUT_DATA(此VARCHAR2列不包括数据)和TB_WITH_DATA(此Varchar2列包括数据) create table TB_WITHOUT_

linux awk常用操作(快速将fasta格式的序列改成一行显示)

Some time when you want to change the fasta seq into one line For awk:         awk '/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }'  YourFile > newfilename For sed:             sed -n '1{x;d;x};${H;x

手机模拟器玩【蜀门手游】多开多窗口改不同IP防封攻略

手机模拟器玩[蜀门手游]多开多窗口改不同IP防封攻略? 手游在电脑上安装模拟器上登入,很容易封号大家应该已经领教过了吧,其实很多游戏工作室也是一根网线,他们怎么做到不封号接单呢.我也专门了解了一下,他们是通过吧IP修改后才上游戏账号的. 首先吧电脑模拟器安装好多开几个窗口后把需要上的游戏下载安装好. 现在做的是需要把这几个模拟器换上不同的IP点,需要安装修改IP的工具.这边了解到使用[兔子IP]即可改变模拟器的每个多开窗口的IP地址了.所以需要在每个窗口里安装一个兔子软件.模拟器中安装的是手机版

父窗口调用iframe子窗口方法

一.父窗口调用iframe子窗口方法 1.HTML语法:<iframe name="myFrame" src="child.html"></iframe> 2.父窗口调用子窗口:myFrame.window.functionName(); 3.子窗品调用父窗口:parent.functionName(); 简单地说,也就是在子窗口中调用的变量或函数前加个parent.就行 4.父窗口页面源码: 复制代码 代码如下:<html> &

android launcher2开发之 有抽屉改成无抽屉

在launcher.java中在createShortcut方法中   屏蔽所有应用按钮 改动之前 View createShortcut(int layoutResId, ViewGroup parent, ShortcutInfo info) { BubbleTextView favorite = (BubbleTextView) mInflater.inflate( layoutResId, parent, false); favorite.applyFromShortcutInfo(in

实例具体解释:反编译Android APK,改动字节码后再回编译成APK

本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能够成功进入到第二个Activity. 有时难免要反编译一个APK.改动当中的若干关键推断点,然后再回编译成一个全新的可用的apk,这全然是可实现的. 若要完毕上述工作,须要以下工具,杂家后面会把下载链接也附上.这些软件截止本文公布时,经过杂家确认都是最新的版本号. 1.APK-Multi-Toolv

将html页改成jsp的两种方式

将html页改成jsp的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-08-13 将html页改成jsp有两种方法,第一种是直接修改html文件,另一种是新建jsp文件.下面为大家详细介绍下具体实现,感兴趣的朋友可以参考下 一般情况,将html页改成jsp有两种方法,第一种是直接修改html文件,另一种是新建jsp文件.下面具体说一下这两种方式. 假设我们要将testPage.html文件修改为testPage.jsp文件.原testPage.html文件内容为: 复制代码

VC++编程之第三课笔记——MFC窗口创建过程以及窗口类的封装

第三课 MFC窗口创建过程以及窗口类的封装 MFC的每一个类都是以C开头的,表明这是一个Class. 工程包含(单文档) 创建工程名为aaa的工程(单文档)时,在类视图中可看见五个类: CAboutDlg CMainFrame CAaaApp CAaaDoc CAaaView 其中: 类CAboutDlg继承自CDialog类,对话框的类 类CMainFrame继承自CFrameWnd类,创建整个程序的框架窗口 类CAaaApp继承自CWinApp类,创建唯一的应用程序对象 类CAaaDoc继承

OpenGL学习笔记:Console工程下如何不显示控制台黑窗口只显示Windows窗口

刚学习OpenGL,绘制图形的时候,如果不进行设置,运行的时候会先出现黑窗口再出现Windows窗口. 其实要去除控制台窗口非常简单,只需要修改工程设置,把子系统改成Windows,程序的入口点改成mainCRTStartup. 下面我先把几中解决办法列举出来,再解释下我的理解. 方法一:在程序中加入一句#pragma comment(linker, “/subsystem:\”windows\” /entry:\”mainCRTStartup\””),建议加在include的后面. 方法二:修