AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls ImageCollection VirtualImageList Bilder von Festplatte laden
Thema durchsuchen
Ansicht
Themen-Optionen

ImageCollection VirtualImageList Bilder von Festplatte laden

Ein Thema von Strict · begonnen am 23. Mai 2020 · letzter Beitrag vom 24. Mai 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#11

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 10:23
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.

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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Strict

Registriert seit: 25. Mär 2020
47 Beiträge
 
#12

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 13:31
Mit Add funktioniert es jetzt.

Geändert von Strict (24. Mai 2020 um 23:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#13

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 14:10
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.

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).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Strict

Registriert seit: 25. Mär 2020
47 Beiträge
 
#14

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 14:42
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.

Geändert von Strict (24. Mai 2020 um 23:10 Uhr)
  Mit Zitat antworten Zitat
mmw
(Gast)

n/a Beiträge
 
#15

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 16:44
Hallo,

vielleicht sollte man nach einer Änderung

Images.Change;

aufrufen.


Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#16

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 18:32
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Strict

Registriert seit: 25. Mär 2020
47 Beiträge
 
#17

AW: ImageCollection VirtualImageList Bilder von Festplatte laden

  Alt 24. Mai 2020, 19:33
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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