12. FireMonkey vs. VCL (Additions to the FMX-side) (13.10.2016)
Jim McKeeth hat einen sehr schönen Artikel zur Abgrenzung zwischen VCL und Firemonkey geschrieben, mit einer Erläuterung, der ich voll zustimmen kann. Manche Entwickler meinen aber, dass FMX sich im Wesentlichen nur durch die Plattformunabhängigkeit auszeichnen würde, sonst aber gegenüber der VCL nicht viel zu bieten hätte. Anwender, die schon länger mit FMX arbeiten, wissen, dass das so nicht stimmt und FMX in vielen Punkten sogar einiges mehr als die VCL zu bieten hat...

Ich möchte daher hier mal ein kleine Auflistung geben, die zeigt, was die mit Delphi mitgelieferten FMX-Komponenten bereits als Standard integriert haben und was die Standard-VCL Kompos halt nicht haben (allenfalls in Einzelfällen per spezieller WinAPI-Calls). Ich nenne das mal

Neue grundlegende Fähigkeiten bei FMX, die bei der VCL fehlen

* FMX rechnet die Positionsangaben für die Komponenten oder bei
  Zeichenausgabe per Floating-Point ist ist damit präziser
* Jedes FMX-Objekt kann mit unterschiedlicher Transparenz dargestellt werden.
* FMX-Objekte können rotiert werden (RotationAngle und RotationCenter)
* Jede FMX-Komponente kann selber als Container dienen
* Ausgiebige 3D-Fähigkeit (3D-Formen, 3D-Szene, Materialien für Oberflächen)
* Umfangreiche Bibliothek mit Bild- und Animationseffekten
* Stufenlose Skalierbarkeit von Komponenten
* Farbverlaufsdarstellungen für Oberflächen (z.B. Rectangle, Eigenschaft Fill,
   Gradient)
* Umfangreiches Handling von Styles und Darstellung und Erweiterung von
   Komponenten (Benutzerdefinierte Stile, Styles-Editor).

Daneben haben viele FMX-Pendants im Gegensatz zu Ihrer VCL-Entsprechung eine Reihe von zusätzlichen Eigenschaften oder Ereignis-Events oder sonstiger Erweiterungen.

Erweiterte Fähigkeiten der FMX-Komponenten im Vergleich zum VCL-Pendant

Listbox
- Integrierte Searchbox, GroupHeader und Footer
- jedem ListboxItem kann ein Icon zugewiesen werden
- jedem ListboxItem kann ganz einfach durch setzen der Height-Eigenschaft eine
  unterschiedliche Höhe zugewiesen werden
- jedes ListboxItem hat die Eigenschaft Selectable und eigene Einstellmöglichkeiten
  für Farbe, Justierung, Font, Wordwrap, usw.

TGrid
Man kann hier direkt unterschiedliche Arten von Spalten einfügen: Strings, Progress, Date, Time, Image, Currency, usw. Jedes Column hat eine Header-Eigenschaft, wo ich ganz bequem schon im Designer eine Überschrift eingeben kann.
Per "OnGetValue" werden im TGrid bei der Darstellung einer Zeile die Daten erst dann abgefragt, wenn sie zur Anzeige gebracht werden sollen. Insofern - abgesehen vom Sinn- wäre es kein Problem und mit Null Performance-Verlust möglich, 1 Mio. Einträge im TGrid anzuzeigen und rasant zu scrollen. Im VCL-Grid könnte man das entsprechend selber im OnDrawCell-Event machen, hätte aber dann die ganze Zeichnung des Inhalts selber zu bewerkstelligen (und damit einfach wieder ein Haufen mehr Arbeit).

TLang
Mit dieser Komponente hat man eine ganz einfache Möglichkeit, mehrsprachige Produkte zu erstellen. In einem einfachen Dialog werden alle Komponenten mit Text-Eigenschaft gelistet, für die man dann eine Übersetzung für eine oder mehrere Sprachen eingeben kann. Alle Komponenten mit einer Eigenschaft "Text" haben die weitere Eigenschaft "Autotranslate", womit man die Übersetzung bei Bedarf auch deaktivieren kann.

TImageList
Icons können in mehreren Auflösungen bereit gehalten werden, es existieren mehr und erweiterte Funktionen, um auf die Images zuzugreifen (siehe auch meinen Beitrag zur TImageList, der war allerdings noch für XE8, inzwischen ist die Komponente erweitert worden).

TSpeedButton
Die WordWrap- und Trimming-Eigenschaften existieren hier auch für den TSpeedButton und nicht nur für den TButton (wie in der VCL).

TEdit, TMemo
Diese Komponenten besitzen eine integrierte Unterstützung für SpellChecker (Aktiviert mit CheckSpelling). Offiziell zwar nur unter IOS und MAC unterstützt, könnte man aber leicht auch für Windows oder Android erweitern, warte eigentlich nur noch darauf, dass EMBA das selbst erledigt.
 

Zusätzliche nützliche Komponenten

Es gibt eine Reihe von nützlichen Komponenten, die unter der Standard-VCL nicht existieren. Zum Beispiel:

* TComboTrackbar (Werte per Tastatur eingeben oder per Trackbar ändern)
*  Farbauswahlkomponenten und Trackbar für Alphawerte (Toolpalette Farben)
* TImageViewer
* Komponenten für Formen (Rectangle, Circle, usw.)
* Eine TPATH-Componente (Vectorbasierte Darstellung)
* TSelection-Komponente, mit der man ganz einfach Selektionen machen kann oder
  darin befindliche Komponenten in der Größe verändern oder an andere Positionen
  verschieben kann.


FMX als Technologietreiber
Mit der Unterstützung der mobilen Plattform hat Delphi nicht selten im zweiten Schritt die Fähigkeit erhalten, auch unter der VCL bestimmte Dinge zu unterstützen, z.B. Sensoren für Windows-Tablets, etc.

Bedingt durch die Notwendigkeit, Betriebssysteme auf unterschiedlichen Plattformen unterscheiden zu können, wurden neue Fähigkeiten in Delphi eingeführt (z.B. Record TOSVersion in der Unit System.SysUtils), die man auch unter der VCL gewinnbringend einsetzen kann.

Auch der TMessageManager (Hilfreiches Botschaften-System) wurde entwickelt, um ein plattformübergreifendes Botschaften-Modell zu haben. Man kann den TMessageManager auch nützlich unter der VCL verwenden (z.B. um MVVM-Implementationen zu bewirken), allerdings werden nur unter FMX auch die Windows-Systembotschaften in passende RTL-Botschaften übersetzt.

FMX ist eindeutig der Treiber, der neue Anwendungsbereiche ermöglicht und in diesem Zusammenhang immer wieder neue Technologien unterstützt. Nicht selten profitiert auch die VCL davon.

Insofern müssten eigentlich alle VCL-Anwender dankbar sein, dass es FMX gibt. Denn dieses neue FrameWork macht Delphi innovativer, eröffnet neue Anwendungsszenarien und ist somit Grundlage dafür, neue Entwickler an das Produkt zu binden.