AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Vergessliche Imagelist

Ein Thema von creehawk · begonnen am 4. Mär 2020 · letzter Beitrag vom 5. Mär 2020
Antwort Antwort
Seite 1 von 2  1 2      
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
243 Beiträge
 
Delphi 10.4 Sydney
 
#1

Vergessliche Imagelist

  Alt 4. Mär 2020, 10:43
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.
  Mit Zitat antworten Zitat
Benutzerbild von MyRealName
MyRealName

Registriert seit: 19. Okt 2003
Ort: Heilbronn
689 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 11:37
Ich dachte, die normale TImageList kann kein PNG.
Oder vllt. sind diese 3 anders als die anderen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#3

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 12:47
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)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 4. Mär 2020 um 13:08 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#4

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 20:56
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.
Tja, ich hatte da auch keine Fehlermeldung, obwohl ich alle Results gewissenhaft ausgewertet hatte.

PS: Es gibt plötzlich ein Delphi-Referenz durchsuchenTVirtualImageList an das man ein TImageCollection anhängen kann.
Geht dann fast in Richtung der TImageList vom FMX.
* Images können für die Verwaltung gruppiert werden
* und man kann die Images auch mit Namen ansprechen, anstatt nur über einen Index,
* auch wenn die doppelte Behandlung auch nicht extrem optimal ist.
** erst alle Bilder in Originalgröße in die Collection laden
** und dann nochmal die Bilder in der ImageList hinzufügen, mit automatischen skalieren und konvertieren

http://docwiki.embarcadero.com/Libra...rtualImageList (Componenten-Palette: Windows 10)
https://www.delphipraxis.net/198699-...imagelist.html
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Mär 2020 um 14:52 Uhr) Grund: Link zur OH eingefügt, auch wenn es dort noch nichts findet
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
243 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Vergessliche Imagelist

  Alt 5. Mär 2020, 14:36
Moin nochmal.

Danke für Hinweis, das Teil gibt es ja wohl schon seit 2018. Die Hilfe gibt leider nichts richtig preis, im Netz findet sich eine angemessen schwer verdauliche Erläuterung. Aber nach 3 Stunden rumgefummel : die Unterschiede im Handling zu anderen Image/Listen/Anzeigen sind nicht wesentlich.

Fazit:
Eine sehr schöne und von der dann ausgegebenen Bildqualität erste Klasse, auch bei Skalierungen. Irgendwelche Umwandlungen sind nicht nötig. Man kann per Namen des Bildes operieren und nicht nur per Index. Sämtliche in Delphi unterstützte Grafikformate kann man benutzen.

Für meine Zwecke die perfekte Lösung, die alleine jetzt eher nicht gefunden hätte.

@himitsu : Der Dank des Vaterlandes wird Ihnen ewig nachschleichen!!

creehawk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#6

AW: Vergessliche Imagelist

  Alt 5. Mär 2020, 15:16
Hatte die Komponente gestern zufällig erst gefunden. (die gibt es seit knapp einem Jahr)

Eigentlich wollte ich mir den grauenhaften ImageList-Editor im FMX etwas anpassen,
aber leider gibt es nur den QuellCode des Editors der alten VCL-TImageList.

Da ich nun also mir komplett selber einen Editor bastel
und es nun eine entfernt ähnliche Komponente komponente in der VCL gibt,
und mich das Unübersichliche mit dem fehlenden Namen/Hinweistext und der Grupierung schon immer gestört hat.
Fing ich gestern an mir "halbwegs" gleiche Editoren für VCL und FMX zu erstellen.

Für VCL eine Kombiklasse aus TVirtualImageList mit integrierter TImageCollection und einer Collection untergeordneter TVirtualImageList für mehrere Größen,
wobei den letzte Teil wollte ich heute abend noch testen, ob der Standardproperty-Editor für TImageList die Subkomponenten mit auflistet. (z.B. in einem Button.Images)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.910 Beiträge
 
Delphi 12 Athens
 
#7

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 13:54
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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
243 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 13:56
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....

Geändert von creehawk ( 4. Mär 2020 um 14:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 14:06
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.
Uli Gerhardt
  Mit Zitat antworten Zitat
creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
243 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Vergessliche Imagelist

  Alt 4. Mär 2020, 14:16
@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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz