IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> AlphaControls 控件 TFrame的灵活运用 -> 正文阅读

[移动开发]AlphaControls 控件 TFrame的灵活运用

AlphaControls 控件 TFrame的灵活运用

? ? 一、Frame

? ? Delphi的TFrame是从TForm类继承的,但是TFrame没有onShow和onHide事件。它为创建一个没有MDI窗体相关的GUI应用程序,提供方便。

? ? TFrame是一种框架组件,使程序开发人员能够可视化的设置,将窗口或VCL作为容器,通过加载调用TFrame,组成不同功能的窗口和容器。

? ? 使用TFrame框架好处:

? ? 一是框架可大幅减少需要存储在工程中的资源量。二是框架允许你对容器功能控制加载TFrame,让编程快捷方便。三是代码的重复使用。

? ? AlphaControls第三方控件,Deme中大量使用TFrame,只有熟悉TFrame,才能读懂代码。

? ? 注意:TFrame与TForm的区别:

? ? 1、TForm仅是一个窗口,TFrame是个框架,它可以是整个窗口的框架,也可以是窗口中一个区域(TPanel)的框架。

? ? 2、TForm,只要uses加入,可以直接引用窗口中的控件,如MainForm.Button1

? ? TFrame不可以直接引用,必须通过ComponentCount搜索间接引用:

  for i := 0 to Frame_FZ.ControlCount  - 1 do
    ShowMessage(Frame_FZ.components[i].Name);

? ? 3、Delphi的方法(函数或过程)中,TFrom可以作参数引用,需TFrame是不可以当作参数引用的,否则会出错:

? ? Incompatible tpyes: TFrame and Class reference

type
  TFrameClass = class of TFrame;

? ? ?声明一个TFrame的类后,才能在(函数或过程)中,要引用。

? ? 4、TForm可以单独使用,而TFrame只是容器的框架,它只能在放入容器中使用。

? ? 此外,TFrame没有构造器和解析器,依赖于父容器完成Destroy的工作。

? ? 二、TFram的建立
? ? ?1、编译TFrame
? ? ?(1)项目名
? ? ?(2)单元名

? ? (3)向TFrame中加入控件,并指定相关控件的事件??
? ? ?2、在程序中创建TFrame
? ? ?(1)静态创建,主窗口打开时创建,分窗口使用是直接加载;?
? ? (2)动态创建,分窗口加载时创建并调用,窗口关闭时释放。

? ? 三、创建Frame
? ? ?1、AutoCreat,在工程prgram,option,Form窗口中,将Frame加入AutoCeratforms:

? ? ?这是静态创建的一种模式。
? ? 2、静态创建,在MainForm创建或显示事件中,创建TFrame

procedure TMainForm.FormShow(Sender: TObject);
begin
? Frame1 := TFrame1.Create(nil);
? Frame2 := TFrame2.Create(nil);
? Frame3 := TFrame3.Create(nil);
? Frame4 := TFrame4.Create(nil);
? Frame5 := TFrame5.Create(nil);
? Frame1.Parent := MainForm.sScrollBox1; ?// 指定加载容器
end;

3、动态创建
(1)有的容器有类似OnCreatFrame事件,比如TsFrameBar创建子项目Item的TsTitleItem,就有OnCreateFrame事件,在此事件中,创建并关取决Frame:

procedure TMainFrm.sFrameBar1Items0CreateFrame(Sender: TObject;
? var Frame: TCustomFrame);
begin
? Frame := TBarPanel_1.Create(nil);
end;


(2)TPageChun
创建Page时,动态创建TFrame

? ? 四、TFrame使用

? ? 在程序中使用TFrame,使用TFrame关键的三个步骤:

? ? 1、创建TFrame;

? ? 2、程序中(或窗口中),创建TFrame;

? ? 3、当TFrame的实体(创建后的TFrame),需要通过纳入一个容器,才能使用:

? ? (1)向TFrame.Parent(赋值窗口对象)

procedure TStartFrm.sButton1Click(Sender: TObject);
begin
  Frame_FZ.Parent := sScrollBox1;
end;

? ? (2)由一个TFrame类型的参数(VAR XXX:TFrame)引导,指定TFrame的?Parent属性:

? ? ?五、TFrame的用途

? ? ? 1、窗口放入TsPanel、TsScrollBox容器的依据功能更换界面时,加载不同内容的TFrame;

? ? ?以下是通过TsScrollBox容器,加载不同的TFrame,组成不功能引导模块:

? ? ?切换的效果:


? ? ? ?2、不同的菜单,功能不同,加载相应功能的Frame

? ? 以下是通过sFrameBar1,加载的不同的菜单选项:

? ? ?3、TabPage中,加载不同的TFrame,组成不同功能的Page窗口

? ? 六、TFrame释放

? ? ?1、直接释放,使用Free?

? ? ? Frame1.Free;

? ? ?2、跟随父容器释放,例如父容器TTabPage:

? ? ? FreeAndNil(TabPage1);

? ? 七、体会

? ? 1、TFrame作为窗口菜单的项目,使用静态TFrame,在那个窗口引用,就在那个窗口OnShow事件中创建。

? ? ?2、作为窗口的内容,TFrame使用动态TFrame,比较好,动态创建,可以减少占用内存。

? ? ?例如:

? ? ?(1)全局变量引用TFrame

var ?Frame1,Frame2,Frame3,Frame4,Frame5:TFrame,
var ?Arr_Frame: Array[1..5] of TFrame;?

? ? ? (2)主窗口OnShow事件中,创建TFram,引入关联变量
?

? Frame1 := TFrame1.Create(nil);
? Frame2 := TFrame2.Create(nil);
? Frame3 := TFrame3.Create(nil);
? Frame4 := TFrame4.Create(nil);
? Frame5 := TFrame5.Create(nil); ? ? ?

? Arr_Frame[1]:= := TFrame1.Create(nil);
? Arr_Frame[2]:= := TFrame2.Create(nil);
? Arr_Frame[3]:= := TFrame3.Create(nil);
? Arr_Frame[4]:= := TFrame4.Create(nil);
? Arr_Frame[5]:= := TFrame5.Create(nil);

? ? ?(2)函数或过程中引用
? ? ? 1、通过定义TFrqme的序列号引用:

procedure CreateTabSheet_Frame(Frame_Int:Integer;CName,EName:string); ?// Frame_Int指定数组序列号
begin
? ?Try
? ? ? Case Frame_Int do
? ? ? ? ? 1 : MyFrame:=TFrame_1.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 2 : MyFrame:=TFrame_2.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 3 : MyFrame:=TFrame_3.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 4 : MyFrame:=TFrame_4.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 5 : MyFrame:=TFrame_5.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 6 : MyFrame:=TFrame_6.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 7 : MyFrame:=TFrame_7.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 8 : MyFrame:=TFrame_8.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 9 : MyFrame:=TFrame_9.Create(nil); ? ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ? ? 10: MyFrame:=TFrame_10.Create(nil); ? ? ? ? ? ? ? ? ? ?// 创建 TFrame
? ? ? ?end;
? ? ? ?MyFrame.Parent := MyPanel; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // MyFrame 嵌入 xPanel
? ? ? ?MyFrame.Align := alClient;
? ? except
? ? ? ? MyFrame.Free;
? ? ? ? Exception.Create('Error');
? ? end;
end ;

引用:

procedure TBarPanel_1.Spnutton_0Click(Sender: TObject);
begin
  MainFrm.CreateTabSheet_Frame(1,'机构基本信息','1_1');
             // 引用序列 1 TFrame  窗口标题    窗口编号   
end;

? ? (2)声明继承TFrameClass

type
  TFrameClass = class of TFrame;

引用定义方法:

procedure TMainFrm.CreateTabSheet_FrameCloss(PFrameclass:TFrameClass;CName,EName:string);
                                  //    TFrameClass 类  Page中文名(显示) 英文名(控件名)

begin
  。。。
   MyFrame:=PFrameClass.Create(nil);
  。。。
end;

引用:

  MainFrm.CreateTabSheet_FrameCloss(TFrame_1,'机构基本信息','1_1');

? ? ? ?最后,灵活运用TFrame,可以让代码减少,增加代码的逻辑性。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:54:07  更:2022-04-18 17:55:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 21:24:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码