深入Delphi FMX从FMX.Types开始(一、原理)

目录

深入Delphi FMX从FMX.Types开始(一、原理)

一、FMX.Types中那些个有用的东西(倒序),你们记着晃一眼及时用哟

1.001、虚拟键盘相关(2083、572行次)

1.002、共享内容个克隆缓存中的属性相关(2090行次)

1.003、Caret及其光标闪烁相关(2071、872行次),  TFlasherInterval = -1..1000;

1.004、Screen屏幕显示区域和边界相关(2048行次)

1.005、TFmxObject及泛型的枚举过滤器相关(2014行次)

1.006、全局的系统空闲消息类相关(2045行次),你可以用它去实现系统空闲消息的发布、订阅和监听

1.007、移除字符串中的&符号但保留原始位置及格式相关(2010行次)

1.008、提供debug调试消息的静态方法日志输出相关(1940行次)

1.009、元素为TAlignLayout的全局布局TAnchors数组变量,已枚举各种可能的情况进行赋值(1836行次),可用于遍历或枚举

1.010、注册FMX类为持久类相关(1831行次)

1.011、忽略ARC引用计数并强制释放对象:将AObject赋值为nil,从内存地址中清除(1829行次)

1.012、判断并捕获FMX应用的句柄是否有效相关(1826行次), TFmxHandle = THandle;  THandle = NativeUInt;  Result := (Hnd <> 0);

1.013、FMX文字语言及翻译类相关(1496、1784及1802行次)

1.014、动态计算并部署FMX对象Align布局的相关方法(1790行次)

1.015、动态维护StyleLookup的相关方法(1773行次)

1.016、FMX中的TPixelFormat像素格式、颜色及其转化的相关方法(1756行次)

1.017、FMX中的持久类TPersistent相关的维护接口(1700行次)

1.018、FMX中的TGuillotineBinPack矩形区域截取类相关(1594行次)

1.019、FMX中的线条的索引及长短的捕获类相关(1566行次)

1.020、FMX内置的TTimer毫秒计时器及其计时接口服务相关(1530行次)

1.021、FMX的弹出菜单PopupMenu相关(1243行次)

1.022、FMX的TTabList类及其接口相关(1219、676行次)

 1.023、通过StyleName快速访问FMX对象的相关类(1034行次)

1.024、TEnumProcResult枚举过程结果的全局枚举类型(1031行次)

1.025、FMX对象TFmxObject相关类(1053行次)

1.026、FMX对象列表类TFmxObjectList及其子对象TFmxChildrenList的枚举列表类、FMX对象间的比较匿名函数的参照全局类(1053行次)

1.027、FMX对象的位置、纵横比、旋转的外观转化的本地持久类(967行次)

1.028、FMX曲线类TSpline(699行次)

1.029、FMX中Items类型等容器接口(669行次)

 1.030、FMX原生控件的句柄接口(555行次)

1.031、FMX对象及其子对象重新布局接口IAlignRoot(549行次)

1.032、FMX对象的IRoot祖先根节点接口(524行次)

1.033、FMX对象嵌套的内容捕获接口(407行次)

1.034、FMX控件的行为的释放通知接口(430行次),比如焦点等等各种事件

1.035、FMX的其它与布局和显示相关的基础常量和枚举类型(193、74行次)


深入Delphi FMX从FMX.Types开始(一、原理)

Delphi中System.Types和FMX.Types和Androidapi.JNI.JavaTypes等平台属性的对应关系:

Androidapi.JNI.JavaTypes等平台属性======》FMX.Types======》System.Types====》System.TypInfo

一、FMX.Types中那些个有用的东西(倒序),你们记着晃一眼及时用哟

1.001、虚拟键盘相关(2083、572行次)


typeTShowVirtualKeyboard = procedure (const Displayed: boolean;const Caret: TCustomCaret;var VirtualKeyboardState: TVirtualKeyboardStates);procedure RegisterShowVKProc(const ShowVirtualKeyboard: TShowVirtualKeyboard);typeTKeyKind = (Usual, Functional, Unknown);TKeyKindHelper = record helper for TKeyKind
  TVirtualKeyboardType = (Default, NumbersAndPunctuation, NumberPad, PhonePad, Alphabet, URL, NamePhonePad,EmailAddress, DecimalNumberPad);TVirtualKeyboardTypeHelper = record helper for TVirtualKeyboardTypeconstvktDefault = TVirtualKeyboardType.Default deprecated 'Use TVirtualKeyboardType.Default';vktNumbersAndPunctuation = TVirtualKeyboardType.NumbersAndPunctuation deprecated 'Use TVirtualKeyboardType.NumbersAndPunctuation';vktNumberPad = TVirtualKeyboardType.NumberPad deprecated 'Use TVirtualKeyboardType.NumberPad';vktPhonePad = TVirtualKeyboardType.PhonePad deprecated 'Use TVirtualKeyboardType.PhonePad';vktAlphabet = TVirtualKeyboardType.Alphabet deprecated 'Use TVirtualKeyboardType.Alphabet';vktURL = TVirtualKeyboardType.URL deprecated 'Use TVirtualKeyboardType.URL';vktNamePhonePad = TVirtualKeyboardType.NamePhonePad deprecated 'Use TVirtualKeyboardType.NamePhonePad';vktEmailAddress = TVirtualKeyboardType.EmailAddress deprecated 'Use TVirtualKeyboardType.EmailAddress';end;TVirtualKeyboardState = (AutoShow, Visible, Error, Transient);TVirtualKeyboardStateHelper = record helper for TVirtualKeyboardStateconstvksAutoShow = TVirtualKeyboardState.AutoShow deprecated 'Use TVirtualKeyboardState.AutoShow';vksVisible = TVirtualKeyboardState.Visible deprecated 'Use TVirtualKeyboardState.Visible';vksError = TVirtualKeyboardState.Error deprecated 'Use TVirtualKeyboardState.Error';vksTransient = TVirtualKeyboardState.Transient deprecated 'Use TVirtualKeyboardState.Transient';end;TVirtualKeyboardStates = set of TVirtualKeyboardState;TReturnKeyType = (Default, Done, Go, Next, Search, Send);TReturnKeyTypeHelper = record helper for TReturnKeyTypeconstrktDefault = TReturnKeyType.Default deprecated 'Use TReturnKeyType.Default';rktDone = TReturnKeyType.Done deprecated 'Use TReturnKeyType.Done';rktGo = TReturnKeyType.Go deprecated 'Use TReturnKeyType.Go';rktNext = TReturnKeyType.Next deprecated 'Use TReturnKeyType.Next';rktSearch = TReturnKeyType.Search deprecated 'Use TReturnKeyType.Search';rktSend = TReturnKeyType.Send deprecated 'Use TReturnKeyType.Send';end;IVirtualKeyboardControl = interface['{41127080-97FC-4C30-A880-AB6CD351A6C4}']procedure SetKeyboardType(Value: TVirtualKeyboardType);function GetKeyboardType: TVirtualKeyboardType;property KeyboardType: TVirtualKeyboardType read GetKeyboardType write SetKeyboardType;//procedure SetReturnKeyType(Value: TReturnKeyType);function GetReturnKeyType: TReturnKeyType;property ReturnKeyType: TReturnKeyType read GetReturnKeyType write SetReturnKeyType;//function IsPassword: Boolean;end;

1.002、共享内容个克隆缓存中的属性相关(2090行次)

varSharedContext: TRttiContext;ClonePropertiesCache: TDictionary<string, TList<TRttiProperty>>;

1.003、Caret及其光标闪烁相关(2071、872行次),  TFlasherInterval = -1..1000;


/// <summary>Registers the flasher class for the TCustomCaret object specified
/// in the CaretClass parameter.</summary>
procedure RegisterFlasherClass(const FlasherClass: TFmxObjectClass; const CaretClass: TCaretClass);
/// <summary>Returns the class of a flasher registered for the TCustomCaret
/// object specified in the CaretClass parameter.</summary>
function FlasherClass(const CaretClass: TCaretClass): TFmxObjectClass;
/// <summary>Returns the flasher object registered for the TCustomCaret object
/// specified in the CaretClass parameter.</summary>
function Flasher(const CaretClass: TCaretClass): TFmxObject;
/// <summary>Checks whether a flasher is registered for the TCustomCaret object
/// specified in the CaretClass parameter.</summary>
function AssignedFlasher(const CaretClass: TCaretClass): boolean;
TCaretDisplayChanged = procedure (Sender: TCustomCaret; const VirtualKeyboardState: TVirtualKeyboardStates) of object;TCaretClass = class of TCustomCaret;TCustomCaret = class (TPersistent)private[Weak]FOwner: TFMXObject;FIControl: IControl;FVisible: Boolean;FDisplayed: Boolean;FTemporarilyHidden: Boolean;FChanged: Boolean;FUpdateCount: Integer;FOnDisplayChanged: TCaretDisplayChanged;FColor: TAlphaColor;FDefaultColor: TAlphaColor;FPos: TPointF;FSize: TSizeF;FInterval: TFlasherInterval;FReadOnly: Boolean;procedure SetColor(const Value: TAlphaColor);procedure SetPos(const Value: TPointF);procedure SetSize(const Value: TSizeF);procedure SetTemporarilyHidden(const Value: boolean);procedure SetVisible(const Value: Boolean);procedure SetInterval(const Value: TFlasherInterval);procedure SetReadOnly(const Value: boolean);procedure StartTimer;function GetWidth: Word;procedure SetWidth(const Value: Word);function GetFlasher: IFlasher;procedure SetDefaultColor(const Value: TAlphaColor);protectedfunction GetOwner: TPersistent; override;procedure DoDisplayChanged(const VirtualKeyboardState: TVirtualKeyboardStates); virtual;procedure DoUpdateFlasher; virtual;publicconstructor Create(const AOwner: TFMXObject); virtual;destructor Destroy; override;procedure Assign(Source: TPersistent); override;/// <summary>///   hide the caret/// </summary>procedure Hide; virtual;/// <summary>///   if possible (CanShow = True and Visible = True), the caret show./// </summary>procedure Show; virtual;/// <summary>///   This method is performed after changing the Displayed/// </summary>property Pos: TPointF read FPos write SetPos;property Size: TSizeF read FSize write SetSize;property Color: TAlphaColor read FColor write SetColor default TAlphaColorRec.Null;property DefaultColor: TAlphaColor read FDefaultColor write SetDefaultColor;property Interval: TFlasherInterval read FInterval write SetInterval default 0;property Owner: TFMXObject read FOwner;property Control: IControl read FIControl;procedure BeginUpdate;procedure EndUpdate;class function FlasherName: string; virtual; abstract;property UpdateCount: integer read FUpdateCount;/// <summary>///   The update of the "Flasher", if UpdateCount = 0./// </summary>procedure UpdateFlasher;/// <summary>///   This property controls the visibility of a caret, for the control in which the input focus./// </summary>property Visible: Boolean read FVisible write SetVisible;/// <summary>///   The function returns true, if the control is visible, enabled,///   has the input focus and it in an active form/// </summary>function CanShow: Boolean; virtual;/// <summary>///   This property is set to True, after the successful execution of///   method Show, and is set to False after method Hide/// </summary>property Displayed: Boolean read FDisplayed;/// <summary>///   If this property is 'true', the blinking control is invisible///   and does not take values of Visible, Displayed.///   When you change the properties, methods DoShow, DoHide, DoDisplayChanged not met./// </summary>property TemporarilyHidden: boolean read FTemporarilyHidden write SetTemporarilyHidden;/// <summary>///   Blinking visual component is displayed.///   Usually this line, having a thickness of one or two pixels./// </summary>property Flasher: IFlasher read GetFlasher;property ReadOnly: boolean read FReadOnly write SetReadOnly;property Width: Word read GetWidth write SetWidth default 0;property OnDisplayChanged: TCaretDisplayChanged read FOnDisplayChanged write FOnDisplayChanged;end;

1.004、Screen屏幕显示区域和边界相关(2048行次)


TDisplay = record

1.005、TFmxObject及泛型的枚举过滤器相关(2014行次)


typeTEnumerableFilter<F; T: TFmxObject> = class(TEnumerable<T>)publicconstructor Create(const FullEnum: TEnumerable<F>; SelfDestruct: Boolean = False; const Pred: TPredicate<T> = nil);class function Filter(const Src: TEnumerable<F>; const Predicate: TPredicate<T> = nil): TEnumerableFilter<F,T>;typeTFilterEnumerator = class(TEnumerator<T>)publicconstructor Create(const Enumerable: TEnumerable<F>; const Cleanup: TEnumerableFilter<F,T>;const Pred: TPredicate<T>);destructor Destroy; override;property Current: T read GetCurrent;function MoveNext: Boolean;end;end;

1.006、全局的系统空闲消息类相关(2045行次),你可以用它去实现系统空闲消息的发布、订阅和监听

  TIdleMessage = class(System.Messaging.TMessage)

1.007、移除字符串中的&符号但保留原始位置及格式相关(2010行次)

//但保留原始位置及格式
function DelAmp(const AText: string): string

1.008、提供debug调试消息的静态方法日志输出相关(1940行次)

{ Debugging }
type/// <summary>Provides static methods for debug messages.</summary>Log = class abstractpublic type/// <summary>A conversion function used to convert array elements in ArrayToString</summary>TToStringFunc = reference to function(const AObject: TObject): string;/// <summary>A timestamp of specific point in procedure execution. TLogMarks are used by Log.Trace./// See Trace and TLogToken.</summary>TLogMark = record/// <summary>A short message</summary>Msg: string;/// <summary>Timestamp</summary>Time: TDateTime;end;/// <summary>A token received in Trace callback. Token can be used to mark specific points in time during///  procedure execution. Use Mark(Message) to mark specific moment in time. Marks will be printed/// in sequence with their elapsed times in Trace output.</summary>TLogToken = classpublic/// <summary>Mark time during timed execution of a procedure.</summary>procedure Mark(const Msg: string);/// <summary>Get a mark at Index.</summary>property MarkAt[const Index: Integer]: TLogMark read GetMarkAt;/// <summary>Count of accumulated Marks.</summary>property Count: Integer read GetCount;end;public/// <summary>Log a debug message. Same arguments as Format.</summary>class procedure d(const Fmt: string; const Args: array of const); overload;/// <summary>Log a simple debug message.</summary>class procedure d(const Msg: string); overload; inline;/// <summary>Log a debug message with Tag, object data of Instance, Method that invokes the logger and message Msg./// </summary>class procedure d(const Tag: string; const Instance: TObject; const Method, Msg: string); overload; inline;/// <summary>Log a debug message with Tag, object data of Instance and a message Msg</summary>class procedure d(const Tag: string; const Instance: TObject; const Msg: string); overload; inline;/// <summary>Log a time stamp with message Msg</summary>class procedure TimeStamp(const Msg: string); overload;/// <summary>Perform a timed execution of Func and print execution times, return function result./// Proc receives a parameter TLogToken which can be used to mark specific points where timestamps should be taken/// in addition to complete procedure time.</summary>class function Trace<TResult>(const Tag: string; const Func: TFunc<TLogToken, TResult>;const Threshold: Integer = -1): TResult; overload;/// <summary>A convenience variant of Trace&lt;TResult&gt; when token is not needed.</summary>class function Trace<TResult>(const Tag: string; const Func: TFunc<TResult>; const Threshold: Integer = -1): TResult; overload;/// <summary>A convenience variant of Trace&lt;TResult&gt; for procedures.</summary>class procedure Trace(const Tag: string; const Proc: TProc<TLogToken>; const Threshold: Integer = -1); overload;/// <summary>A convenience variant of Trace&lt;TResult&gt; for procedures when token is not needed.</summary>class procedure Trace(const Tag: string; const Proc: TProc; const Threshold: Integer = -1); overload;/// <summary>Get a basic string representation of an object, consisting of ClassName and its pointer</summary>class function ObjToString(const Instance: TObject): string;/// <summary>Get a string representation of array using MakeStr function to convert individual elements.</summary>class function ArrayToString(const AArray: TEnumerable<TFmxObject>; const MakeStr: TToStringFunc): string; overload;/// <summary>Get a string representation of array using TObject.ToString to convert individual elements.</summary>class function ArrayToString(const AArray: TEnumerable<TFmxObject>): string; overload;/// <summary>转储导出指定的TFmxObject及其所有子对象字符串Dump complete TFmxObject with all its children.</summary>class procedure DumpFmxObject(const AObject: TFmxObject; const Nest: Integer = 0);end;

1.009、元素为TAlignLayout的全局布局TAnchors数组变量,已枚举各种可能的情况进行赋值(1836行次),可用于遍历或枚举

varAnchorAlign: array [TAlignLayout] of TAnchors

1.010、注册FMX类为持久类相关(1831行次)


procedure RegisterFmxClasses(const RegClasses: array of TPersistentClass); overload;
procedure RegisterFmxClasses(const RegClasses: array of TPersistentClass;const GroupClasses: array of TPersistentClass); overload;

1.011、忽略ARC引用计数并强制转化变量对象AObject为可持久对象TObject并释放AObject:将AObject的指针赋值为nil,从内存地址中清除(1829行次)

procedure DisposeOfAndNil(var AObject);

1.012、判断并捕获FMX应用的句柄是否有效相关(1826行次), TFmxHandle = THandle;  THandle = NativeUInt;  Result := (Hnd <> 0);

function IsHandleValid(Hnd: TFmxHandle): Boolean;

1.013、FMX文字语言及翻译类相关(1496、1784及1802行次)

{ TLang }TLang = class(TFmxObject)private//..........protected{ vcl }//..........publicconstructor Create(AOwner: TComponent); override;destructor Destroy; override;procedure AddLang(const AName: string);procedure LoadFromFile(const AFileName: string);procedure SaveToFile(const AFileName: string);property Original: TStrings read FOriginal;property Resources: TStrings read FResources;property LangStr[const Index: string]: TStrings read GetLangStr;publishedproperty AutoSelect: Boolean read FAutoSelect write FAutoSelect default True;property FileName: string read FFileName write FFileName;property StoreInForm: Boolean read FStoreInForm write FStoreInForm default True;property Lang: string read FLang write SetLang;end;{ Lang }procedure LoadLangFromFile(const AFileName: string);
procedure LoadLangFromStrings(const AStr: TStrings);
procedure ResetLang;typeTCustomTranslateProc = function(const AText: string): string;varCustomTranslateProc: TCustomTranslateProc;{ This function use to collect string which can be translated. Just place this function at Application start. }procedure CollectLangStart;
procedure CollectLangFinish;
{ This function return Strings with collected text }
function CollectLangStrings: TStrings;function Translate(const AText: string): string;
function TranslateText(const AText: string): string;

1.014、动态计算并部署FMX对象Align布局的相关方法(1790行次)

{ Align }procedure ArrangeControl(const Control: IAlignableObject; AAlign: TAlignLayout; const AParentWidth, AParentHeight: Single;const ALastWidth, ALastHeight: Single; var R: TRectF);procedure AlignObjects(const AParent: TFmxObject; APadding: TBounds; AParentWidth, AParentHeight: Single;var ALastWidth, ALastHeight: Single; var ADisableAlign: Boolean);procedure RecalcAnchorRules(const Parent : TFmxObject; Anchors : TAnchors; const BoundsRect : TRectF;var AOriginalParentSize:TPointF; var AAnchorOrigin:TPointF; var AAnchorRules:TPointF);
procedure RecalcControlOriginalParentSize(const Parent: TFmxObject; ComponentState : TComponentState;const Anchoring: Boolean; var AOriginalParentSize : TPointF);

1.015、动态维护StyleLookup的相关方法(1773行次)

{ Resources }typeTCustomFindStyleResource = function(const AStyleLookup: string; const Clone: Boolean = False): TFmxObject of object;procedure AddCustomFindStyleResource(const ACustomProc: TCustomFindStyleResource);
procedure RemoveCustomFindStyleResource(const ACustomProc: TCustomFindStyleResource);procedure AddResource(const AObject: TFmxObject);
procedure RemoveResource(const AObject: TFmxObject);
function FindStyleResource(const AStyleLookup: string; const Clone: Boolean = False): TFmxObject;

1.016、FMX中的TPixelFormat像素格式、颜色及其转化的相关方法(1756行次)

{ Pixel Formats }function PixelToFloat4(Input: Pointer; InputFormat: TPixelFormat): TAlphaColorF;
procedure Float4ToPixel(const Input: TAlphaColorF; Output: Pointer; OutputFormat: TPixelFormat);function PixelToAlphaColor(Input: Pointer; InputFormat: TPixelFormat): TAlphaColor;
procedure AlphaColorToPixel(Input: TAlphaColor; Output: Pointer; OutputFormat: TPixelFormat);procedure ScanlineToAlphaColor(Input: Pointer; Output: PAlphaColor; PixelCount: Integer; InputFormat: TPixelFormat);
procedure AlphaColorToScanline(Input: PAlphaColor; Output: Pointer; PixelCount: Integer; OutputFormat: TPixelFormat);
procedure ChangePixelFormat(const AInput: Pointer; const AOutput: Pointer; const APixelCount: Integer;const AInputFormat, AOutputFormat: TPixelFormat);function PixelFormatToString(Format: TPixelFormat): string;
function FindClosestPixelFormat(Format: TPixelFormat; const FormatList: TPixelFormatList): TPixelFormat;

1.017、FMX中的持久类TPersistent相关的维护接口(1700行次)

  ///<summary>Provider a persistent object for the designer. A different TPersistent can be routed into the/// designer using this interface. This can be used to expose properties of non-controls in the/// Object Inspector.</summary>IPersistentProvider = interface['{B0B03758-A2F5-49B9-9A39-C2C2405B2EAD}']///<summary>Return the provided persistent</summary>function GetPersistent: TPersistent;end;///<summary>Shim is a representative of a visual non-control object in the Designer. The shim needs to implement/// this interface in order to let the Designer know about its bounding rectangles.///</summary>IPersistentShim = interface['{B6F815C7-BFD1-489D-A661-0CD4639EC920}']///<summary>Return bounding rectangle of shim.</summary>function GetBoundsRect: TRect;end;///<summary>Extension of TPersistent directly exposed to the Designer.</summary>IDesignablePersistent = interface['{4A731994-9060-4F3C-92D7-C123B04601D4}']///<summary>GetDesignParent should return a TPersistent known to the designer, e.g. its parent TControl.</summary>function GetDesignParent: TPersistent;///<summary>Bounding rectangle representing this TPersistent in the designer</summary>function GetBoundsRect: TRect;///<summary>/// Bind this persistent with its shim, thus enabling GetBoundsRect without using the host./// Example: TItemAppearanceProperties as IDesignablePersistent are bound to the TListItemShim///          Their counterpart FmxReg.TListViewObjectsProperties are bound to the same TListItemShim///</summary>procedure Bind(AShim: IPersistentShim);///<summary>/// Unbind this persistent. The implementation would normally clear its reference to IPersistentShim.///</summary>procedure Unbind;///<summary>True if this TPersistent is currently in Design mode and wants the Designer to create///IItem for itself.</summary>function BeingDesigned: Boolean;end;///<summary>Interface for TPersistent to receive bounding rectangle changes from the Designer.</summary>IMovablePersistent = interface['{A86F9221-09E9-40A7-AF0E-5C3EB859C297}']/// <summary>Set bounds rectangle.</summary>procedure SetBoundsRect(const AValue: TRect);end;///<summary>Interface that allows binding a TPersistent with a TreeView Sprig in StructureView</summary>ISpriggedPersistent = interface

1.018、FMX中的TGuillotineBinPack矩形区域截取类相关(1594行次)

{ TGuillotineBinPack }TFreeChoiceHeuristic = (BestAreaFit, BestShortSideFit, BestLongSideFit, WorstAreaFit, WorstShortSideFit,WorstLongSideFit);TSplitMethodHeuristic = (ShorterLeftoverAxis, LongerLeftoverAxis, MinimizeArea, MaximizeArea, ShorterAxis,LongerAxis);TGuillotineBinPack = classprivate//..........publicconstructor Create; overload;constructor Create(const ASize: TPoint); overload;destructor Destroy; override;procedure Init(const ASize: TPoint);procedure MergeFreeList;function Insert(const NodeSize: TPoint; const Merge: Boolean = True;const FreeChoice: TFreeChoiceHeuristic = TFreeChoiceHeuristic.BestAreaFit;const SplitMethod: TSplitMethodHeuristic = TSplitMethodHeuristic.MinimizeArea): TRect;property Size: TPoint read FSize;property Occupancy: Single read GetOccupancy;property SupportsRectangleInversion: Boolean read FSupportsRectangleInversion write FSupportsRectangleInversion;end;

1.019、FMX中的线条的索引及长短的捕获类相关(1566行次)

{ TLineInfo }PLineMetric = ^TLineMetric;TLineMetric = recordIndex: integer;Len: integer;end;TLineMetricInfo = classprotected//.........publicconstructor Create;destructor Destroy; override;procedure Clear; virtual;property Count: integer read GetCount write SetCount;property Metrics[ind: integer]: PLineMetric read GetMetrics;end;

1.020、FMX内置的TTimer毫秒计时器及其计时接口服务相关(1530行次)

{ TTimer }TTimerProc = procedure of object;IFMXTimerService = interface(IInterface)['{856E938B-FF7B-4E13-85D4-3414A6A9FF2F}']function CreateTimer(Interval: Integer; TimerFunc: TTimerProc): TFmxHandle;function DestroyTimer(Timer: TFmxHandle): Boolean;function GetTick: Double;end;TTimer = class(TFmxObject)
constcIdNoTimer: TFmxHandle = TFmxHandle(-1);

1.021、FMX的弹出菜单PopupMenu相关(1243行次)

{ TCustomPopupMenu }TCustomPopupMenu = class(TFmxObject)private[Weak] FPopupComponent: TComponent;FOnPopup: TNotifyEvent;protectedprocedure DoPopup; virtual;property OnPopup: TNotifyEvent read FOnPopup write FOnPopup;publicprocedure Popup(X, Y: Single); virtual; abstract;property PopupComponent: TComponent read FPopupComponent write FPopupComponent;end;

1.022、FMX的TTabList类及其接口相关(1219、676行次)

  TTabList = class(TAggregatedObject, ITabList)strict private//.........protected//.........publicconstructor Create(const TabStopController: ITabStopController);destructor Destroy; override;procedure Clear;procedure Add(const TabStop: IControl); virtual;procedure Remove(const TabStop: IControl); virtual;procedure Update(const TabStop: IControl; const NewValue: TTabOrder);function IndexOf(const TabStop: IControl): Integer; virtual;function GetCount: Integer; virtual;function GetItem(const Index: Integer): IControl; virtual;function GetTabOrder(const TabStop: IControl): TTabOrder;function FindNextTabStop(const Current: IControl; const MoveForward: Boolean; const Climb: Boolean): IControl;end;TTabListClass = class of TTabList;
  ITabList = interface['{80C67BA2-3064-4d90-A8E1-B00028CA670E}']procedure Add(const TabStop: IControl);procedure Remove(const TabStop: IControl);procedure Update(const TabStop: IControl; const NewValue: TTabOrder);function GetTabOrder(const TabStop: IControl): TTabOrder;function GetCount: Integer;function GetItem(const Index: Integer): IControl;function FindNextTabStop(const Current: IControl; const MoveForward: Boolean; const Climb: Boolean): IControl;property Count: Integer read GetCount;end;ITabStopController = interface['{E7D2E0C5-EA3B-40bd-B728-5E4BB264EFC1}']function GetTabList: ITabList;property TabList: ITabList read GetTabList;end;

 1.023、通过StyleName快速访问FMX对象的相关类(1034行次)

  /// <summary>Index for getting fast access to nested objects by <c>StyleName</c>.</summary>TStyleIndexer = classprivate//.....publicconstructor Create(const AStyle: TFmxObject);destructor Destroy; override;/// <summary>Marks index for lazy update.</summary>procedure NeedRebuild;/// <summary>Updates index, if it's required only.</summary>procedure RebuildIfNeeded;/// <summary>Finds style object by specified <c>StyleLookup</c> value and returns object in <c>AObject</c>.</summary>function FindStyleObject(const AStyleLookup: string; var AObject: TFmxObject): Boolean;/// <summary>Clears index.</summary>procedure Clear;end;

1.024、TEnumProcResult枚举过程结果的全局枚举类型(1031行次)

  TEnumProcResult = (Continue, Discard, Stop);

1.025、FMX对象TFmxObject相关类(1053行次)

{ TFmxObject }TEnumProcResult = (Continue, Discard, Stop);/// <summary>Index for getting fast access to nested objects by <c>StyleName</c>.</summary>TStyleIndexer = classend;TFmxObject = class(TComponent, IFreeNotification, IActionClient)public type/// <summary> Determines the current state of the object/// <para>CallingFreeNotify - state is set before sending notifications in <b>BeforeDestruction</b> method./// See also <b>IFreeNotification</b></para>/// <para>CallingRelease - state is set in <b>Release</b> method</para>/// </summary>TObjectState = set of (CallingFreeNotify, CallingRelease) deprecated 'Support to this state will be removed';strict private//..........private//..........protected//..........publicfunction GetParentComponent: TComponent; override;function HasParent: Boolean; override;protected//..........publicconstructor Create(AOwner: TComponent); override;destructor Destroy; override;procedure BeforeDestruction; override;procedure Release; virtual; deprecated 'Support for this method will be removed';function Released: Boolean; deprecated 'Support for this method will be removed';/// <summary> Describes the current state of this instance. Indicates that a component needs to avoid certain/// actions. <para>See also <b>TComponent.ComponentState</b></para></summary>function ObjectState: TObjectState; deprecated 'Support for this funcionality will be removed';procedure SetRoot(ARoot: IRoot);{ design }procedure SetDesign(Value: Boolean; SetChildren: Boolean = True);{ clone }function Clone(const AOwner: TComponent): TFmxObject;{ childs }procedure AddObject(const AObject: TFmxObject);procedure InsertObject(Index: Integer; const AObject: TFmxObject);procedure RemoveObject(const AObject: TFmxObject); overload;procedure RemoveObject(Index: Integer); overload;function ContainsObject(AObject: TFmxObject): Boolean; virtual;procedure Exchange(const AObject1, AObject2: TFmxObject); virtual;procedure DeleteChildren;function IsChild(AObject: TFmxObject): Boolean; virtual;procedure BringChildToFront(const Child: TFmxObject);procedure SendChildToBack(const Child: TFmxObject);procedure BringToFront; virtual;procedure SendToBack; virtual;procedure AddObjectsToList(const AList: TFmxObjectList);procedure Sort(Compare: TFmxObjectSortCompare); virtual;/// <summary>Loops through the children of this object, and runs the specified procedure once per object as the first parameter in each call.</summary>procedure EnumObjects(const Proc: TFunc<TFmxObject, TEnumProcResult>);{ animation property }procedure AnimateFloat(const APropertyName: string; const NewValue: Single; Duration: Single = 0.2;AType: TAnimationType = TAnimationType.In; AInterpolation: TInterpolationType = TInterpolationType.Linear);deprecated 'Use FMX.Ani.TAnimator instead';procedure AnimateFloatDelay(const APropertyName: string; const NewValue: Single; Duration: Single = 0.2;Delay: Single = 0.0; AType: TAnimationType = TAnimationType.In;AInterpolation: TInterpolationType = TInterpolationType.Linear);deprecated 'Use FMX.Ani.TAnimator instead';procedure AnimateFloatWait(const APropertyName: string; const NewValue: Single; Duration: Single = 0.2;AType: TAnimationType = TAnimationType.In; AInterpolation: TInterpolationType = TInterpolationType.Linear);deprecated 'Use FMX.Ani.TAnimator instead';procedure AnimateInt(const APropertyName: string; const NewValue: Integer; Duration: Single = 0.2;AType: TAnimationType = TAnimationType.In; AInterpolation: TInterpolationType = TInterpolationType.Linear);deprecated 'Use FMX.Ani.TAnimator instead';procedure AnimateIntWait(const APropertyName: string; const NewValue: Integer; Duration: Single = 0.2;AType: TAnimationType = TAnimationType.In; AInterpolation: TInterpolationType = TInterpolationType.Linear);deprecated 'Use FMX.Ani.TAnimator instead';procedure AnimateColor(const APropertyName: string; NewValue: TAlphaColor; Duration: Single = 0.2;AType: TAnimationType = TAnimationType.In; AInterpolation: TInterpolationType = TInterpolationType.Linear);deprecated 'Use FMX.Ani.TAnimator instead';procedure StopPropertyAnimation(const APropertyName: string);{ notify }procedure AddFreeNotify(const AObject: IFreeNotification);procedure RemoveFreeNotify(const AObject: IFreeNotification);{ resource }function FindStyleResource(const AStyleLookup: string; const AClone: Boolean = False): TFmxObject; overload; virtual;{ }property Root: IRoot read FRoot;property Stored: Boolean read FStored write SetStored;{ tags }property TagObject: TObject read FTagObject write FTagObject;property TagFloat: Single read FTagFloat write FTagFloat;property TagString: string read FTagString write FTagString;{ children }property ChildrenCount: Integer read GetChildrenCount;property Children: TFmxChildrenList read FChildrenList;property Data: TValue read GetData write SetData;property Parent: TFmxObject read FParent write SetParent;property Index: Integer read GetIndex write SetIndex;property ActionClient: boolean read GetActionClient;publishedproperty StyleName: string read FStyleName write SetStyleName;end;TTabList = class(TAggregatedObject, ITabList)end;TTabListClass = class of TTabList;

1.026、FMX对象列表类TFmxObjectList及其子对象TFmxChildrenList的枚举列表类、FMX对象间的比较匿名函数的参照全局类(1053行次)

  TFmxObjectSortCompare = reference to function (Left, Right: TFmxObject): Integer;TFmxObjectList = TList<TFmxObject>;TFmxChildrenList = class(TEnumerable<TFmxObject>)strict private//......protected//......publicconstructor Create(const AChildren: TFmxObjectList);destructor Destroy; override;property Count: Integer read GetChildCount;function IndexOf(const Obj: TFmxObject): Integer; virtual;property Items[Index: Integer]: TFmxObject read GetChild; default;end;

1.027、FMX对象的位置、纵横比、旋转的外观转化的本地持久类(967行次)

{ TTransform }TTransform = class(TPersistent)private//......protected//......publicconstructor Create; virtual;destructor Destroy; override;procedure Assign(Source: TPersistent); override;property Matrix: TMatrix read FMatrix;property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;publishedproperty Position: TPosition read FPosition write SetPosition;property Scale: TPosition read FScale write SetScale;property RotationAngle: Single read FRotationAngle write SetRotationAngle;property RotationCenter: TPosition read FRotationCenter write FRotationCenter;end;

1.028、FMX曲线类TSpline(699行次)

  TSpline = class(TObject)private//.........publicconstructor Create(const Polygon: TPolygon);destructor Destroy; override;procedure SplineXY(const t: Single; var X, Y: Single);end;

1.029、FMX中Items类型等容器接口(669行次)

  IItemsContainer = interface['{100B2F87-5DCB-4699-B751-B4439588E82A}']function GetItemsCount: Integer;function GetItem(const AIndex: Integer): TFmxObject;function GetObject: TFmxObject;end;
  IContainerObject = interface['{DE635E60-CB00-4741-92BB-3B8F1F29A67C}']function GetContainerWidth: Single;function GetContainerHeight: Single;property ContainerWidth: single read GetContainerWidth;property ContainerHeight: single read GetContainerHeight;end;

 1.030、FMX原生控件的句柄接口(555行次)

  INativeControl = interface['{3E6F1A17-BAE3-456C-8551-5F6EA92EEE32}']function GetHandle: TFmxHandle;procedure SetHandle(const Value: TFmxHandle);function GetHandleSupported: boolean;property HandleSupported: boolean read GetHandleSupported;property Handle: TFmxHandle read GetHandle write SetHandle;end;

1.031、FMX对象及其子对象重新布局接口IAlignRoot(549行次)

  IAlignRoot = interface['{86DF30A6-0394-4a0e-8722-1F2CDB242CE8}']procedure Realign;procedure ChildrenAlignChanged;end;

1.032、FMX对象的IRoot祖先根节点接口(524行次)

  IRoot = interface['{7F7BB7B0-5932-49dd-9D35-712B2BA5D8EF}']procedure AddObject(const AObject: TFmxObject);procedure InsertObject(Index: Integer; const AObject: TFmxObject);procedure RemoveObject(const AObject: TFmxObject); overload;procedure RemoveObject(Index: Integer); overload;procedure BeginInternalDrag(const Source: TObject; const ABitmap: TObject);function GetActiveControl: IControl;procedure SetActiveControl(const AControl: IControl);function GetCaptured: IControl;procedure SetCaptured(const Value: IControl);function GetFocused: IControl;procedure SetFocused(const Value: IControl);function NewFocusedControl(const Value: IControl): IControl;function GetHovered: IControl;procedure SetHovered(const Value: IControl);function GetObject: TFmxObject;function GetBiDiMode: TBiDiMode;{ access }property Captured: IControl read GetCaptured write SetCaptured;property Focused: IControl read GetFocused write SetFocused;property Hovered: IControl read GetHovered write SetHovered;property BiDiMode: TBiDiMode read GetBiDiMode;end;

1.033、FMX对象嵌套的内容捕获接口(407行次)

  IContent = interface['{96E89B94-2AD6-4AD3-A07C-92E66B2E6BC8}']function GetParent: TFmxObject;function GetObject: TFmxObject;function GetChildrenCount: Integer;property Parent: TFmxObject read GetParent;property ChildrenCount: Integer read GetChildrenCount;procedure Changed;end;

1.034、FMX控件的行为的释放通知接口(430行次),比如焦点等等各种事件

  IControl = interface(IFreeNotificationBehavior)['{7318D022-D048-49DE-BF55-C5C36A2AD1AC}']function GetObject: TFmxObject;procedure SetFocus;function GetIsFocused: Boolean;function GetCanFocus: Boolean;function GetCanParentFocus: Boolean;function GetEnabled: Boolean;function GetAbsoluteEnabled: Boolean;function GetPopupMenu: TCustomPopupMenu;function EnterChildren(AObject: IControl): Boolean;function ExitChildren(AObject: IControl): Boolean;procedure DoEnter;procedure DoExit;procedure DoActivate;procedure DoDeactivate;procedure DoMouseEnter;procedure DoMouseLeave;function ShowContextMenu(const ScreenPosition: TPointF): Boolean;function ScreenToLocal(P: TPointF): TPointF;function LocalToScreen(P: TPointF): TPointF;function ObjectAtPoint(P: TPointF): IControl;procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Single);procedure MouseMove(Shift: TShiftState; X, Y: Single);procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Single);procedure MouseWheel(Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean);procedure MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single);procedure KeyDown(var Key: Word; var KeyChar: WideChar; Shift: TShiftState);procedure KeyUp(var Key: Word; var KeyChar: WideChar; Shift: TShiftState);procedure Tap(const Point: TPointF);procedure DialogKey(var Key: Word; Shift: TShiftState);procedure AfterDialogKey(var Key: Word; Shift: TShiftState);function FindTarget(P: TPointF; const Data: TDragObject): IControl;procedure DragEnter(const Data: TDragObject; const Point: TPointF);procedure DragOver(const Data: TDragObject; const Point: TPointF; var Operation: TDragOperation);procedure DragDrop(const Data: TDragObject; const Point: TPointF);procedure DragLeave;procedure DragEnd;function CheckForAllowFocus: Boolean;procedure Repaint;function GetDragMode: TDragMode;procedure SetDragMode(const ADragMode: TDragMode);procedure BeginAutoDrag;function GetParent: TFmxObject;function GetLocked: Boolean;function GetVisible: Boolean;procedure SetVisible(const Value: Boolean);function GetHitTest: Boolean;function GetCursor: TCursor;function GetInheritedCursor: TCursor;function GetDesignInteractive: Boolean;function GetAcceptsControls: Boolean;procedure SetAcceptsControls(const Value: Boolean);procedure BeginUpdate;procedure EndUpdate;function GetTabStopController: ITabStopController;function GetTabStop: Boolean;procedure SetTabStop(const TabStop: Boolean);/// <summary>This method returns true if the control has an available hint to display.</summary>function HasHint: Boolean;/// <summary>If HasHint is true, this method is invoked in order to know if the control has an available/// string to swho as hint.</summary>function GetHintString: string;/// <summary>If HasHint is true, this method is invoked in order to know if the control has a custom hint/// object to manage the hint display. This usually returns an instance of THint to allow the form to manage/// it.</summary>function GetHintObject: TObject;{ access }property AbsoluteEnabled: Boolean read GetAbsoluteEnabled;property Cursor: TCursor read GetCursor;property InheritedCursor: TCursor read GetInheritedCursor;property DragMode: TDragMode read GetDragMode write SetDragMode;property DesignInteractive: Boolean read GetDesignInteractive;property Enabled: Boolean read GetEnabled;property Parent: TFmxObject read GetParent;property Locked: Boolean read GetLocked;property HitTest: Boolean read GetHitTest;property PopupMenu: TCustomPopupMenu read GetPopupMenu;property Visible: Boolean read GetVisible write SetVisible;property AcceptsControls: Boolean read GetAcceptsControls write SetAcceptsControls;property IsFocused: Boolean read GetIsFocused;property TabStop: Boolean read GetTabStop write SetTabStop;end;
  IFreeNotificationBehavior = interface['{83F052C5-8696-4AFA-88F5-DCDFEF005480}']procedure AddFreeNotify(const AObject: IFreeNotification);procedure RemoveFreeNotify(const AObject: IFreeNotification);end;

1.035、FMX的其它与布局和显示相关的基础常量和枚举类型(193、74行次)

  TPixelFormat = (None, RGB, RGBA, BGR, BGRA, RGBA16, BGR_565, BGRA4, BGR4, BGR5_A1, BGR5, BGR10_A2, RGB10_A2, L, LA,LA4, L16, A, R16F, RG16F, RGBA16F, R32F, RG32F, RGBA32F);TPixelFormatList = TList<TPixelFormat>;constPixelFormatBytes: array[TPixelFormat] of Integer = ({ None } 0, { RGB } 4, { RGBA } 4, { BGR } 4, { BGRA } 4,{ RGBA16 } 8, { BGR_565 } 2, { BGRA4 } 2, { BGR4 } 2, { BGR5_A1 } 2, { BGR5 } 2, { BGR10_A2 } 4, { RGB10_A2 } 4,{ L } 1, { LA } 2, { LA4 } 1, { L16 } 2, { A } 1, { R16F } 2, { RG16F } 4, { RGBA16F } 8, { R32F } 4, { RG32F } 8,{ RGBA32F } 16);NullRect: TRectF = (Left: 0; Top: 0; Right: 0; Bottom: 0);AllCorners: TCorners = [TCorner.TopLeft, TCorner.TopRight,TCorner.BottomLeft, TCorner.BottomRight];AllSides: TSides = [TSide.Top, TSide.Left, TSide.Bottom, TSide.Right];ClosePolygon: TPointF = (X: $FFFF; Y: $FFFF) deprecated 'Non-closed polygons are not supported.';/// <summary>A special polygon point marker typically used for converting paths to polygons and vice-versa,/// usually indicating path closure. For the rendering methods, this marker has no meaning and the actual/// interpretation may be platform-dependent.</summary>PolygonPointBreak: TPointF = (X: $FFFFFF; Y: $FFFFFF);AllStyledSettings: TStyledSettings = [TStyledSetting.Family,TStyledSetting.Size,TStyledSetting.Style,TStyledSetting.FontColor,TStyledSetting.Other];DefaultStyledSettings: TStyledSettings = [TStyledSetting.Family,TStyledSetting.Size,TStyledSetting.Style,TStyledSetting.FontColor];InvalidSize : TSizeF = (cx: -1; cy: -1);AlignmentToTTextAlign: array [TAlignment] of TTextAlign =(TTextAlign.Leading, TTextAlign.Trailing, TTextAlign.Center);
typeTOSPlatform = (Windows, OSX, iOS, Android, Linux);TPointArray = array [0..0] of TPointF;TLongByteArray = array [0..MaxInt - 1] of Byte;PLongByteArray = ^TLongByteArray;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tjsoft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值