5. Delphi XE5 und FireMonkey

Delphi XE5 und Cross-Platform-Entwicklung
Seit September 2013 gibt es Delphi XE5 und seit Ende Oktober das erste Update dafür. Für mich also das Signal nun auch Delphi XE5 zu erwerben. Traditionell kaufe ich immer erst nach dem ersten Update. Für's Bücher schreiben werde ich da allerdings meine Verhaltensweise demnächst ändern, denn man gewinnt wertvolle Zeit, wenn man den Compiler direkt zum Erscheinungsdatum holt. 

Delphi XE5 bietet nun das, was man sich gewünscht hat: Mit einer Code-Basis Programme für Windows, MAC, IOS und Android zu entwickeln. Inwieweit das tatsächlich für größere Projekte möglich ist und was zu beachten ist, dazu werde ich in einem der nächsten Blogbeiträge Ausführungen machen.

Ich werde dazu mein Programm PC-Adreßzz!, dass derzeit erstellt ist für 

- Windows mit Delphi 2007
-  IOS mit XE2 und FireMonkey 1,
-  MAC mit Lazarus 0.98
-  Linux mit Lazarus 0.98
-  Windows Mobile bis Version 6 mit Visual Basic für Mobile 

auf die Delphi XE5-Lösung übertragen. Bei der obigen Aufzählung fällt natürlich auf, dass ich mit Delphi XE5 Linux und Windows Mobile (Phone) noch nicht bedienen kann. Aber man soll die Hoffnung ja nicht aufgeben, in der Delphi-Roadmap ist unter dem Stichwort "Beyond iOS & Android" zu finden, dass "Windows 8 ARM / RT" im Blickwinkel ist, ebenso "Linux Server, TBD"

Delphi XE4 hatte ich mir natürlich auch schon geholt, aber da ich meine Programme einheitlich auf die 4 Plattformen (Windows, MAC, IOS, Android) übertragen wollte, hat es für mich nicht viel Sinn gemacht, mit XE4 wieder nur eine Teillösung zu machen. XE4 habe ich aber sehr intensiv genutzt um ein Windows-Projekt weiterzubringen (PixPower PD) und ich muss sagen, mich hat die Stabilität und die Geschwindigkeit für die Windows-Plattform echt überzeugt. Einen schnelleren Compiler hatte ich noch nie.

Ich will mich in diesem Blog-Beitrag zunächst auf den Cross-Platform-Bereich Windows / MAC OS X beschränken. Zum einen, weil das die finanziell lohnendsten Bereiche sind. Denn für diese Programme kann man deutlich mehr Geld verlangen, als für IOS- oder Android-Programme. Vor allem kann man sie außerhalb eines App-Stores verkaufen. Aber andererseits auch - und das gebe ich offen zu - weil ich derzeit noch nicht viel Erfahrungen im "neuen" IOS und Android-Bereich habe. Das wird sich aber sicher bald ändern und dann gibt es hier auch Blog-Beiträge dazu.

Delphi XE5 und Installation
Ich habe mir direkt die Enterprise-Version zugelegt, weil ich keine Lust mehr auf das ganze hin und her mit den Mobile-Packs hatte. Die Enterprise-Version kann man relativ günstig bei Originalsoftware.de kaufen. Leider stand für mich erst einmal nur die ESD-Version als Download zur Verfügung. Also das gemacht und dann das Update1 hinterher installiert. Das Update 1 ist keine Neuinstallation, sondern ein Patch, verändert also die Dateien der Original-Installation. Leider funktionierte danach das Delphi-Hilfe-System gar nicht mehr. Also alles vollständig deinstalliert (incl. Löschen der Registry-Einträge). Dann die ISO-Setup-Datei incl. Update 1 - die nun bei EMBA im User-Bereich zugänglich war - geladen und eine vollständige Neuinstallation gemacht. Danach funktionierte alles wie gewünscht. Installiert habe ich das auf Windows 7 und in einer virtuellen Maschine auf Windows 8.1.

Delphi XE 5 und nutzbare MAC OS X-Versionen
Lion und Mountain-Lion stehen nach Angaben von Embarcadero als nutzbare Entwicklungsplattformen zur Verfügung. Jedoch unterstützt Lion den App-Store noch nicht perfekt und Sie können bestimmte Dinge auf diesem System letztlich nicht testen, daher sollten Sie derzeit mit Mountain Lion arbeiten, zumindest, wenn Sie MAC OS X Programme für den Appstore entwickeln wollen. Alle anderen Systeme sollten natürlich auch zur Verfügung stehen und als Testsystem nutzbar sein. Ich habe hier einen iMac, wo auf der System-Festplatte sogar noch Leopard und Snow Leopard installiert sind. Auf einer angeschlossenen Fire-Wire Festplatte habe ich auf verschiedenen Partitionen Lion, Mountain Lion und Mavericks installiert.

Zusätzlich habe ich noch ein Mac Air Notebook, wo ich Mountain Lion und Mavericks als "Fresh-Systems" nutzen kann (also ohne irgendwelche installieren Entwicklungsumgebungen, die evtl. Testergebnisse verfälschen könnten. Die Physiker sagen immer, dass die Testumgebung selber einen Einfluss auf das Testergebnis haben kann. Recht haben sie). 

Unter Mavericks funktioniert die Übertragung derzeit mit dem PAServer bzw. die Signierung des Projekts nicht, wenn es für den App-Store erstellt werden soll. Das Ziel "Normal" funktioniert aber. Ich gehe davon aus, dass es hier bald ein Update von EMBA geben wird. Mavericks ist ja erst nach Delphi XE5 erschienen, dass da etwas nicht funktioniert, kann m.E. daher EMBA nicht zum Vorwurf gemacht werden. Die volle Unterstützung für Mavericks ist aber wichtig, da Mavericks ja - anders als sonst - kostenlos vom MAC-User bezogen werden kann. Es ist also davon auszugehen, dass hier sehr bald viele Anwender dieses System nutzen werden.

Übernahme von XE3-Projekten
Mein TEditor-Projekt ist nun das erste, dass ich nach XE5 übernehme. Nur am Rande soll bemerkt sein, dass anscheinend alle unter XE3 entwickelten Projekte, die jetzt im Appstore sind, nach ersten Tests auch unter Mavericks noch funktionieren. 

Also habe ich unter XE3 im Projekt alle Formulare geschlossen und nur den Projekt-Quelltext anzeigen lassen. Dann speichern und schließen. Das ist wichtig, weil sonst Delphi unter Umständen noch mal die alten Ordner aufsucht, wenn Sie das Projekt in einen anderen Ordner übernehmen. Dann alle Dateien in einen anderen Ordner kopiert, Projekt geöffnet. 

Dann direkt die Pfade unter Projekt, Optionen, Verzeichnisse anpassen!!

Beim Laden der Formulare bin ich dann doch erst mal ein wenig erschrocken, da z.B. beim TabControl die Register viel kleiner waren, bei der Memo-Komponente der Cursor nicht angezeigt wurde, wenn noch kein Text drin war, und und und...

Lösung war, die Styles-Komponente zu öffnen, "Alle entfernen" zu wählen und den Style neu von der Festplatte einzulesen. Offensichtlich sind an den Styles Änderungen vorgenommen worden, die Einfluss auf die Funktion der Komponenten haben. Die FMX-Styles finden Sie auf der Festplatte unter:

C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\Redist\styles\Fmx

Danach war wieder alles so, wie es sein sollte.

Anzumerken ist aber, dass hier der Verlust von benutzerdefinierten Änderungen droht, die man evtl. an den Styles vorgenommen hatte. Statt "alle entfernen" könnte man evtl. auch versuchen "Hinzufügen" zu wählen. Die Komponenten sehen danach auch wieder OK aus, ob benutzerdefinierte Einstellungen erhalten bleiben, müssen Sie selber testen, ich hatte hier keine drin, kann das daher im Moment leider nicht beurteilen.

Weitere Hindernisse: TLabel und TButton "unbekannt"

Bereits mit Delphi XE4 hat es eine Neusortierung der Funktionen und Komponenten in den einzelnen FireMonkey-Units gegeben. 

Eine Beschreibung der Einzelheiten dazu finden Sie hier:

http://docwiki.embarcadero.com/RADStudio/XE4/de/Umgestaltete_FireMonkey-Klassen_in_XE4

Button und Labels sind nun in der Unit FMX.StdCtrls verortet, diese müssen Sie daher unter "Uses" als Unit hinzufügen. Delphi ist während dessen übrigens etwas übereifrig und fügt dann automatisch weitere Units hinzu, teilweise doppelt. Wundern Sie sich dann also nicht über entsprechende Fehlermeldungen während der Kompilierung, sondern entfernen Sie dann einfach die doppelten Einträge.

Außerdem hat das Programm für die Windows-Plattform gemeckert, dass "Application.mainform.handle" nicht kompatibel sei mit "TWindowHandle". Das konnte ich momentan nur mit einem Work-Around umgehen, indem ich hier als "Application.mainform.handle" einfach durch "0" ersetzt habe. Kann aber auch keine Dauerlösung sein.

Um die "TFillTextFlags" im Zusammenhang mit der Druckfunktion nutzen zu können, musste ich die Unit "FMX.Graphics" einbinden, auch eine Folge der oben erwähnten Neuordnung. Wenn also irgendwann etwas als "unbekannt" angemeckert wird, denken Sie an diese Neusortierung und gehen auf die Suche und passen es entsprechend an.

Problem des OS-Menü-Eintrags
Für Delphi XE3 hatte ich bereits in meinem FireMonkey-Buch eine Lösung beschrieben, wie man unter Windows den Eintrag "Datei" hat, unter MAC aber den Eintrag "Ablage" und wie man für MAC OS X ein System-Menü bekommt, das den Namen des Programms enthält.

Das funktioniert (evtl. schon auch ab XE4) nicht mehr in XE5, hier wird unter MAC OS X immer ein eigenes OS System-Menü erstellt, dass nur einen Eintrag enthält, nämlich den, um das Programm zu beenden.

Das kann man aber mit einem Trick und einem Griff in die MAC-Systemfunktionen beheben. Aber erst hier noch mal zur grundsätzlichen Vorgehensweise:

Ich will in meinem System-Menü-Eintrag "TEditor"nicht nur einen Befehl haben, um das Programm zu beenden. Nach Apple-Konvention gehört da auch die Info über das Programm rein. Und wenn vorhanden, auch ein Menübefehl für die Vornahme von Einstellungen für das Programm. Unter Windows findet man den "Über Programm..." - Eintrag üblicherweise im Hilfe-Menü. Nachfolgend ist gezeigt, wie das entsprechend geändert wird (die Unit "MacApi.Appkit" muss dazu unter Uses eingebunden werden):

Nach den Änderungen muss das Menü neu erzeugt werden, das geschieht mit "MainMenu1.RecreateOSMenu" (nur zur Sicherheit, um Verwechslungen zu vermeiden: "MainMenu1" ist die FireMonkey-Komponente, die Variable "MainMenu" ist ein Pointer auf das Original vom MAC-OS-System verwalteten Menü).

Dann erhalten wir aber im Ergebnis einen doppelten Eintrag für "TEditor", einmal meiner aus dem MainMenu1 und einmal von Delphi EXE5 automatisch erzeugten Eintrag.

Um diesen automatisch erzeugten Eintrag wieder zu entfernen, holen wir uns das OS-Menü, wie es letztlich vom MAC OS-System verwaltet wird:

"NSAPP := TNSApplication.Wrap (TNSApplication.OCClass.sharedApplication);"
"Mainmenu = NSApp.mainmenu"

Wenn das funktioniert hat, rufen wir mit den folgenden Zeilen den ersten Eintrag ab, entfernen diesen und alles wird wie gewünscht unter MAC-OS X angezeigt:

Hinweis: Irgendwo habe ich mal gelesen, dass das OS-Menü immer neu erstellt wird, wenn man einen Menü-Eintrag sichtbar oder unsichtbar stellt oder von Enabled auf Disabled. Das habe ich hier in einem Test jetzt nicht so feststellen können. Aber falls Sie doch einmal vor diesem Problem stehen sollten und das unerwünschte Menü sich wieder in den Vordergrund drängt, dann müssen Sie das, was ich hier in den Create-Event gepackt haben, einfach als eigene Prozedur erstellen. Die rufen Sie immer dann auf, wenn der gewünschte Zustand wieder hergestellt werden soll.

So, die Umstellung des Projekts TEditor auf Delphi XE5 hat also nur wenige Stunden benötigt, gerade habe ich die neue Version zu Apple hochgeladen, "Waiting for Review" kann nun Stunden oder Tage bedeuten (das ist eindeutig der Nachteil des Vertriebs über den App-Store).

Fazit
Delphi XE5 bringt uns wieder einen Schritt weiter. Die FireMonkey TMemo-Komponente ist ein wenig stabiler geworden und auch die Undo-Funktion ist jetzt nutzbar (habe ich also direkt in meinen TEditor eingebaut). XE4 und XE5 bieten einen komfortableren Umgang mit den Projekt-Icons an, man kann direkt die MAC-Icons hier einpflegen. Auch der Bereitstellungsmanager bietet Erleichterungen, man kann mehrere Dateien auf einmal auswählen und Änderungen zuweisen. Von den ganzen Neuerungen zu IOS und Android natürlich einmal abgesehen, das war ja schließlich der Schwerpunkt der Änderungen in Delphi XE5.

Was nicht so schön ist, betrifft die teils mangelnde Rückwärtskompatibilität zwischen den einzelnen FireMonkey-Versionen. Wobei man aber andererseits sagen muss, dass der Aufwand nicht groß war, um das anzupassen.

Was ich mir noch mehr wünsche, ist das ganz einfache Dinge mal erledigt werden. Dass z.B. eine "Hint-Funktion" für die FireMonkey-Komponenten angeboten wird. Oder dass ein TSpeedButton selber ein Image enthält, ohne dass man sich selber was basteln oder auf Drittanbieter zurückgreifen muss. Der Styles-Editor hat immer noch verschiedene Macken und bestimmte Komponenten-Attribute werden gar nicht dauerhaft gespeichert (z.B. "Helpkeyword", den möglichen String-Eintrag habe ich in Windows-Projekten für andere Zwecke genutzt).

Ein paar Einträge zu Fehlern oder Dinge, die noch dringend benötigt werden, habe ich auch schon bei Quality-Central gemacht und ich werde mit Sicherheit auch noch ein paar weitere machen (meine Bitte wäre an die Leser des Blogs, dies auch zu tun, wenn der Hersteller die Fehler nicht kennt, wird er diese auch nicht ändern können).

Mein Wunsch wäre, dass diese Meldungen auch tatsächlich und zügiger abgearbeitet werden.

Insgesamt muss man aber sagen, dass die Möglichkeiten, die Delphi XE5 bietet, einmalig sind. Welche Entwicklungsumgebung bietet das schon an? Wenn wir es schaffen noch bestehende Ungereimtheiten zu beseitigen, wird das ein ganz großes Ding, womit wir Delphi-Entwickler ein wirklich mächtiges Werkzeug erhalten.

Neues FireMonkey Buch verfügbar
Es haben mich verschiedene Leute gefragt, ob ich auch ein Buch für die neueren FireMonkey-Versionen erstellen werde. Die Antwort ist "Ja". Und ich werde das auch weiterhin in Deutscher Sprache machen. Nicht weil ich so ein "Deutschtümler" wäre, sondern weil ich finde, dass es für den Leser einfacher ist, sich durch solche per se komplizierten Texte zu kämpfen, wenn es in der eigenen Muttersprache ist.

Seit dem 10. November gibt es eine erste Version, die auf die Verwendung von XE4/XE5 angepasst ist.

Hinweis 1: Da das existierende Buch für Delphi XE3 und FireMonkey 2 ja einige Sachverhalte von XE4 bzw. XE5 nicht abdeckt, habe ich den Preis auf 24,99 Euro gesenkt (wird in Amazon erst in einigen Stunden gültig sein, für den Erwerb der PDF-Datei im Direktdownload von meiner Seite per PayPal gilt er ab sofort). Für Anwender von XE3 jetzt eine gute Gelegenheit zuzugreifen.

Hinweis 2: Auch das neue Buch wird 24,99 Euro kosten, vielleicht stellte der Preis von 39,-- Euro doch eine zu große Hemmschwelle für den einen oder anderen dar.

Hinweis 3: Ist eigentlich mehr eine Bitte. Wenn mein Buch Ihnen als Leser eine Hilfe war, wäre ich dankbar, wenn Sie bei Amazon eine entsprechend positive Kritik abgeben könnten. Ohne das geht es kaum bei Amazon. 

Also, was ist Ihre Meinung zur Verwendung zu Delphi XE5 und FireMonkey, wie sind Ihre eigenen  Erfahrungen? Wenn Sie Anregungen zu Themen haben, lassen Sie es mich gerne wissen. Meine Mailadresse finden Sie oben auf der Seite unter dem Link "Anbieterkennzeichnung & Kontakt". Über meinen Hastasoft-Twitter Account werde ich posten, wenn neue Blogbeiträge zur Verfügung stehen. Wenn Sie wollen, klinken Sie sich dort ein (siehe meine Hastasoft-Seite).

Viel Erfolg mit Delphi und FireMonkey!

Harry Stahl, 08.11.2013