它们都是继承自 TShape 类, 共同拥有如下属性: Fill            : TBrush;      //填充 Stroke          : TBrush;      //边线(画笔) StrokeThickness : Single;      //厚度(边线宽度) StrokeCap      : TStrokeCap;  //线帽样式, TStrokeCap (枚举)类型 StrokeDash      : TStrokeDash; //虚线样式, TStrokeDa…
Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.TPathLabel 等等, 没时间继续学习了. 对 FMX 的整体感觉: 还不成熟, 但肯定有前景; 它的构架师有远见.了不起, 很难估计他开启的是多大一扇门! 本将继续学习:1.TCanvas.TBrush.TApplication;2.FMX 中的 GDI+.D2D.DirectX;3.FMX…
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> TTreeView 子项类型是 TTreeViewItem. 测试, 先在窗体上放一个 TTreeView, 并需要它的 OnChange 事件: unit Unit1; interface uses   System.SysUtils, System.Types, System.UITypes, Sys…
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1.它们的列对象分别是: TStringColumn.TColumn;2.TStringGrid 比 TGrid 多出了 Cells[] 属性. 因为 TGrid 没有 Cells[] 属性, 暂时不方便使用; 我尝试取其当前单元值时竟然用了这样的代码:(Grid1.Columns[Grid1.Col…
Delphi XE2 之 FireMonkey 入门(42) - 控件基础: TComboBox.TComboEdit TListBox 有两个兄弟 TComboListBox.TComboEditListBox;TComboBox.TComboEdit 虽不是不是从它们继承, 但分别包含了它们, 所以使用起来都有点像 TListBox. TComboBox 更像 TListBox, 比 TComboEdit 多出了 Selected 等成员;TComboEdit 是从 TCustomEdit…
Delphi XE2 之 FireMonkey 入门(41) - 控件基础: TListBox TScrollBox -> TCustomListBox -> TListBox; 其元素项是 TListBoxItem 类型. TListBox 的功能在 TCustomListBox 里就完成了. 值得注意的变化是: 1.复选框(相关属性: ShowCheckboxes.TListBoxItem.IsChecked)2.交替背景(通过继承还可以调整交替的背景色)3.TListBoxItem 可调…
Delphi XE2 之 FireMonkey 入门(40) - 控件基础: TMemo 值得注意的变化: 1.其父类 TScrollBox 的许多特性也很有用处, 如:   Memo1.UseSmallScrollBars := True; 2.内部使用了一个栈列表管理动作, 现在可以执行多步撤销(UnDo). 3.使用了一个新的结构体 TCaretPosition 来描述当前位置, 并为该结构提供了一个公用的快速构造函数 ComposeCaretPos().   TCaretPosition…
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollBox TScrollBox 是不少控件(TMemo.TListBox.TStringGrid.TTreeView.TImageViewer 等)的基础, 所以先学. TVertScrollBox 只比 TScrollBox 少了竖滚动条. TFramedScrollBox.TFramedVertSc…
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopupMenu.TMainMenu; 它们都是要包含 TMenuItem; 在设计时添加 TMenuItem 很容易.其中的 TMainMenu 暂不能应用其他样式; TMenuBar 只有一个值得注意 UseOSMenu 属性. 控件 PopupMenu 属性用于指定右键菜单. 暂时无法直接为窗体指定右…
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public   constructor Create(...); override;    //   destructor Destroy; override;          //   procedure AddObject(...); override;    //添加对象   procedure RemoveObject(...); override; //移…
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时, 给的确是 "backgroundstyle" ... 现在明白了, 原来窗体上覆盖着一个 TRectangle 对象: uses FMX.Objects; procedure TForm1.Button1Click(Sender: TObject); begin   (Self.Chi…
Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算上从 TComponent 继承的 Tag, 可以暂存多种类型的数据了. ChildrenCount.Children[] 代替了之前的 ControlCount.Controls[].有增删 Children 的几个方法: AddObject().InsertObject().RemoveObje…
Delphi XE2 之 FireMonkey 入门(34) - 控件基础: TFmxObject: 克隆对象 有两个和克隆相关的方法: Clone().CloneChildFromStream(). Clone() 很好用, 但 CloneChildFromStream() 的源码很明显地写错了(是小问题, 谁外语好去报一下). procedure TForm1.FormCreate(Sender: TObject); var   i: Integer; begin   do     List…
Delphi XE2 之 FireMonkey 入门(33) - 控件基础: TFmxObject: SaveToStream.LoadFromStream.SaveToBinStream.LoadFromBinStream SaveToStream().LoadFromStream() 对应文本流;SaveToBinStream().LoadFromBinStream() 对应二进制流; 相对文本流, 二进制流会小一些. 有这几个方法, 控件数据与状态的序列化就太容易了. 示例:1.控件: L…
Delphi XE2 之 FireMonkey 入门(32) - 数据绑定: TBindingsList: TBindList.TBindPosition [未完成...] //待补...…
Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; ClientDataSet1 : TClientDataSet; Label1        : TLabel; Edit1          : TEdit; Memo1          : TMemo; ImageControl1  : TImageControl; BindNavigator1 :…
Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件 表达式中的函数有限, 譬如我想通过绑定输出文本的长度(譬如在 Label1 中绑定输出 Edit1.Text 的长度)就没有相应的函数; 这可在 TBindExpression 的 OnAssigningValue 事件中处理. TBindExpression 和它的兄弟们 (TBindExprItems.TBin…
Delphi XE2 之 FireMonkey 入门(29) - 数据绑定: TBindingsList: 表达式的 Evaluate() 方法 TBindingsList 中可能不止一个表达式, 通过表达式的 Evaluate 方法可单独提交绑定, 并可在 Active = False 时提交.在 TBindExprItems 中对应的方法是 EvaluateFormat. 测试设想: Label1.Label2 的绑定源同是 Edit1, 分别提交绑定. 1.在窗体上加控件: Label1.…
Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 Label1 显示 ListBox1 的选项, 用 Label2 显示 CheckBox1 的状态. 1.放控件: Label1.Label2.ListBox1.CheckBox1.BindingsList1.BindScope1;2.激活 ListBox1 的 OnClick 事件和窗体的默认事…
Delphi XE2 之 FireMonkey 入门(27) - 数据绑定: TBindingsList: TBindScope 如果在编写表达式时, 如果能够随意指认需要的控件就好了(通过 Owner 也可以勉强做到), TBindScope 就是解决这个问题的. 示例设想: 把三个 TEdit 的 Text 绑定到一个 TLabel. 在窗体上添加 Label1.Edit1.Edit2.Edit3.BindingsList1.BindScope1; 激活 Edit1 和窗体的默认事件. un…
Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems 如果要给一对 "源控件" 和 "目标控件" 写多个表达式, 使用 TBindExpression 就不如 TBindExprItems 了. TBindExprItems 中的表达式又分两组: FormatExpressions.ClearExpressions, 后者是在断开绑定时的表达式. 示例设想:1.TrackBar1 为…
Delphi XE2 之 FireMonkey 入门(25) - 数据绑定: TBindingsList: 表达式的灵活性及表达式函数 绑定表达式中可以有简单的运算和字符串连接, 但字符串需放在双引号中.还可以使用 TBindingsList.Methods 提供的一组表达式函数(分别来自 System.Bindings.Methods 和 Data.Bind.EngExt 单元): ToStr() ToVariant() Round() Format() UpperCase() LowerCa…
FireMonkey 的控件都是自己绘制的(而不是基于系统组件), 我想它们应该是基于一些基本图形; 就从基本图形开始吧. FMX.Objects 单元给出的类: TShape //基本图形的基类 TLine TRectangle TRoundRect TCalloutRectangle TEllipse TCircle TPie TArc TPath TText TImage TPaintBox TSelection TSelectionPoint 添加一个 TRectangle, 先纵观一下…
Delphi XE2 的 FireMonkey 是跨平台的, 暂时只准备看看它在 Windows 下(我是 32 位 Win7)的应用情况. 很新的东西, 相信有了它, 以后的界面将会更灵活.漂亮, 也会淘汰掉诸多皮肤.透明.图像等第三方组件, 但不知和 Win8 的 WinRT 有无关联. 为了它, Delphi XE2 的诸多单元加了前缀, 诸如:Bde.Data.Datasnap.FMX.IB.Macapi.Posix.Soap.System.System.Bindings.System.…
参考: 和 FMX 相关的类(表) TFmxObject IFreeNotification             TAnimation TBitmapAnimation           TBitmapListAnimation           TColorAnimation           TColorKeyAnimation           TFloatAnimation           TFloatKeyAnimation           TGradientAni…
TText 也是从 TShape(TControl -> TShape)继承; 而与之类似的 TLabel 的继承序列是 TControl -> TStyledControl -> TTextControl -> TLabel.TText 的主要成员: { 属性 } Text          : string;    //文本内容 Font          : TFont;      //字体 Fill          : TBrush;    //文本画刷 HorzText…
在窗体上添加 TrackBar1.Edit1.Label1, 然后设置属性(可在设计时): procedure TForm1.FormCreate(Sender: TObject); begin   Edit1.BindingSource := TrackBar1;  //将 TrackBar1 的值绑定在 Edit1   Label1.BindingSource := TrackBar1; //将 TrackBar1 的值绑定在 Label1 end; {之后, Edit1.Text 和 La…
我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画. 在 FMX 下, 控件可以任意绘制, 各部件个性化的属性可以统一保存成一个 *.style 文件.XE2 在 "...\Program Files\Embarcadero\RAD Studio\9.0\Redist\styles\Fmx\" 下提供了如下样式文件: Air.Style Amakrits.Style AquaGraphite.…
刚打开 XE2 时, 就从 Tool Palette 窗口的 Effects 组中发现洋洋洒洒的六十多个特效... 每个特效分别对应一个类, 分别来自 FMX.Effects 和 FMX.Filter.Effects 单元.FMX.Effects 中的特效属于附加特效, FMX.Filter.Effects 中的特效只是某种滤镜效果; 它们都是滤镜的一种快捷应用. 每个特效有不同的参数; 因都是直接或间接地继承与 FMX.Types 中的 TEffect, 也都拥有 Trigger.Enable…
1.新建 FM(HD) 工程, 先添加 TLine(默认名称是 Line1);2.在 Line1 选择状态下添加 Button1;3.取消选择后添加 Button2 此时, Button1.Parent 是 Line1; Button2.Parent 是窗体. unit Unit1; interface uses   System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,   FMX.Type…