Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm
现在明白了, 原来窗体上覆盖着一个 TRectangle 对象:
uses FMX.Objects; procedure TForm1.Button1Click(Sender: TObject);
begin
(Self.Children[] as TRectangle).Fill.Color := claRed; //默认情况下, 通过 Children[0] 可读出这个矩形, 但其次序(Index)是可变的
ShowMessage(Children[].ToString); //TRectangle {Panel1 上也是盖着一个矩形对象, 应该还有其它也是这样}
TRectangle(Panel1.Children[]).Fill.Color := claYellow;
end;
现在的 FMX 窗体只有 8 个事件, 我回头数了数传统 VCL 窗体的事件有 40 个之多.
8个是少了点, 但其上级有不少可以覆盖的虚方法, 如:
MouseDown、MouseUp、MouseMove、MouseLeave、MouseWheel、DragDrop、DragEnter、DragOver、DragLeave、KeyDown、KeyUp 等等.
它们在窗体中没有以事件的方式出现, 可能是设计者认为在窗体中很少用到这些事件.
测试: 通过覆盖 MouseMove 响应鼠标移动事件:
unit Unit1; interface uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs; type
TForm1 = class(TForm)
private
public
{ 在 TForm1 声明区 -> Ctrl+空格 -> 输入 MouseM... -> 回车 -> Shift+Ctrl+C }
procedure MouseMove(Shift: TShiftState; X: Single; Y: Single); override;
end; var
Form1: TForm1; implementation {$R *.fmx} procedure TForm1.MouseMove(Shift: TShiftState; X, Y: Single);
begin
inherited;
Caption := Format('%f, %f', [X, Y]);
end; end.
TForm 的继承链: TFmxObject -> TCommonCustomForm -> TCustomForm -> TForm
TCommonCustomForm 提出或实现了 TForm 和 TForm3D 的公有功能;
TCustomForm 通过实现 IScene 接口, 主要提供了 Canvas 和 Style 相关的功能;
TForm 没有功能扩展, 只是把部分成员改在 published 下以便在设计时可用.
{ TCommonCustomForm }
public
constructor Create(...); override; //
constructor CreateNew(...); virtual; //它比 Create() 多出一个默认参数 Dummy, 但没看出什么用途(可能是给3D窗口用的吧); 暂时它和 Create() 没什么区别
destructor Destroy; override; //
procedure InitializeNewForm; virtual; //窗体初始化, 可通过覆盖此方法初始化窗体属性
procedure AfterConstruction; override; //建立后
procedure BeforeDestruction; override; //销毁前
procedure AddObject(...); override; //添加对象
{ children }
function ObjectAtPoint(...): IControl; virtual; //指定位置上的控件
{ called from Platform }
procedure SetMarkedText(...); virtual; //使用输入法时, 确认输入前的文本; 覆盖此方法可截获
procedure PaintRects(...); virtual; //更新指定的矩形(数组)范围; TCustomForm 里才有它的实现代码
procedure MouseDown(...); virtual; //响应鼠标事件
procedure MouseMove(...); virtual; //...
procedure MouseUp(...); virtual; //...
procedure MouseWheel(...); virtual; //...
procedure MouseLeave; virtual; //...
procedure KeyDown(...); virtual; //响应键盘事件
procedure KeyUp(...); virtual; //...
function GetImeWindowRect: TRectF; virtual; //获取拥有输入焦点对象的范围矩形
procedure Activate; //激活
procedure Deactivate; //取消激活
procedure DragEnter(...); virtual; //响应拖放事件
procedure DragOver(...); virtual; //...
procedure DragDrop(...); virtual; //...
procedure DragLeave; virtual; //...
procedure EnterMenuLoop; //调用 TMenuBar 对象的 StartMenuLoop 方法
{ settings }
procedure SetBounds(...); virtual; //设置位置与大小
function ClientToScreen(...): TPointF; //点转换
function ScreenToClient(...): TPointF; //...
function CloseQuery: Boolean; virtual; //触发 OnCloseQuery 事件
function ClientRect: TRectF; //客户区矩形
procedure Release; //释放
procedure Close; //关闭
procedure Show; //显示
procedure Hide; //隐藏
function ShowModal: TModalResult; //显示为模态窗口
procedure CloseModal; //触发 OnCloseQuery、OnClose 事件
procedure Invalidate; //使无效而强制刷新
procedure BeginUpdate; //开始更新
procedure EndUpdate; //结束更新
property Handle: TFmxHandle ...; //窗口句柄
property ContextHandle: THandle ...; //环境句柄
property ModalResult: TModalResult ...; //模态窗口的返回值
property FormState: TFmxFormStates ...; //窗口模式状态
property Designer: IDesignerHook ...; //设计时相关的接口
{ IRoot }
property Captured: IControl ...; //被鼠标选中的控件
property Focused: IControl ...; //拥有焦点的控件
property Hovered: IControl ...; //鼠标下的控件
property IsActive: Boolean ...; //是否是激活状态
property BiDiMode: TBiDiMode ...; //不同语言的方向
property Caption: string ...; //标题
property Cursor: TCursor ...; //光标类型
property BorderStyle: TFmxFormBorderStyle ...; //边框样式
property BorderIcons: TBorderIcons ...; //工具条上的按钮
property ClientHeight: Integer ...; //客户区高
property ClientWidth: Integer ...; //客户区宽
property Margins: TBound ...; //内边距
property Position: TFormPosition ...; //相对位置
property Width: Integer ...; //宽
property Height: Integer ...; //高
property ShowActivated: Boolean ...; //打开时是否激活
property StaysOpen: Boolean ...; //是否延迟打开
property Transparency: Boolean ...; //能否透明
property TopMost: Boolean ...; //是否在最顶层
property Visible: Boolean ...; //是否隐藏
property WindowState: TWindowState ...; //窗口状态(常态、最大化、最小化)
property OnCreate: TNotifyEvent ...; //建立时
property OnDestroy: TNotifyEvent ...; //销毁时
property OnClose: TCloseEvent ...; //关闭时
property OnCloseQuery: TCloseQueryEvent ...; //将要关闭时
property OnActivate: TNotifyEvent ...; //被激活时
property OnDeactivate: TNotifyEvent ...; //丢激活时
property OnResize: TNotifyEvent ...; //调整大小时
published
property Left: Integer ...; //左
property Top: Integer ...; //上
end;
{ TCustomForm }
public
constructor Create(...); override; //
constructor CreateNew(...); override; //
destructor Destroy; override; //释放
procedure InitializeNewForm; override; //初始化 Form, 应该是内部自动调用的
procedure AddObject(...); override; //添加对象
procedure UpdateStyle; //更新样式
property Canvas: TCanvas ...; //绘图层
property Fill: TBrush ...; //画刷
property StyleBook: TStyleBook ...; //样式表
property ActiveControl: TStyledControl ...; //激活控件或获取被激活的控件
property StyleLookup: string ...; //指定控件样式名
property OnPaint: TOnPaintEvent ...; //重绘时
end;
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm的更多相关文章
- Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...
- Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...
- Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox、TComboEdit
Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditL ...
- Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox
Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项 ...
- Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如: Memo1.UseSma ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...
- Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); ov ...
- Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它
Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...
随机推荐
- JS预解释
1.声明(declare) var num // 告诉浏览器在全局作用域中有一个num变量 定义(defined) num = 12 // 给我们的比变量进行赋值 2.var:在预解释时只是提前 ...
- jsp-TagLib标签库
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ t ...
- Struts2.5以上版本There is no Action mapped for namespace [/] and action name [userAction_login] associated with context path []
分析:Struts2在2.5版本后添加strict-method-invocation(严格方法访问),默认为true,不能使用动态方法调用功能,故需设为false struts.xml设置如下: & ...
- Linux下安装升级python
本文主要是参考帖子,感谢这位博主,我主要是对相关操作进行补充和说明. 本文主要是在linux(centos)下安装Python3.7.1 1.下载安装Python-3.7.1 1) 下载Python- ...
- DP | Luogu P1466 集合 Subset Sums
题面:P1466 集合 Subset Sums 题解: dpsum=N*(N+1)/2;模型转化为求选若干个数,填满sum/2的空间的方案数,就是背包啦显然如果sum%2!=0是没有答案的,就特判掉F ...
- angularjs 代码结构两种写法
1.当路由中不写controller的时候,controller写在对应的html表单中 2.若要写在路由中,如下 3.转到相应的路由(页面) 1.采用location服务 2.采用 transiti ...
- DevExpress v19.1新版亮点——WinForms篇(四)
行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...
- CodeForces-687A(DFS,染色)
链接: https://vjudge.net/problem/CodeForces-687A 题意: Recently, Pari and Arya did some research about N ...
- 算法复习_线性时间求解Majority Vote Algorithm问题
题目来源于Leecode上的Majority Element问题 Majority Element:在一个序列中出现了至少n/2的下界次 使用排序算法取中位数则需要Nlogn http://www.c ...
- c# 谷歌动态口令对接
https://www.cnblogs.com/easyauthor/p/11054869.html Google 身份验证器与两步验证功能配合,可在您登录 Google 帐户时为您平添一重安全保障. ...