uniGUI试用笔记(五)
uniGUI的主窗体可以采用多页面方式进行管理,参考网上的资料,都是用TUniFrame + TUniPageControl 来实现,尝试了一下,效果还不错,如下图:
用TUniFrame 能够使用继承模式,我采用了以下的类关系:
TfmeWebEmbedBase : 所有嵌入Frame的基类,实现了与主窗体的交互和控制,包括窗体的关闭等
TfmeWebDBListBase: 与数据集列表操作相关的基类,实现了数据集的开启、数据导出与打印等
TfmeWebDBListEditBase:与数据集读写操作相关的基类,实现了数据集的新增、修改、删除、导入及保存等
业务窗体根据情况从TfmeWebDBListBase或TfmeWebDBListEditBase继承。
在主窗体中,首先构建一个列表,容纳所有的Frame
FFrameList : TList;
菜单或按钮点击,需要开启业务窗体时,调用函数
procedure TfrmWebMain.ShowFrame(AfmeBaseClass: TfmeWebEmbedClass; AOwnerData: Variant);
var
ts: TUniTabSheet;
fme : TfmeWebEmbedBase;
begin
{ 查找是否已经存在相应的业务窗体 }
fme := FindFrame(AfmeBaseClass);
{ 如果没有则新建 }
if not Assigned(fme) then
begin { 先创建TabShee,用于放置Frame }
ts := TUniTabSheet.Create(self);
ts.PageControl := pcMain;
ts.Closable := False; { 置换关闭事件,用于关闭业务窗体 }
ts.OnClose := OnTabSheetClose; { 构建业务窗体 } fme := AfmeBaseClass.Create(Self);
fme.Parent := ts;
fme.TabSheet := ts;
fme.Align := alClient;
fme.MainForm := Self; { 设置返回事件,当业务窗体按下<返回>时,执行该函数}
fme.OnReturn := OnFrameReturn;
ts.Caption := fme.ModelName; { 业务窗体加入到列表 }
FFrameList.Add(fme);
end
else { 如果找到已存在的业务窗体,则取其对应的TabSheet}
ts := fme.TabSheet; { 进行业务窗体的数据准备工作,失败则释放业务窗体 } if not fme.PrepareData(AOwnerData) then
begin
ReleasFrame(fme);
Exit;
end; { 显示业务窗体 } ts.TabVisible := true;
pcMain.ActivePage := ts;
end;
uniGUI试用笔记(五)的更多相关文章
- uniGUI试用笔记(十五)通过URL控制参数
通过URL代入参数,在代码中读取,如: http://localhost:8501/?ServerPort=212&&ServerIP=192.168.31.12 在代码中可以通过: ...
- uniGUI试用笔记(十三)调用WebService
今天尝试用uniGUI做Web服务器,调用应用服务器的WebService,遇到些问题记录下来备忘. 1.对WebService的调用同一般App程序,只是注意如果WebService的执行时间较长, ...
- uniGUI试用笔记(十一)
最近研究了一下UniGUI的TuniDBGrid,记录一下免得忘记了. TuniDBGrid的重要属性包括: 1.列—TUniDBGridColumns和TUniDBGridColumn 每个列对象( ...
- uniGUI试用笔记(十)
今天用LoadRunner对uniGUI的Standalone模式的程序进行了一次压力测试,程序采用三层模式,将应用服务器与Web服务器分离,由于条件限制,数据库.应用服务和Web服务都部署在同一条云 ...
- uniGUI试用笔记(九)
uniGUI执行程序部署有3种形式 1.ISAPI模式 部署在IIS或Apache,程序编译为Dll形式,没有试,准备后续专门测试一下. 2.标准执行文件模式 将软件编译成一个独立的Exe文件,包括了 ...
- uniGUI试用笔记(八)
在业务系统中常常使用回车键(Enter)替代Tab键完成焦点跳转,在uniGUI下,可以不用代码,直接使用TUniForm的NavigateKeys进行设置: 其中Next和Prior决定了焦点向下一 ...
- uniGUI试用笔记(七)
uniGUI的文件下载由于TUniSession的存在而变得非常简单,最典型的一个例子就是将列表中的所有数据导出到Excel中.服务器上采用TMS FlexCel控件,先将数据集中的记录导入到Exce ...
- uniGUI试用笔记(六)
uniGUI提供了一个文件上传控件TUniFileUpload,进行数据的导入就变得比较容易.首先将TUniFileUpload控件放置在窗体上,按下导入按钮后,执行TUniFileUpload的文件 ...
- uniGUI试用笔记(四)
uniGUI下有专用的登录窗体类:TUniLoginForm,该类属于AppForm,构建代码为: function frmWebLogin: TfrmWebLogin; begin Result : ...
随机推荐
- MongoDB下,启动服务
D:\MongoDB>mongod --dbpath D:\MongoDB\Data --logpath D:\MongoDB\Log\MongoDB.log --logappend --ser ...
- python中impyla包报'TSocket' object has no attribute 'isOpen'错误
经搜索得知,是thrift-sasl的版本太高了(0.3.0),故将thrift-sasl的版本降级到0.2.1 pip install thrift-sasl==0.2.1 经测试impyla 可以 ...
- 03-树2 List Leaves(25)
题目 分析 输入先给出结点的数量,把结点从0开始标号,每一行给出结点的左右两个子节点,-表示子节点不存在. 很容易分析出在子节点中没有出现的就是根节点,两个子节点都为空的是叶子节点 先建树,然后从ro ...
- ECC
素数 prime,又称为质数,是指,除了1和它本身,没有其他因数的数. 素数的定理: 1)在一个大于1的数a和它的2倍之间必定存在至少一个素数: 素数的性质: 1)在所有的大于10的质数中,个位数,只 ...
- GetWindowRect和GetClientRect的注意事项
发现GetClientRect()函数取值不正确,特此找来了些资料以供参考,具体如下,就可以明白怎么回事了. 一:关于坐标 MFC中绘图时经常涉及到坐标计算,GetWindowRect和GetClie ...
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现
https://blog.csdn.net/zouxy09/article/details/9993371 自己平时看了一些论文,但老感觉看完过后就会慢慢的淡忘,某一天重新拾起来的时候又好像没有看过一 ...
- 【转】C#中base关键字的几种用法
base其实最大的使用地方在面相对性开发的多态性上,base可以完成创建派生类实例时调用其基类构造函数或者调用基类上已被其他方法重写的方法.例如: 2.1关于base调用基类构造函数 public c ...
- JOptionPane
2018-10-30 14:44:43 开始写 作者:tjk123456 来源:CSDN 原文链接 建议阅读官方资料:https://docs.oracle.com/javase/7/docs/api ...
- Java集合-----Map详解
Map与Collection并列存在.用于保存具有映射关系的数据:Key-Value Map 中的 key 和 value 都可以是任何引用类型的数据 Map 中的 ...
- cmd强行终止进程
找到某个进程对应的端口号 Netstat -ano|findstr 8080 通过ip 地址,强行 taskkill /PID 11048 但有的情况下终止不了,需要通过下列方式进行 task ...