Delphi cxpagecontrol融合窗体
功能说明:
一、在需要融合的每个窗体加一句
initialization
RegisterClasses([TFrmDataDict]); //类名
二、cxpagecontrol融合窗体,在调用时
1. 如果不存在,创建窗口并显示到cxTabsheet中;
2.如果已存在,则找到窗体并显示
//ClassName窗体类名,Caption窗口名称,Args参数
function TFrmMain.OpenForm(ClassName: string; Caption: string; Args: array of Variant): TcxTabSheet;
var
I: Integer;
aSheet: TcxTabSheet;
aForm: TBaseForm; //继承自TForm的基类窗体,定义了一个procedure Execute(const Args: array of Variant); virtual; 所有窗体从此类窗体继承
begin
Result := nil;
//如果模块已存在,则显示
for I := to cxPageControl.PageCount - do
begin
if cxPageControl.Pages[I].Name = 'TabSheet_' + ClassName then
begin
cxPageControl.Pages[I].Show;//或者 cxPageControl.ActivePageIndex:=i;
//如果有传参数,则调用Execute
if Length(Args)> then
begin
Application.ProcessMessages;
TBaseForm(cxPageControl.Pages[I].Tag).Execute(Args); //传参数并调用Execute方法,方法名可以TBaseForm自定义
end;
Result:=cxPageControl.Pages[I];
Exit;
end;
end; //窗体不存在
if GetClass(ClassName) = nil then
begin
DialogInformation('【' + ClassName + '】不存在或未注册!');
Exit;
end; //不存在则创建
aSheet := TcxTabSheet.Create(Self);
aSheet.Name := 'TabSheet_' + ClassName;
aSheet.PageControl := cxPageControl;
aSheet.Align := alClient;
cxPageControl.ActivePage := aSheet;
//创建窗口
try
aForm := TFormClass(FindClass(ClassName)).Create(self) as TBaseForm;
aForm.Name := ClassName + 'Ex';
aForm.Parent := aSheet;
aForm.BorderStyle := bsNone;
aForm.Align := alClient;
aForm.Show;
if Caption='' then Caption:= aForm.Caption;
aSheet.Caption := Caption;
aSheet.Tag := THandle(aForm);
Application.ProcessMessages; //如果下面这句执行较慢,可加这一条先让画面显示出来
TBaseForm(aForm).Execute(Args); //创建时,传参并调用
Result := aSheet;
except
FreeAndNil(aForm);
FreeAndNil(aSheet);
Abort;
end;
end;
调用方法
procedure TFrmMain.Button1Click(Sender: TObject);
begin
//方式一, cxtabsheet的caption取TFrmQueryOrder的caption
OpenForm('TFrmQueryOrder');
//方式二, cxtabsheet的caption=订单查询
OpenForm('TFrmQueryOrder','订单查询');
//方式三, 传参并调用
OpenForm('TFrmQueryOrder','',['ORD1001',,DateStart, DateEnd]);
//方式四,直接调用某个窗体的方法
TFrmQueryOrder(OpenForm('TFrmQueryOrder').tag).ReFlashRecord;
end; //方式三的响应,在TFrmQueryOrder中实现父类方法
procedure Execute(const Args: array of Variant); override; procedure TFrmQueryOrder.Execute(const Args: array of Variant);
var
OrderNO:string;
Start,End:TdateTime;
order_type:integer;
begin
if Length(Args)> then
begin
OrderNO:=Args[]; //订单号
order_type:=Args[]; //订单类型
Start:=Args[]; //开始日期
End:=Args[]; //结果日期 ...........根据参数查询,略..........
end;
end;
Delphi cxpagecontrol融合窗体的更多相关文章
- Delphi中的窗体创建与销毁
Delphi中的窗体,有模式窗体与非模式窗体两种.两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示.当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦 ...
- delphi SetWindowPos改变窗体位置和状态
http://blog.163.com/yuanliaofan@126/blog/static/1730690722012534428814/ delphi SetWindowPos改变窗体位置和状态 ...
- [原创] Delphi 修改新建窗体时候的默认字体格式
Delphi 修改新建窗体时候的默认字体格式 操作步骤: 1.运行输入“regedit” 2.找到目录(这里默认以Delphi 7为例) HKEY_CURRENT_USER\Software\Borl ...
- delphi判断MDI窗体的子窗体是否存在
转]delphi判断MDI窗体的子窗体是否存在//*************************************************************************** ...
- Delphi MDI 子窗体的创建和销毁 [zhuan]
1.如果要创建一个mdi child,先看是否有这个child 存在,如果有,则用它,如果没有再创建 //该函数判断MDI 子窗体是否存在,再进行创建和显示function isInclude(for ...
- delphi制作登陆窗体
delphi登陆窗体的制作,就我知道的,可以有两种方法,一种是在工程文件中实现登陆窗体的动态调用,另一种就是在主窗体的OnCreate事件中动态创建登陆窗体,两种方法都需要将主窗体设置为Auto-cr ...
- Delphi 实现不规则窗体
最近为了要兼容XP系统(守旧的市场),又需要做出产品的特效,不得不从头学习一下这门 “聪明的语言” . 开发环境: win10 Delphi 10.2 Version 25.0.26309.314 产 ...
- Delphi~通过程序窗体句柄获取程序路径
http://www.cnblogs.com/Jesses/articles/1636323.html 引用PsAPI var h:HWND; pid: Cardinal; pHandle: T ...
- Delphi 编写ActiveForm窗体工程知识和样例(开发浏览器客户端应用程序)(有详细步骤)
一.基础知识介绍: 1.ActiveForm的基础知识介绍: 在Delphi中,ActiveForm是封装了Delphi Form的一种ActiveX控件.ActiveForm其实是一种标准的Delp ...
随机推荐
- ThinkPHP6.0学习之项目安装页面的开发
在我们做一个项目的时候,如果是自己用或者是给同行用的话往往不需要做一个安装页面的,但是如果是将项目给一些不怎么会操作服务器,不怎么会程序的人用的时候,我们就需要一个安装页面来帮助他们更好的将项目安装好 ...
- 组件基础之动态tab组件
<template> <div id="demo31"> <p>-----------------组件基础之动态tab组件一---------- ...
- Web前端学习笔记——Canvas
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- 虚拟化技术实现 — QEMU-KVM
目录 文章目录 目录 前文列表 KVM QEMU QEMU-KVM QEMU-KVM 调用 KVM 内核模块启动虚拟机的流程概要 前文列表 <虚拟化技术实现 - 虚拟化技术发展编年史> K ...
- python3 super().__init__() 和 __init__() 的区别
1.单继承 super().__int__()和 Base.__init__(self)是一样的, super()避免了基类的显式调用. class Base(object): def __init_ ...
- iOS面试-关于秒退
1 为什么很多的 iOS app 都有秒退现象?有什么好方法避免它?有哪些好方法避免这种现象吗? 问题里的“秒退”如果我没理解错,应该是指程序显示完默认启动图片后,在初始化阶段就崩溃了(也可以叫“闪退 ...
- Nginx使用默认配置启动异常处理
Ps1:错误问题:nginx: [error] OpenEvent("Global\ngx_reload_5988") failed (2: The system cannot f ...
- QFramework 使用指南 2020 (四):脚本生成(2)ViewController 与 ViewController 嵌套绑定
在上一篇,我们学习了,脚本生成的基本使用. 在这一篇,我们试着深入,聊聊脚本生成给我们带来的便利. 脚本生成的便利 首先,我们要知道,在 Unity 的游戏世界中都是以 GameObject 为单位的 ...
- Python随笔日记(1)
Python学习 1.安装python .之后在Windows中配置环境变量(计算机\属性\高级系统设置\环境变量\系统变量\path后加入 :路径) 2.注意变量的命名的规则 字母.数字.下划线 p ...
- 通用 spring cloud 微服务模板
说明文档 功能 1. 基于映射数据库一键生成 spring cloud 微服务 2. 通用 Controller ,无需编写代码即可完成基于数据库的服务 3. 动态多条件 CRUD + 分页 使用说明 ...