Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Out of system resources beim hinzufügen von Icon Zu ImageList (https://www.delphipraxis.net/173545-out-system-resources-beim-hinzufuegen-von-icon-zu-imagelist.html)

Shark99 2. Mär 2013 01:55

Out of system resources beim hinzufügen von Icon Zu ImageList
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich kriege eine (in dem Fall) merkwürdige Out of System Resources Exception beim Laden eines bestimmten Icons (icon.ico). Mit anderen Icons funktioniert der Code. Andere Programme (Explorer, ThumbsPlus) können diese Icon aber korrekt anzeigen.

Habe ein Beispielprojekt inkl des Icons angehängt.

Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Icon: TIcon;
begin
     try
          Icon := TIcon.Create;
          Icon.LoadFromFile('icon.ico');
          ImageList1.AddIcon(Icon);
          Caption := IntToStr(ImageList1.Count);
     finally
          Icon.Free;
     end;
end;

Shark99 2. Mär 2013 03:25

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Es liegt anscheinend daran dass es ein Multi-Size Icon ist. Gibt es außer ExtractIconEx() eine andere Möglichkeit an das erste Icon zu gelangen? Ich meinem richtigen Code habe ich das TIcon in einem TMemoryStream (nutze TIcon.LoadFromStream), und würde nur ungern den Stream in einer Datei zwischenspeichern, weil es bei vielen Icons den ganzen Prozess sehr verlangsamen würde.

Bummi 2. Mär 2013 04:58

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Zacherl hatte das Zerlegen von Icongroups einen Artikel http://www.delphipraxis.net/170682-l...resourcen.html mit behandelt.

EDIT: Crosspost http://stackoverflow.com/questions/1...rces-exception

Shark99 2. Mär 2013 10:34

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Danke, aber leider löst es mein Problem nicht, da es dort "nur" LoadFromFile und LoadFromResource, aber kein LoadFromStream gibt. :/

Aviator 2. Mär 2013 11:51

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Bei mir kam diese Meldung, als ich der ImageList ein Bild zuweisen wollte und die Auflösung (bzw. die Größe) dieses Bildes größer war als die der ImageList.

Beispiel:
Auflösung vom Bild: 20x20
Eingestellte Auflösung bei der ImageList Einstellung: 16x16

Shark99 2. Mär 2013 18:15

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Hab festgestellt dass sogar wenn man mit ExtractIconEx() das SmallIcon rausnimmt und es versucht der ImageList hinzuzufügen es immer noch nicht geht. Also es muss was anderes an dem Icon sein was ImageList nicht mag. Sogar wenn man das SmallIcon abspeichert (wird in Explorer korrekt angezeigt) und neu lädt, mag es ImageList nicht.

Shark99 2. Mär 2013 18:16

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Zitat:

Zitat von Aviator (Beitrag 1205708)
Bei mir kam diese Meldung, als ich der ImageList ein Bild zuweisen wollte und die Auflösung (bzw. die Größe) dieses Bildes größer war als die der ImageList.

Beispiel:
Auflösung vom Bild: 20x20
Eingestellte Auflösung bei der ImageList Einstellung: 16x16

Welches Delphi verwendest du? Der Test war mit Delphi 7. Vielleicht wurde die Fehlermeldung in späteren Delphi-Versionen ausgebessert. Aber wie ich schon schrieb, auch wenn man das SmallIcon nicht, wird es von ImageList nicht akzeptiert.

Aviator 2. Mär 2013 18:19

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Ich verwende (wie links auch sichtbar) Delphi 2009 Architect.
Die Meldung war die Gleiche nur eben auf Deutsch. War auch nur eine Idee. Mein Fehler war dadurch behoben. Hast du irgendetwas bei der Image List eingestellt, so dass sie spezielle Eigenschaften besitzt und dadurch nicht mehr mit dem Icon klar kommt?

Shark99 2. Mär 2013 18:25

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Nein, ist einfach nur eine leere ImageList. Und wie gesagt, andere .ico Dateien funktionieren! Ein Icon von 100+ getesteten geht nicht. Gleichzeitig haben weder Explorer, noch IrfanView, oder ThumbsPlus ein Problem damit.

Shark99 2. Mär 2013 22:49

AW: Out of system resources beim hinzufügen von Icon Zu ImageList
 
Das Problem liegt daran dass dieses Icon ein PNG-ICON ist. Kein .png Gfx-File, sondern eine PNG-Struktur innerhalb einer Windows Icon Struktur. Das ist anscheinend seit Vista erlaubt. Out of Resources kommt davon dass Delphi 7 sowas nicht erwartet und statt des BMP Headers die PNG-Daten liest und dann versucht paar Exabytes zu allozieren (weil Breite der Bitmap von einer falschen Stelle gelesen werden).

Die Lösung des Problems besteht darin den Header im Voraus zu überprüfen und es in ein TIcon nur dann wandeln, wenn ein BMP Header vorhanden ist. Habe diese Lösung von TLama bekommen.

edit:

hier mehr info zum thema

http://blogs.msdn.com/b/oldnewthing/.../10079192.aspx


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:32 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