FireMonkey 的控件都是自己绘制的(而不是基于系统组件), 我想它们应该是基于一些基本图形; 就从基本图形开始吧.
FMX.Objects 单元给出的类:
TShape //基本图形的基类 TLine TRectangle TRoundRect TCalloutRectangle TEllipse TCircle TPie TArc TPath TText TImage TPaintBox TSelection TSelectionPoint
添加一个 TRectangle, 先纵观一下它的可用功能:
{ TRectangle } public constructor Create(AOwner: TComponent); override; published property Fill; property Stroke; property StrokeCap; property StrokeDash; property StrokeJoin; property StrokeThickness; property XRadius: Single read FXRadius write SetXRadius; property YRadius: Single read FYRadius write SetYRadius; property Corners: TCorners read FCorners write SetCorners stored IsCornersStored; property CornerType: TCornerType read FCornerType write SetCornerType default TCornerType.ctRound; property Sides: TSides read FSides write SetSides stored IsSidesStored; { TRectangle 的父类 TShape } protected procedure FillChanged(Sender: TObject); virtual; procedure StrokeChanged(Sender: TObject); virtual; function GetShapeRect: TRectF; procedure Painting; override; procedure AfterPaint; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Fill: TBrush read FFill write SetFill; property Stroke: TBrush read FStroke write SetStroke; property StrokeThickness: Single read FStrokeThickness write SetStrokeThickness stored IsStrokeThicknessStored; property StrokeCap: TStrokeCap read FStrokeCap write SetStrokeCap default TStrokeCap.scFlat; property StrokeDash: TStrokeDash read FStrokeDash write SetStrokeDash default TStrokeDash.sdSolid; property StrokeJoin: TStrokeJoin read FStrokeJoin write SetStrokeJoin default TStrokeJoin.sjMiter; property ShapeRect: TRectF read GetShapeRect; { TShape 的父类 TControl(来自 FMX.Types) } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure AddObject(AObject: TFmxObject); override; procedure RemoveObject(AObject: TFmxObject); override; procedure SetNewScene(AScene: IScene); virtual; procedure SetBounds(X, Y, AWidth, AHeight: Single); virtual; { matrix } function AbsoluteToLocal(P: TPointF): TPointF; virtual; function LocalToAbsolute(P: TPointF): TPointF; virtual; function AbsoluteToLocalVector(P: TVector): TVector; virtual; function LocalToAbsoluteVector(P: TVector): TVector; virtual; function PointInObject(X, Y: Single): Boolean; virtual; { optimizations } procedure RecalcUpdateRect; virtual; procedure RecalcNeedAlign; virtual; procedure RecalcOpacity; virtual; procedure RecalcAbsolute; virtual; procedure RecalcEnabled; virtual; procedure RecalcHasEffect; virtual; { drag and drop } function MakeScreenshot: TBitmap; { caret } procedure ShowCaretProc; procedure SetCaretPos(const APoint: TPointF); procedure SetCaretSize(const ASize: TPointF); procedure SetCaretColor(const AColor: TAlphaColor); procedure HideCaret; { align } procedure BeginUpdate; virtual; procedure EndUpdate; virtual; procedure Realign; virtual; { paining } procedure ApplyEffect; procedure Painting; virtual; procedure DoPaint; virtual; procedure AfterPaint; virtual; { effects } procedure UpdateEffects; { } procedure SetFocus; procedure PaintTo(const ACanvas: TCanvas; const ARect: TRectF; const AParent: TFmxObject = nil); procedure Repaint; procedure InvalidateRect(ARect: TRectF); procedure Lock; property AbsoluteMatrix: TMatrix read GetAbsoluteMatrix; property AbsoluteOpacity: Single read GetAbsoluteOpacity; property AbsoluteWidth: Single read GetAbsoluteWidth; property AbsoluteHeight: Single read GetAbsoluteHeight; property AbsoluteScale: TPointF read GetAbsoluteScale; property AbsoluteEnabled: Boolean read GetAbsoluteEnabled; property HasEffect: Boolean read GetAbsoluteHasEffect; property HasDisablePaintEffect: Boolean read GetAbsoluteHasDisablePaintEffect; property HasAfterPaintEffect: Boolean read GetAbsoluteHasAfterPaintEffect; property ChildrenRect: TRectF read GetChildrenRect; property InvertAbsoluteMatrix: TMatrix read GetInvertAbsoluteMatrix; property InPaintTo: Boolean read FInPaintTo; property LocalRect: TRectF read GetLocalRect; property AbsoluteRect: TRectF read GetAbsoluteRect; property UpdateRect: TRectF read GetUpdateRect; property BoundsRect: TRectF read GetBoundsRect write SetBoundsRect; property ParentedRect: TRectF read GetParentedRect; property ParentedVisible: Boolean read GetParentedVisible; property ClipRect: TRectF read GetClipRect; property Canvas: TCanvas read GetCanvas; property Scene: IScene read FScene; property AutoCapture: Boolean read FAutoCapture write FAutoCapture default False; property CanFocus: Boolean read FCanFocus write FCanFocus default False; property DisableFocusEffect: Boolean read FDisableFocusEffect write FDisableFocusEffect default False; property DisableDefaultAlign: Boolean read FDisableDefaultAlign write FDisableDefaultAlign; property TabOrder: TTabOrder read GetTabOrder write SetTabOrder default -1; published { triggers } property IsMouseOver: Boolean read FIsMouseOver; property IsDragOver: Boolean read FIsDragOver; property IsFocused: Boolean read FIsFocused; property IsVisible: Boolean read FVisible; { props } property Align: TAlignLayout read FAlign write SetAlign default TAlignLayout.alNone; property Cursor: TCursor read GetCursor write SetCursor default crDefault; property DragMode: TDragMode read GetDragMode write SetDragMode default TDragMode.dmManual; property EnableDragHighlight: Boolean read FEnableDragHighlight write FEnableDragHighlight default True; property Enabled: Boolean read FEnabled write SetEnabled default True; property Position: TPosition read FPosition write SetPosition; property RotationAngle: Single read FRotationAngle write SetRotationAngle; property RotationCenter: TPosition read FRotationCenter write FRotationCenter; property Locked: Boolean read FLocked write SetLocked default False; property Width: Single read FWidth write SetWidth; property Height: Single read FHeight write SetHeight; property Margins: TBounds read FMargins write FMargins; property Padding: TBounds read FPadding write FPadding; property Opacity: Single read FOpacity write SetOpacity stored IsOpacityStored; property ClipChildren: Boolean read FClipChildren write SetClipChildren default False; property ClipParent: Boolean read FClipParent write FClipParent default False; property HitTest: Boolean read FHitTest write SetHitTest default True; property CanClip: Boolean read FCanClip write FCanClip default True; property PopupMenu: TCustomPopupMenu read FPopupMenu write SetPopupMenu; property Scale: TPosition read FScale write FScale; property Visible: Boolean read FVisible write SetVisible default True; property DesignVisible: Boolean read FDesignVisible write SetDesignVisible default True; property OnDragEnter: TDragEnterEvent read FOnDragEnter write FOnDragEnter; property OnDragLeave: TNotifyEvent read FOnDragLeave write FOnDragLeave; property OnDragOver: TDragOverEvent read FOnDragOver write FOnDragOver; property OnDragDrop: TDragDropEvent read FOnDragDrop write FOnDragDrop; property OnDragEnd: TNotifyEvent read FOnDragEnd write FOnDragEnd; property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown; property OnKeyUp: TKeyEvent read FOnKeyUp write FOnKeyUp; property OnClick: TNotifyEvent read FOnClick write FOnClick; property OnDblClick: TNotifyEvent read FOnDblClick write FOnDblClick; property OnCanFocus: TCanFocusEvent read FOnCanFocus write FOnCanFocus; property OnEnter: TNotifyEvent read FOnEnter write FOnEnter; property OnExit: TNotifyEvent read FOnExit write FOnExit; property OnMouseDown: TMouseEvent read FOnMouseDown write FOnMouseDown; property OnMouseMove: TMouseMoveEvent read FOnMouseMove write FOnMouseMove; property OnMouseUp: TMouseEvent read FOnMouseUp write FOnMouseUp; property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; property OnPainting: TOnPaintEvent read FOnPainting write FOnPainting; property OnPaint: TOnPaintEvent read FOnPaint write FOnPaint; property OnResize: TNotifyEvent read FOnResize write FOnResize; property OnApplyStyleLookup: TNotifyEvent read FOnApplyStyleLookup write FOnApplyStyleLookup; { TControl 的父类 TFmxObject (来自 FMX.Types) } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Release(Delay: Single = 0.1); { check for support interface } function IsIControl: Boolean; function AsIControl: IControl; procedure SetRoot(ARoot: IRoot); { design } procedure SetDesign(Value: Boolean; SetChildren: Boolean = True); function ItemClass: string; virtual; { clone } function Clone(const AOwner: TComponent): TFmxObject; procedure CloneChildFromStream(AStream: TStream); { childs } procedure AddObject(AObject: TFmxObject); virtual; procedure InsertObject(Index: Integer; AObject: TFmxObject); virtual; procedure RemoveObject(AObject: TFmxObject); overload; virtual; procedure RemoveObject(Index: Integer); overload; virtual; procedure Exchange(AObject1, AObject2: TFmxObject); virtual; procedure DeleteChildren; virtual; procedure BringToFront; procedure SendToBack; procedure AddObjectsToList(const AList: TList); procedure AddControlsToList(const AList: TList); procedure Sort(Compare: TFmxObjectSortCompare); virtual; { notify } procedure AddFreeNotify(const AObject: IFreeNotification); procedure RemoveFreeNotify(const AObject: IFreeNotification); { tab } procedure GetTabOrderList(const List: TList; AChildren: Boolean); { i/o } procedure LoadFromStream(const AStream: TStream); procedure SaveToStream(const Stream: TStream); procedure LoadFromBinStream(const AStream: TStream); procedure SaveToBinStream(const AStream: TStream); { resource } function FindStyleResource(const AStyleLookup: string): TFmxObject; virtual; procedure UpdateStyle; virtual; { animations } procedure StartAnimation(const AName: string); virtual; procedure StopAnimation(const AName: string); virtual; procedure StartTriggerAnimation(AInstance: TFmxObject; const ATrigger: string); virtual; procedure StartTriggerAnimationWait(AInstance: TFmxObject; const ATrigger: string); virtual; procedure StopTriggerAnimation(AInstance: TFmxObject); virtual; procedure ApplyTriggerEffect(AInstance: TFmxObject; const ATrigger: string); virtual; { animation property } procedure AnimateFloat(const APropertyName: string; const NewValue: Single; Duration: ...); procedure AnimateColor(const APropertyName: string; NewValue: TAlphaColor; Duration: ...); procedure AnimateFloatDelay(const APropertyName: string; const NewValue: Single; Duration: ...); procedure AnimateFloatWait(const APropertyName: string; const NewValue: Single; Duration: ...); procedure StopPropertyAnimation(const APropertyName: string); { } property Root: IRoot read FRoot; property Stored: Boolean read FStored write SetStored; { } 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[Index: Integer]: TFmxObject read GetChild; { binding } function FindBinding(const ABinding: string): TFmxObject; property Data: Variant read GetData write SetData; property Binding[const Index: string]: Variant read GetBinding write SetBinding; property Parent: TFmxObject read FParent write SetParent; property Index: Integer read GetIndex write SetIndex; published property BindingName: string read FBindingName write SetBindingName; property StyleName: string read FStyleName write SetStyleName; { TFmxObject 的父类 TComponent (来自 System.Classes), 到这里不新鲜了 } public constructor Create(AOwner: TComponent); virtual; destructor Destroy; override; procedure BeforeDestruction; override; procedure DestroyComponents; procedure Destroying; function ExecuteAction(Action: TBasicAction): Boolean; dynamic; function FindComponent(const AName: string): TComponent; procedure FreeNotification(AComponent: TComponent); procedure RemoveFreeNotification(AComponent: TComponent); procedure FreeOnRelease; function GetEnumerator: TComponentEnumerator; function GetParentComponent: TComponent; dynamic; function GetNamePath: string; override; function HasParent: Boolean; dynamic; procedure InsertComponent(AComponent: TComponent); procedure RemoveComponent(AComponent: TComponent); procedure SetSubComponent(IsSubComponent: Boolean); function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; override; function UpdateAction(Action: TBasicAction): Boolean; virtual; function IsImplementorOf(const I: IInterface): Boolean; function ReferenceInterface(const I: IInterface; Operation: TOperation): Boolean; property ComObject: IUnknown read GetComObject; property Components[Index: Integer]: TComponent read GetComponent; property ComponentCount: Integer read GetComponentCount; property ComponentIndex: Integer read GetComponentIndex write SetComponentIndex; property ComponentState: TComponentState read FComponentState; property ComponentStyle: TComponentStyle read FComponentStyle; property DesignInfo: Longint read FDesignInfo write FDesignInfo; property Owner: TComponent read FOwner; property VCLComObject: Pointer read FVCLComObject write FVCLComObject; property Observers: TObservers read GetObservers; published property Name: TComponentName read FName write SetName stored False; property Tag: NativeInt read FTag write FTag default 0; { TComponent 的父类 TPersistent (来自 System.Classes) } public destructor Destroy; override; procedure Assign(Source: TPersistent); virtual; function GetNamePath: string; dynamic; { TPersistent 的父类 TObject (来自 System) } public constructor Create; procedure Free; class function InitInstance(Instance: Pointer): TObject; procedure CleanupInstance; function ClassType: TClass; inline; class function ClassName: string; class function ClassNameIs(const Name: string): Boolean; class function ClassParent: TClass; class function ClassInfo: Pointer; inline; class function InstanceSize: Longint; inline; class function InheritsFrom(AClass: TClass): Boolean; class function MethodAddress(const Name: ShortString): Pointer; overload; class function MethodAddress(const Name: string): Pointer; overload; class function MethodName(Address: Pointer): string; class function QualifiedClassName: string; function FieldAddress(const Name: ShortString): Pointer; overload; function FieldAddress(const Name: string): Pointer; overload; function GetInterface(const IID: TGUID; out Obj): Boolean; class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry; class function GetInterfaceTable: PInterfaceTable; class function UnitName: string; class function UnitScope: string; function Equals(Obj: TObject): Boolean; virtual; function GetHashCode: Integer; virtual; function ToString: string; virtual; function SafeCallException(ExceptObject: TObject; ExceptAddr: Pointer): HResult; virtual; procedure AfterConstruction; virtual; procedure BeforeDestruction; virtual; procedure Dispatch(var Message); virtual; procedure DefaultHandler(var Message); virtual; class function NewInstance: TObject; virtual; procedure FreeInstance; virtual; destructor Destroy; virtual;
慢慢消化...