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 ...
随机推荐
- java经典算法题50道
原文 JAVA经典算法50题[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序 ...
- golang入门time与string转换, time加减时间, 两个时间差
package main import ( "fmt" "time") var timeLayoutStr = "2006-01-02 15:04:0 ...
- Hadoop常用操作汇总
Hadoop Streaming示例程序(wordcount) run_hadoop_word_counter.sh $HADOOP_BIN streaming \ -input "${IN ...
- linux简单命令3---帮助命令
1:帮助命令:man 命令: 2:这个帮助用的比较多(还是中文):命令 --help 3:shell帮助 4:详细命令(比man更详细)帮助,用的少,比较麻烦:info
- java使用新的(nio)遍历文件(支持文件后缀名、文件名正则表达式匹配)
import org.junit.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file. ...
- 【leetcode_easy】541. Reverse String II
problem 541. Reverse String II 题意: 给定一个字符串,每隔k个字符翻转这k个字符,剩余的小于k个则全部翻转,否则还是只翻转剩余的前k个字符. solution1: cl ...
- appium1.4.1版本下载
链接:https://pan.baidu.com/s/1PvgeoPNW6bJg50uguL9fpA 密码:0fm7
- python进阶----logging模块
在工作中经常要打印一些日志,下面介绍一下python中的logging模块 首先,先了解一下日志的级别,主要分为以下5种: debug 最低级别,一般开发用来打印一些调试信息 info ...
- (转)svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrupted”
今天碰到了个郁闷的问题,svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrup ...
- golang web框架设计3:controller设计
继续学习golang web框架设计 controller作用 MVC设计模式里面的这个C,控制器. Model是后台返回的数据: View是渲染页面,通常是HTML的模板页面: Controller ...