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