5-Minuten-Snack: VCL, FMX und eine Alternative von TMS
Es gibt zahlreiche Komponentenbibliotheken für die Visual Component Library (VCL) und FireMonkey (FMX).
Zahlreiche der Komponenten, die es für die VCL gibt, gibt es mittlerweile auch für FMX. Schaut man sich zum Beispiel das Angebot von TMS Software an, so gibt es eine Kartenkomponente für die VCL, die den komfortablen Zugriff auf Google Maps ermöglicht mit dem Namen “TMS VCL WebGMaps”. Für FireMonkey heißt die Komponente “TMX FMX WebGMaps”.
Somit erhalten wir für diese Komponente die folgende Matrix im Bezug auf die verfügbaren Zielplattformen:
![]() |
![]() |
![]() |
![]() |
|
VCL WebGMaps | + | |||
FMX WebGMaps | + | + | + | + |
Daraus folgt, wenn Sie sich auf Windows 32 und Windows 64 beschränken, so werden Sie sich höchstwahrscheinlich für die VCL Variante entscheiden. Benötigen Sie allerdings auch eine andere Plattform, so werden Sie auf die FireMonkey Lösung zurückgreifen müssen.
Obwohl Embarcadero sich wirklich bemüht, die Unterschiede zwischen der VCL und FMX so gering wie möglich zu halten, gibt es einschlägige Unterschiede zwischen den Frameworks. Komponenten für beide dieser Frameworks zu entwickeln, stellt den Entwickler vor schwierige Entscheidungen wie man die Entwicklung mit seinen Komponenten so leicht wie möglich gestalten kann. Die Benutzer der Komponenten wollen so wenig wie möglich mit diesen Unterschieden kämpfen.
Ich werde an dieser Stelle auf eine der Fallen hinweisen, in die ich vor einigen Tagen getappt bin. Ich habe damit begonnen, eine Kartenanwendung zu entwickeln, die “TMS FMX WebGMaps” benutzt. Die Kartenfunktionalität zu einer Anwendung hinzuzufügen wird dadurch wirklich auf das “Fallenlassen” der Komponente reduziert. Kern der rapiden Anwendungsentwicklung mit Delphi… Es ist kein Quelltext zu schreiben. Für die grundlegende Funktionalität muss man sich nicht einmal darum kümmern, eine Zugangsberechtigung von Google in Form eines API Schlüssels zu bekommen.
Es stellte sich dann doch heraus, dass keine Notwendigkeit für mehrere Plattformen bestand und ich fühle mich weiterhin in der “guten alten” VCL sehr wohl, wodurch FireMonkey nicht benutzt werden musste. Somit wechselte ich frühzeitig zu einer VCL Formularanwendung und nutze die VCL Variante der Komponente. Ich startete die Anwendung und musste feststellen, dass die Karte nicht dargestellt wurde. Hätte ich die Dokumentation gelesen, wäre mir klar gewesen warum. Lassen Sie uns an dieser Stelle eine grundlegende Sache festhalten:
Gehen Sie niemals davon aus, dass eine Komponente, die für VCL und FMX verfügbar ist, auch in beiden Frameworks identisch zu benutzen ist. Die Architektur des jeweiligen Frameworks wird sicherlich einige Unterschiede erforderlich machen.
In diesem Fall, ist die Kartenkomponente manuell zu “starten”. Kein Problem, eine Zeile Quelltext. Nach der Anpassung funktionieren beide Komponenten dann wieder gleich aus der Sicht des Entwicklers. Die selben Eigenschaften, Methoden — alles.
Trotzdem, ich fragte mich, warum ich den Denkfehler gemacht habe. Der Grund ist recht simpel.
TMS bietet Komponenten, die wirklich als Cross-Plattform und zusätzlich auch noch als “Cross-Framework” bezeichnet werden können. Jede Komponente der FNC (Framework Neutrale Komponente) kann eingesetzt werden mit:
- Visual Component Library (VCL)
- FireMonkey (FMX)
- Lazarus Component Library (LCL)
Durch diese Wahlfreiheit eröffnen sich uns als Entwickler die folgenden Plattformen durch den Einsatz von FNC:
- Windows
- MacOS
- iOS
- Android
- Linux
- Raspberry Pi
Aus dieser Liste geht hervor, dass jede Komponente in jedem Framework das gleiche Verhalten hat. Es gibt keinen Unterschied, ob man die Komponente in der VCL, FMX oder LCL verwendet – es ist immerzu die selbe Komponente und nicht eine Implementierung in dem jeweiligen Framework. Verdeutlichen wir uns diesen Sachverhalt anhand der Kartenkomponente, so wird uns klar, dass wir mit zwei Komponenten in zwei Frameworks arbeiten.
Genau das macht FNC so mächtig und auch so verdammt schwierig für den Hersteller zu entwickeln. Es sind 3 verschiedene Klassenbibliotheken mit 6 Zielplattformen zu berücksichtigen — mal ganz davon abgesehen, dass sowohl die VCL als auch FMX zahlreiche verschiedene Versionen haben! Die VCL in Delphi XE2 ist nicht identisch mit der in Delphi Berlin 10.1.
Daher hat das Team von Bruno Fierens meinen großer Respekt für diese Leistung! Ich möchte nicht in ihren Schuhen stecken, wenn Anpassungen an den Komponenten vorzunehmen sind…
Dadurch, dass ich FNC kenne und bereits einsetze, habe ich den Fehler gemacht zu erwarten, dass jede FMX Komponente den Luxus bietet genau wie ihre VCL Variante zu funktionieren — sofern es überhaupt eine entsprechende Variante im anderen Framework gibt, wie es bei WebGMaps von TMS der Fall ist.
Nebenbei, in FNC gibt es bereits:
- Grids zur tabellarischen Darstellung und Bearbeitung von Daten,
- einen Terminkalender,
- einen Rich-Text Editor,
- Tree View zur hierarchischen Darstellung von Informationen,
- eine PDF Bibliothek,
- Page Controls,
- Page Container,
- zahlreiche TEdit-Derivate,
- zahlreiche Listen,
- zahlreiche Komponenten zur Auswahl aus Listen (Pickers),
- Diagramme
- und einiges mehr…
Beachten Sie, dass es zur Zeit eine Videoserie zu FNC gibt, um sich mit FNC vertraut zu machen. Die Serie wird in englischer und deutscher Sprache produziert.