11. Delphi XE8 und FireMonkey (22.04.2015)
Seit ca. zwei Wochen steht Delphi XE8 mit einem erweiterten FireMonkey-Framework bereit. Bezogen auf den mobilen Teil ist sicher die Unterstützung von iOS 8.x mit 64Bit die wichtigste Neuerung. Für den Desktop-Bereich gibt es einige Neuerungen, auf die wir schon lange gewartet haben:

  • eine Webbrowser-Komponente

  • die TImageList

  • Images in TSpeedButton, TButton (über einen Index zur Imagelist)

  • Images in Actions

  • Images in TListboxItems, TTabItems, TTreeViewItems.

  • TGlyph (Alternative / Ergänzung zu TImage)

Hier möchte ich einmal auf die TImageList eingehen.

Auf eine TImageList-Komponente doppelt geklickt sieht es so aus:

Man kann hier unterschiedliche Bitmap-Arten (BMP, PNG, GIF) in unterschiedlicher Größe hinzufügen. Intern gespeichert werden allerdings alle Bitmaps im PNG-Format. Die tatsächlichen Größenangaben sieht man im oberen Anzeigebereich. Die Angaben unten legen lediglich fest, in welcher Größe die Bilder in der "Liste der Bilder" angezeigt werden.

Bitmaps, die man über den linken Editierbereich hinzufügt (Symbol "Neu"=erster Schalter unter "Quellen der Bilder"), behalten den Hintergrund.

Bitmaps, welche man über die untere Button-Gruppe hinzufügt, werden transparent dargestellt.

Mit den Schaltern unter "Ausgewähltes Bild" kann man neue Bild-Ebenen hinzufügen (Layer). Intern besteht die TImageList aus einzelnen MultiResBitmaps:

Leider kann man die MultiResBitmaps nicht direkt über den ImageList-Dialog bearbeiten, sondern man muss über die Strukturliste auf der linken Seite im
Delphi-Fenster auf das MultiResBitmap zugreifen, wenn man z.B. weitere
Auflösungen hinzufügen will.

Der Eintrag "FileName" bleibt nur so lange erhalten, wie man diese Information als Entwurfszeitinfo benötigt. Um ihn dauerhaft zu entfernen, drückt man im ImageList-Bearbeiten-Dialog auf den Schalter mit dem Besen-Symbol.

Der Eintrag "Name" bleibt dauerhaft erhalten. Hierüber kann man auf die Bitmap später mit der Funktion

IF ImageList1.BitmapByName (SourceName, Item, Size) then begin    
   Item.bitmap....
end;

zugreifen. Item ist ein VAR Parameter des Typs "TCustomBitmapItem";

Einen direkten Zugriff auf eine Bitmap kann man auch über

MyBitmap.assign ( ImageList1.bitmap (Size, Index));

erlangen. Interessant ist dabei, dass Size ein Record ist und die Größe und Breite der Bitmap angibt, die bei Bedarf entsprechend skaliert wird. Bei Bedarf kann man abfragen, ob das Bitmap mit dem Index überhaupt existiert:

If Imagelist1.BitmapExits (Index) then begin
  ...
end;

Hier mal ein Beispiel zur Design-Zeit für die Verwendung der ImageList:

Alle die hier angezeigten Komponenten haben nun eine Eigenschaft "Images", die man mit der Imagelist verbinden kann. Was mir sehr gefällt ist, dass nun auch das ListBoxItem ein Index-Eintrag für ein Image aus der ImageList hat. Diese Funktionlität benötigt man in der VCL sehr oft und musste dort umständlich durch OwnerDraw-Events selber gezeichnet werden. Das geht hier nun sehr viel einfacher.

Ich gehe davon aus, dass der MIDA-Converter (zur Erinnerung, das Programm welches VCL-Formulare in FMX-Formulare umwandelt) auch die Konvertierung der VCL-Imagelist und die Image-Indexeinträge bei der Actionlist unterstützen wird.

Insofern wird das dann die Konvertierung von VCL-Programmen nach FMX noch deutlich vereinfachen und beschleunigen.

Ich persönlich freue mich sehr über diese Verbesserungen und werde jetzt mit XE8  ein weiteres meiner Programme (meine Terminverwaltung TimOnize) auf FMX umsatteln, um so auch die MAC-Plattform sowie die mobilen Plattformen bedienen zu können.


Ein Tipp: Falls Sie überlegen mit FMX zu arbeiten oder dies schon tun und auf der Suche nach Problem-Lösungen für Fragen beim Umstieg von VCL nach FMX sind, dann können Sie - falls Sie kindle-unlimited Mitglied bei Amazon sind - kostenlos mein FireMonkey Buch für XE4 / XE5 lesen, da ich das Buch in das unlimited Programm eingebracht habe: (Link).