Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TCustomImageList.AddOrSet Parameter (https://www.delphipraxis.net/199146-tcustomimagelist-addorset-parameter.html)

Medium 29. Dez 2018 16:41

TCustomImageList.AddOrSet Parameter
 
Moin!

Ich möchte gerne ein paar TButtons mit Bildern versehen. Die FMX Buttons bieten ja eine TImageList an - ich gehe mal stark davon aus, dass ich diese dafür nutzen kann.

Die Bilder liegen als PNG in meinem Programmverzeichnis. Leider gibt es keine einfache LoadFromFile() Methode mehr in der ImageList, sondern die Methode AddOrSet. Bei dieser verstehe ich ein paar der Parameter nicht, und die Doku sagt leider nur "keine weiteren Informationen" :evil: (Wann wird die denn eigentlich mal komplettiert??)

Code:
function AddOrSet(
  const SourceName: string;
  const Scales: array of Single;
  const FileNames: array of string;
  const TransparentColor: TColor = TColors.SysNone;
  const Width: Integer = 0;
  const Height: Integer = 0)
: TImageIndex;
Unter SourceName würde ich den Dateipfad+Namen vermuten. Aber Scales? Hab ich nicht. Ich habe ein Bild - fertig. Was muss dann da hin? Ebenso das Array von Dateinamen danach. Ich habe doch bereits einen angegeben! Was soll das dann alles noch? TransparentColor ist klar. Width und Height sind wieder komisch. Holt er sich die nicht aus der Datei? Wenn ich diese optionalen Parameter einfach nicht versorge - wird mein Bild dann überhaupt sichtbar sein, oder muss ich die Größe echt manuell setzen?

BITTE bitte Emba. Wenn schon so knappe Parameter wie "Scale" existieren, dann lasst sowas doch wenigstens nicht in der DOKU einfach leer. Langsam nervt es, dass man sich solche Dinge auf zeitfressende Weise quer im Netz zusammenklamüsern muss - wenn man überhaupt mal detaillierte Infos findet. Hierzu habe ich z.B. immer nur eine Möglichkeit gefunden, die das Laden von Bildern über aufwendige Zwischenschritte erledigt hat, oder aber es ging immer nur um die schöne praktische Art und Weise wie man es im Form-Designer machen kann. Ich muss es aber im Code tun - tut mir ja auch leid.

Weiß jemand von euch zufällig, was die Parameter genau bewirken bzw. wie sie zu versorgen wären? Danke!

Uwe Raabe 29. Dez 2018 21:49

AW: TCustomImageList.AddOrSet Parameter
 
Die FMX-ImageList setzt die einzelnen Bilder (auch Destination genannt) aus sogenannten Bildquellen (Source) zusammen. Eine Bildquelle wiederum ist eine Gruppe von Einzelbildern in verschiedenen Größen, die unter einem Namen (SourceName) abgelegt wird. Jedes Einzelbild dieser Bildquelle wird durch einen Faktor (Scale) und einen Dateinamen (FileName) gekennzeichnet.

Ist der bei AddOrSet angegebene SourceName bereits vorhanden, wird die entsprechende Bildquelle ersetzt und in den Destinations alle Referenzen darauf aktualisiert. Ist der SourceName neu, wird aus den Parametern Scales und FileNames eine neue Bildquelle erzeugt. Die Arrays Scales und FileNames müssen gleich lang sein.

TransparentColor gibt, wie der Name vermuten lässt, die Farbe an, die als transparent angenommen wird. Per Default ist das <keine>, womit das Bild einfach übernommen wird, wie es ist.

Width und Height geben die Nenngröße der Bildquelle an, die der Größe bei Scale = 1 entspricht. Sind Width und Height beide 0 wird die Größe des ersten Bildes (FileNames[0]) verwendet und mit dem Scales[0]-Faktor verrechnet.

Wenn ein vorhandener SourceName übergeben, ist der Rückgabewert der Funktion = 0. Andernfalls wird eine neue Destination angelegt, die ausschließlich die neu angelegte Bildquelle enthält, und der neue Index zurückgegeben.

Medium 30. Dez 2018 16:28

AW: TCustomImageList.AddOrSet Parameter
 
Danke! Das wäre doch schon mal ein prima Text, den man in die (Online)-Hilfe-(Datei) packen könnte :)

So 100%ig habe ich das allerdings noch nicht verstanden - und bisher kam ich auch noch nicht dazu es zu testen. Wenn ich nun folgenden Aufruf mache:
Delphi-Quellcode:
Button1.Images.AddOrSet('C:\Ordner\Dateiname.png', [1], ['C:\Ordner\Dateiname.png']);
und den ImageIndex des Buttons auf 0 setze, wird mir dann brav mein Bild "Dateiname.png" in seiner Originalgröße auf dem Button erscheinen?

Uwe Raabe 30. Dez 2018 16:43

AW: TCustomImageList.AddOrSet Parameter
 
Zitat:

Zitat von Medium (Beitrag 1422325)
Delphi-Quellcode:
Button1.Images.AddOrSet('C:\Ordner\Dateiname.png', [1], ['C:\Ordner\Dateiname.png']);
und den ImageIndex des Buttons auf 0 setze, wird mir dann brav mein Bild "Dateiname.png" in seiner Originalgröße auf dem Button erscheinen?

  1. Der erste Parameter sollte dann besser "Dateiname" sein (oder ein anderer, sinnvoller Name des Bildchens)
  2. Der ImageIndex des Buttons sollte auf den Rückgabewert von AddOrSet gesetzt werden, sonst funktioniert das nur bei einer leeren Liste

Uwe Raabe 30. Dez 2018 16:50

AW: TCustomImageList.AddOrSet Parameter
 
Zitat:

Zitat von Medium (Beitrag 1422325)
Das wäre doch schon mal ein prima Text, den man in die (Online)-Hilfe-(Datei) packen könnte

Ist hiermit getan.

Medium 30. Dez 2018 18:09

AW: TCustomImageList.AddOrSet Parameter
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1422327)
Ist hiermit getan.

Danke! :thumb:

Muss die Community hier die Doku schreiben, tztztz.


Auch Danke für die weitergehende Erläuterung. Das heißt, der erste Parameter ist einfach nur ein beliebiger Name? Könnte also auch Klaus oder Birgit sein? Also letztlich nur ein "sprechender Index"? Das wäre ggf. auch noch interessant in der Doku (habe sie jetzt nicht nochmal angeschaut), da das ein Konzept ist, welches Delphianer ggf. nicht so gewohnt sind bisher.


:dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz