Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Vergessliche Imagelist (https://www.delphipraxis.net/203606-vergessliche-imagelist.html)

creehawk 4. Mär 2020 10:43

Vergessliche Imagelist
 
Moin.

Die Imagelist vergisst Bilder.?

Ich lese aus einer elend langen XML die erforderlichen Daten für die Anzeige in einem ListView. GUID, Name und Grafikname. Das gebe ich in ein Listview. Klappt bestens.

Delphi-Quellcode:
function GetItemListStandard():Boolean;
   Var
   I:Integer;
   ListItem            : TListItem;
   ItemListStandard    : TStringList;
   ItemListStandardGUID : TStringList;
   PNGList             : TImageList;
   PNGImage            : TPNGObject;
   BMPImage            : TBitmap;
   Name:String;
   GUID:String;
   begin
   Main.ItemView.Clear;
   PNGImage := TPngObject.Create;
   BMPImage := TBitmap.Create;
   PNGList := TImageList.Create(Main);
   PNGList.Width:=48;
   PNGList.Height:=48;
   PNGList.DrawingStyle:=dsTransparent;
   PNGList.ColorDepth := cd32Bit;
   Main.ItemView.SmallImages := PngList;
   ItemListStandard:=TStringList.Create;
   ItemListStandardGUID:=TStringList.Create;
   
   // Daten holen aus XML   
   ItemUnits := ItemRoot.SelectNodes('Item');
   For I := 0 to ItemUnits.length-1 do
    begin
     If AnsiPos(ItemAllocation,ItemUnits.item[I].attributes[3].Text) > 0 then
           begin
      ItemListStandard.Add(ItemUnits.Item[I].attributes[1].Text);
      ItemListStandardGUID.Add(ItemUnits.Item[I].attributes[0].Text);
      PNGImage.LoadFromFile(MinPath + ItemUnits.Item[I].attributes[5].Text);
      BMPImage.Assign(PNGImage);
      PNGList.Add(BMPImage,nil);
     end;
    end;
   ItemList := Nil;

  For I := 0 to ItemListStandardGUID.Count-1 do
  begin
   ListItem := Main.ItemView.Items.Add;
   Listitem.Caption := ItemlistStandardGUID.Strings[I];
   Listitem.Subitems.add(ItemlistStandard.Strings[I]);
   ListItem.ImageIndex := I;
  end;
Result:= True;    
end;
Bestens in soweit als das die Ausgabe zunächst korrekt erscheint. Einzelne Bilder fehlen allerdings und am Ende der Anzeige gibt es dann noch Einträge aber dann eben ohne Bild.

Im Kern fehlen immer die drei gleichen Bilder. Ich habe diese drei PNG's rauf und runter geprüft, sind ok. Fehlermeldungen gibt es auch nicht. Beim DIREKTEN lesen der entsprechenden Grafik ist die Grafik definitiv nicht da.

Hat jemand irgendeine Idee.......

creehawk

P.S. Die Grafiken wurden als DDS(BC/,SRGB) in PaintNet geladen und wg.Transparenz als PNG gespeichert.

MyRealName 4. Mär 2020 11:37

AW: Vergessliche Imagelist
 
Ich dachte, die normale TImageList kann kein PNG.
Oder vllt. sind diese 3 anders als die anderen...

himitsu 4. Mär 2020 12:47

AW: Vergessliche Imagelist
 
Vorm PNGList.Add mal ein BMPImage.SaveToFile, bzw. in einem TImage anzeigen ... ist da das Bild auch noch da?
Ich hatte hier den Fall, dass es beim Zeuchnen von PNGs auf ein TBitmap manchmal ein weißes Bild raus kam, aber bei mir ist es ein multithreadingproblemchen, welches eigentlich nicht existieren sollte.

Die TImageList der VCL kann auch kein PNG, außer es wurde vorher in ein Bitmap konvertiert, um es ihr zu geben.

was sie genau kann, siehe MSDN-Library durchsuchenImageList_Create und MSDN-Library durchsuchenImageList_Add der comctl32.dll, welches ausschließlich ein HBITMAP haben möchte.

Für Linux wurde im Cylix mal ein eignes libcomctl32.borland.so verwendet
und die TImageList des FMX ist was komplett Anderes, die kann auch nativ PNG.


ACHTUNG:
Wenn man es genau nimmt, hat die VCL-ImageList intern nur ein einziges Bitmap, auf dem alle Einzelbilder draufgemalt sind.
Das heißt dass auch alle Bilder auch gemeinsam das selbe Setting z.B. für Transparenzen/Alphakanal nutzen (abgesehn von der indivituellen Transparenzfarbe, beim Ausschneiden)

uligerhardt 4. Mär 2020 13:00

AW: Vergessliche Imagelist
 
Was gibt
Delphi-Quellcode:
PNGList.Add
denn zurück?

himitsu 4. Mär 2020 13:21

AW: Vergessliche Imagelist
 
Zitat:

Zitat von uligerhardt (Beitrag 1458898)
Was gibt
Delphi-Quellcode:
PNGList.Add
denn zurück?

Den Index des eingefügten Bildes. :stupid:

uligerhardt 4. Mär 2020 13:31

AW: Vergessliche Imagelist
 
Zitat:

Zitat von himitsu (Beitrag 1458901)
Zitat:

Zitat von uligerhardt (Beitrag 1458898)
Was gibt
Delphi-Quellcode:
PNGList.Add
denn zurück?

Den Index des eingefügten Bildes. :stupid:

Im konkreten Fall beim OP, meinte ich. Vielleicht ja -1.

jaenicke 4. Mär 2020 13:54

AW: Vergessliche Imagelist
 
Passiert es denn auch, wenn du nur dieses Bild in die Liste packst und anzeigst? Kannst du solch ein kleines Projekt vielleicht als Beispielprojekt zeigen oder sind die betroffenen Bilder alle privat?

creehawk 4. Mär 2020 13:56

AW: Vergessliche Imagelist
 
Also kurz gesagt: allgemeines Rätselraten.

Ich habe jetzt malwas versucht: Man kann die Elemente in den Stringlists und der Imagelist ja zählen (count). In der Imagelist sind es mal 1, dann 2 oder drei weniger als in den Stringlists.

Heißt: irgendwo beim umwandeln und einfügen geht wohl was verloren.....

Und es sind unter 778 Bildern genau 3. Wenn ich die lösche geht es prima.



creehawk




Transportfähig geht leider nicht....

uligerhardt 4. Mär 2020 14:06

AW: Vergessliche Imagelist
 
Zitat:

Zitat von creehawk (Beitrag 1458910)
Ich habe jetzt malwas versucht: Man kann die Elemente in den Stringlists und der Imagelist ja zählen (count). In der Imagelist sind es mal 1, dann 2 oder drei weniger als in den Stringlists.

Heißt: irgendwo beim umwandeln und einfügen geht wohl was verloren.....

Das könnte bedeuten, dass du mal meine Frage beantworten solltest. 8-)

creehawk 4. Mär 2020 14:16

AW: Vergessliche Imagelist
 
@uligerhardt: Entschuldige: in allen 778 Fällen keine -1.

Wie in der vorherigen Post gesagt: ich habe die drei Bilder (und die dazugehörigen XML Einträge) mal gelöscht, ging prima, alles andere war da. Dann habe ich die drei ersetzt durch ein anderes Bild. Ging auch prima.

Heißt jetzt für mich: Beim umwandeln passiert mit diesen drei Grafiken etwas. Fragt sich was. Ich werd die drei mal einer besonderen Begutachtung unterziehen, mal sehen was dabei rauskommt.

creehawk


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.
Seite 1 von 2  1 2      

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