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.
|