FireMonkey Fundamentals

35.1 What is FMX?

FireMonkey (FMX): a GPU-accelerated, cross-platform UI framework for Windows, macOS, iOS, Android, and Linux (FMXLinux) from one codebase.

Vector-based, styled controls (not native widgets by default; some have native presentation on iOS/Android via ControlType := Platform).

Units are prefixed FMX. (e.g., FMX.Forms, FMX.Controls, FMX.StdCtrls).

35.2 FMX vs VCL

Windows, macOS, iOS, Android, Linux Native Win32 controls GPU (DirectX/Metal/OpenGL), styles, Skia option Native Windows (plus VCL Styles)

Style-based (platform styles, custom styles) Single (float), device-independent

Align, Anchors, Margins/Padding, TLayout, TFlowLayout, TGridPanelLayout, TScaledLayout Built-in effects, animations, 3D Maturity for desktop business apps

35.3 FMX Basics

Key components: TLayout, TRectangle, TListView (fast mobile list), TListBox, TTabControl, TMultiView (drawer/master-detail), TToolBar, TEdit, TComboBox, TSwitch, TTrackBar, TImage, TGrid/TStringGrid, TWebBrowser, TMapView, TCameraComponent, TMediaPlayer, TAniIndicator, TFloatAnimation, effects (TShadowEffect, TBlurEffect), and 3D (TViewport3D, TCube, TModel3D).

Styles: TStyleBook, the Style Designer, platform-specific styles, custom styles (premium styles from Embarcadero).

Multi-device designer: master view plus platform-specific views (iPhone, Android phone, tablet).

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Label1.Text := 'Hello FMX';                     // FMX uses .Text instead of .Caption
  Button1.StyledSettings := Button1.StyledSettings - [TStyledSetting.FontColor];
  Button1.TextSettings.FontColor := TAlphaColors.Red;
end;

procedure TMainForm.Button1Click(Sender: TObject);
begin
  ShowMessage('Clicked on ' + TOSVersion.ToString);
  // Async dialog (required on Android):
  TDialogService.MessageDialog('Continue?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo],
    TMsgDlgBtn.mbYes, 0,
    procedure(const AResult: TModalResult)
    begin
      if AResult = mrYes then DoContinue;
    end);
end;