Delphi-PRAXiS
Seite 2 von 2     12   

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/)
-   -   ImageCollection VirtualImageList Bilder von Festplatte laden (https://www.delphipraxis.net/204367-imagecollection-virtualimagelist-bilder-von-festplatte-laden.html)

Uwe Raabe 24. Mai 2020 09:23

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Zitat:

Zitat von Strict (Beitrag 1465110)
Das Bild img1 wird in der VirtualImageList aber ans Ende angefügt egal welchen Wert IndexOld hat.

Ein Add fügt halt immer an. Der übergebene Index ist ja auch der in der ImageCollection und nicht der in der VirtualImageList. Wie schon gesagt, wäre Insert der bessere Ansatz.

Ich bin mir auch nicht sicher, ob dir bewusst ist, daß eine TVirtualImageList auch eine Teilmenge der Bilder einer TImageCollection enthalten kann und die Reihenfolge beliebig ist. Daher gibt es auch die Möglichkeit, die Verknüpfung mit dem Bildnamen anstatt des Index in der ImageCollection zu machen. Dann ist das gegen Umsortierungen in der ImageCollection immun.

Zitat:

Zitat von Strict (Beitrag 1465110)
Und wenn man zur Laufzeit Bilder laden möchte?
Ich möchte vorhandene Bilder einer ImageCollection und VirtualImageList durch andere zur Laufzeit austauschen.

In dem Fall bleibt dann eben nur der steinige Weg, das alles von Hand zu machen.

Verwendest du denn die automatische Größenanpassung der VirtualImageList überhaupt? In dem Fall solltest du doch auch unterschiedliche Größen deiner Bilder in separaten Dateien vorliegen haben. Theoretisch könnte man zwar auch von 256 Pixeln auf 16 skalieren lassen, aber das sieht in der Regel eher bescheiden aus. Deine Eingangsfrage lässt aber den Größen- und Skalierungs-Aspekt komplett außen vor. Das wirft wiederum die Frage auf, ob die Kombination aus TVirtualImageList und TImageCollection für deinen Anwendungsfall überhaupt die richtige Wahl ist.

Strict 24. Mai 2020 12:31

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Mit Add funktioniert es jetzt.

Uwe Raabe 24. Mai 2020 13:10

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Zitat:

Zitat von Strict (Beitrag 1465123)
Wenn ich Insert statt Add verwende, funktioniert leider gar nichts mehr.

Dann wäre es vielleicht mal Zeit für etwas Code um das nachzuvollziehen.

Zitat:

Zitat von Strict (Beitrag 1465123)
Ich benutze die Namen der Bilder, nicht die Indexe. Aber es liegt mir viel daran, die Reihenfolge zu behalten. Das hat seine Gründe in anderen Teilen des Programms.

Ob die VirtualImageList sich per Index oder Name mit der ImageCollection verbindet, sollte im Rest des Programms eigentlich egal sein. Wichtig ist doch nur die Reihenfolge der Bilder innerhalb der VirtualImageList (aktuell zumindest noch).

Strict 24. Mai 2020 13:42

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Es ist lauffähig. Hoffe ich jedenfalls. Nur das Problem mit dem Disabled-Bild habe ich noch nicht gefunden.
Komisch ist auch, dass wenn ich mehr als ein Bild durch LoadCustomImage schicke, die Liste scheinbar kaputt gemacht wird.
Lade ich ein Bild "d.png" und danach ein Bild "a.png", wird da wo a angezeigt weren soll, b angezeigt. Das führt sich so immer weiter fort.
Ich habe im Anhang ein Minimalbeispiel angefügt.

mmw 24. Mai 2020 15:44

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Hallo,

vielleicht sollte man nach einer Änderung

Images.Change;

aufrufen.


Gruß

Uwe Raabe 24. Mai 2020 17:32

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Du machst es einem Menschen mit Rot/Grün-Schwäche aber echt schwer...

... und doch zu kompliziert. Da du nur eine Größe für die Bilder hast, geht es auch einfacher:
Delphi-Quellcode:
procedure TForm1.LoadCustomImage(const Path, ImageName: string);
var
  index: Integer;
  fileName: string;
begin
  fileName := ExtractFilePath(ParamStr(0)) + Path + '\' + ImageName + '.png';
  if not FileExists(fileName) then
    Exit;

  index := Images.GetIndexByName(ImageName);

  if (index = -1) then
    Exit;

  Images.Images[index].SourceImages[0].Image.LoadFromFile(fileName); // ersetzt das Source-Image
  Images.Images[index].Change; // aktualisiert die VirtualImageList, die auch gleich das Disabled-Image erneuert
end;

Strict 24. Mai 2020 18:33

AW: ImageCollection VirtualImageList Bilder von Festplatte laden
 
Zitat:

Du machst es einem Menschen mit Rot/Grün-Schwäche aber echt schwer...
Das war nichtr gewollt. Sorry. Ich hatte auf die Schnelle keine anderen Icons und musste in Paint irgendetwas kritzeln.

Ich wusste nicht, dass das Ändern der ImageCollection auch gleichzeitig die VirtualImageList aktualisiert.

Zitat:

Da du nur eine Größe für die Bilder hast,
Die Bilder sind alle 64x64 groß und weren von der VirtualImageList zusätzlich auf 16x16x, 24x24 und 32x32 runtergerechnet.

Zitat:

vielleicht sollte man nach einer Änderung Images.Change;
Das habe ich anfangs tatsächlich gemacht, da das auch so in den Sourcen der ImageCollection steht. Das hat aber leider das Durcheinanderwürfeln der Bilder nicht verhindert.
Mein Fehler war scheinbar, dass ich aus beiden Listen gelöscht habe, was aber nicht sein muss (?)

Vielen dank an euch beide.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Seite 2 von 2     12   

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