1、建立 FM(HD) 工程, 先添加 TLine(預設名稱是 Line1);2、在 Line1 選擇狀態下添加 Button1;3、取消選擇後添加 Button2此時, Button1.Parent 是 Line1; Button2.Parent 是表單.unit Unit1;interfaceuses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types,
不是 TColor, 是 TAlphaColor 了.TAlphaColor = type Cardinal; 還是一個整數.四個位元組分別是: AA RR GG BB(透明度、紅、綠、藍); 這和 TColor 的顏色序相反, 並增加了透明度.在 HD 表單上添加一個 TRectangle 和三個 TButton, 測試://下面四種賦值方法相同procedure TForm1.Button1Click(Sender: TObject);begin
有兩個和複製相關的方法: Clone()、CloneChildFromStream().Clone() 很好用, 但 CloneChildFromStream() 的源碼很明顯地寫錯了(是小問題, 誰外語好去報一下).procedure TForm1.FormCreate(Sender: TObject);var i: Integer;begin for i := 0 to 9 do ListBox1.Items.Add('Item' + IntToStr(i));end;{把
TScrollBox 是不少控制項(TMemo、TListBox、TStringGrid、TTreeView、TImageViewer 等)的基礎, 所以先學.TVertScrollBox 只比 TScrollBox 少了豎捲軸.TFramedScrollBox、TFramedVertScrollBox 只是套用了不同的樣式, 有可視的架構.{ TScrollBox }public constructor Create(...); override; // destructor
{ TControl }public constructor Create(...); override; // destructor Destroy; override; // procedure AddObject(...); override; //添加對象 procedure RemoveObject(...); override; //移除對象 procedure SetNewScene(...); virtual; //設定新情境
樣本構想: 用 Label1 顯示 ListBox1 的選項, 用 Label2 顯示 CheckBox1 的狀態.1、放控制項: Label1、Label2、ListBox1、CheckBox1、BindingsList1、BindScope1;2、啟用 ListBox1 的 OnClick 事件和表單的預設事件.unit Unit1;interfaceuses System.SysUtils, System.Types, System.UITypes, System.Classes,
如果要給一對 "原始檔控制" 和 "目標控制項" 寫多個運算式, 使用 TBindExpression 就不如 TBindExprItems 了.TBindExprItems 中的運算式又分兩組: FormatExpressions、ClearExpressions, 後者是在斷開綁定時的運算式.樣本設想:1、TrackBar1 為源, 把其 Value 值綁定給 Edit1.Text 和 Edit1.Width 和 Label1.Text;2、斷開綁定時, 在 Edit1 中顯示
TFmxObject 增加了 TagObject、TagFloat、TagString, 算上從 TComponent 繼承的 Tag, 可以暫存多種類型的資料了.ChildrenCount、Children[] 代替了之前的 ControlCount、Controls[].有增刪 Children 的幾個方法: AddObject()、InsertObject()、RemoveObject()、Exchange()、DeleteChildren()Index 屬性是控制項在 Children
它們都是結構, TPointF、TRectF 屬新增, 其它也都有升級; 現在都擁有豐富的方法和方便的運算子多載; 且有一組相關的公用函數.這組內容重要的是它們都來自 System.Types 單元, 也就是不僅僅在 FM 中可用.TPoint:Create(); //{運算子多載}Equal; // =NotEqual; // Add; // +Subtract; // -Implicit; // 可從
SaveToStream()、LoadFromStream() 對應文字資料流;SaveToBinStream()、LoadFromBinStream() 對應二進位流; 相對文字資料流, 二進位流會小一些.有這幾個方法, 控制項資料與狀態的序列化就太容易了.樣本:1、控制項: ListBox1、Button1、Button22、事件: Button1.OnClick、Button2.OnClick、Form1.OnCreateunit Unit1;interfaceuses
值得注意的變化:1、其父類 TScrollBox 的許多特性也很有用處, 如: Memo1.UseSmallScrollBars := True;2、內部使用了一個棧列表管理動作, 現在可以執行多步撤銷(UnDo).3、使用了一個新的結構體 TCaretPosition 來描述當前位置, 並為該結構提供了一個公用的快速建構函式 ComposeCaretPos(). TCaretPosition = record Line, Pos: Integer;
FireMonkey 的控制項都是自己繪製的(而不是基於系統組件), 我想它們應該是基於一些基本圖形; 就從基本圖形開始吧.FMX.Objects 單元給出的類:TShape //基本圖形的基類TLineTRectangleTRoundRectTCalloutRectangleTEllipseTCircleTPieTArcTPathTTextTImageTPaintBoxTSelectionTSelectionPoint添加一個 TRectangle, 先縱觀一下它的可用功能:{
相關控制項: TMenuBar、TPopupMenu、TMainMenu; 它們都是要包含 TMenuItem; 在設計時添加 TMenuItem 很容易.其中的 TMainMenu 暫不能應用其他樣式; TMenuBar 只有一個值得注意 UseOSMenu 屬性.控制項 PopupMenu 屬性用於指定右鍵菜單.暫時無法直接為表單指定右鍵菜單, 因為表單現在沒有 PopupMenu 屬性; 我想到的辦法是在表單上覆蓋一個 TPanel 或 TRectangle:procedure
TBindingsList 中可能不止一個運算式, 通過運算式的 Evaluate 方法可單獨提交綁定, 並可在 Active = False 時提交.在 TBindExprItems 中對應的方法是 EvaluateFormat.測試設想: Label1、Label2 的繫結來源同是 Edit1, 分別提交綁定.1、在表單上加控制項: Label1、Label2、Edit1、BindingsList1;2、啟用 Edit1 的 OnKeyUp、OnChange 事件,
把 FireMonkey 簡稱為 FM 吧. FM 的表單繼續使用 Left、Top 屬性, 但更多控制項不是了.//FM 控制項的位置控制不再是 Left、Top, 取而代之的是 Position 屬性procedure TForm1.Button1Click(Sender: TObject);begin Rectangle1.Position.X := Rectangle1.Position.X + 10; Rectangle1.Position.Y :=
如果在編寫運算式時, 如果能夠隨意指認需要的控制項就好了(通過 Owner 也可以勉強做到), TBindScope 就是解決這個問題的.樣本設想: 把三個 TEdit 的 Text 綁定到一個 TLabel.在表單上添加 Label1、Edit1、Edit2、Edit3、BindingsList1、BindScope1; 啟用 Edit1 和表單的預設事件.unit Unit1;interfaceuses System.SysUtils, System.Types,
TObjectTPersistentTComponentIInterface, IInterfaceComponentReferenceTBasicActionTControlActionLinkTApplicationTBindNavigatorControllerTPlatform TPlatformCocoaTScreenTFmxObject參見 TFmxObject 的子類們(表) TBasicBindComponent ->
運算式中的函數有限, 譬如我想通過綁定輸出文本的長度(譬如在 Label1 中綁定輸出 Edit1.Text 的長度)就沒有相應的函數;這可在 TBindExpression 的 OnAssigningValue 事件中處理.TBindExpression 和它的兄弟們
在表單上添加 TrackBar1、Edit1、Label1, 然後設定屬性(可在設計時):procedure TForm1.FormCreate(Sender: TObject);begin Edit1.BindingSource := TrackBar1; //將 TrackBar1 的值綁定在 Edit1 Label1.BindingSource := TrackBar1; //將 TrackBar1 的值綁定在 Label1end;{之後, Edit1.Text 和
準備用 TBindingsList 重做上一個例子.可以先把 TBindingsList 理解為是一組綁定運算式(TBindExpression)的集合;官方應該是提倡在設計時完成 TBindExpression 的建立與參數設定, 但我覺得看運行時的代碼會更容易理解.1、先在表單上添加 TrackBar1、Edit1、Label1、BindingsList1;2、啟用表單和 TrackBar1 的預設事件;3、然後將通過代碼把 TrackBar1.Value 分別綁定到 Edit1.Text、