Delphi-PRAXiS

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/)
-   -   Png + imagelist = fehler (https://www.delphipraxis.net/203572-png-imagelist-%3D-fehler.html)

creehawk 1. Mär 2020 16:20

Png + imagelist = fehler
 
Moin.

Ich möchte in ein Listview dynamisch Bilder setzen. Klappt prima,solange ich Icons oder Bitmaps nehme.
Jetzt wäre Transparenz nett. Laut Hilfe kann TImageList auch das Format PNG. (cs32bit, dsTransparent usw.)

Also habe ich das hier produziert:

Delphi-Quellcode:
procedure TMain.TestClick(Sender: TObject);
Var
I:Integer;
ListItem            : TListItem;
ItemListStandard    : TStringList;
ItemListStandardGUID : TStringList;
Image                : TPNGImage;
begin
ItemListStandard    := TStringList.Create;
ItemListStandardGUID := TStringList.Create;
Image                := TPngImage.Create;
ItemUnits := ItemRoot.SelectNodes('Item');
For I := 0 to ItemUnits.length-1 do
  begin
  If AnsiPos('Zoo',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);
    Iamge.LoadFromFile(PNGPath + ItemUnits.Item[I].attributes[5].Text);

    ImageList.add // ja, wie kriege ich die PNG's in die ImageList?
    end;
  end;

  For I := 0 to ItemListStandardGUID.Count-1 do
  begin
    ListItem := ListView.Items.Add;
    Listitem.Caption := ItemlistStandardGUID.Strings[I];
    Listitem.Subitems.add(ItemlistStandard.Strings[I]);
    ListItem.ImageIndex := I;
  end;
end;
Aber an der markierten Stelle fehlt mir das KnowHow. Im Netz finde ich nur alte Kamellen von 2010 zum Thema.

Kann jemand helfen?

creehawk

himitsu 1. Mär 2020 17:03

AW: Png + imagelist = fehler
 
Es hat sich nichts geändert, TImageList in der VCL kann nur TBitmaps und Verwadte wie TIcon, da es intern das Bitmap speichert und zusätzlich eine optionale Maske.
Im FMX sieht das anders aus.

Also entweder du verwendest eine ImageList von einem anderen Hersteller (z.B. TPngImageList) oder du mußt das PNG erstmal in ein TBitmap umwandeln.
https://www.delphipraxis.net/150954-...einfuegen.html

PS: Der Property-Editor von Delphi ist dort zu finden.
ImgEdit.pas -> TImageListEditor.AddClick -> TImageListEditor.DoAdd(Graphic: TGraphic; ...) -> TImageInfo.Create
C:\Program Files (x86)\Embarcadero\Studio\20.0\source\Property Editors\de\ (Delphi 10.3 = IDE-Version 20.0)

creehawk 1. Mär 2020 17:28

AW: Png + imagelist = fehler
 
Aha, alles klar.

Ich habe das jetzt mal so gemacht - also über Bitmap - und da die Transparenz "mitkommt" ist alles genauso wie ich mir das gedacht habe.

Besten Dank!!

creehawk

creehawk 2. Mär 2020 08:49

AW: Png + imagelist = fehler
 
einen hab' ich noch....

Wie gesagt alles läuft wie bisher vorgesehen mit dem Listview, jetzt habe ich noch die mir bekannte Prozedure für das Färben eines ausgewählten Eintrags (OnDrawItem, Canvas etc.) eingestellt und natürlich wird das Image jetzt vom Canvas überpinselt.

Ergo denke ich das ich das Image auch selber zeichnen muss. Tja, fragt sich bloß wie.

Hat jemand einen Hinweis? Per Google kommen jedenfalls nur begrenzt verständliche Infos.

Creehawk

Redeemer 2. Mär 2020 21:57

AW: Png + imagelist = fehler
 
Vielleicht noch ein paar Hinweise zu PNG in ImageList (VCL, D2010, wenn's nicht so langsam gefixt wurde):
- TBitmap.Assign(TPNGImage) glättet das Bild zu Schwarz, behält aber den Alphakanal. Der Farbkanal ist somit Blödsinn und bei transparenten Bereichen umso mehr zu dunkel, je näher man an 50% Deckkraft ist. Weist man ein weißes PNG-Bild mit 50% Deckkraft einer Bitmap zu, hat man ein graues Bild mit 50% Deckkraft. Man muss daher nach Assign immer noch Canvas.CopyRect aufrufen, um die korrekten Farbinformationen erneut zu kopieren.
- Ich füge das sich ergebende Bitmap mit AddMasked(Bitmap, clNone) hinzu. Ich glaube, das macht man so.
- TImageList.ReplaceMasked unterstützt keinen Alphakanal. Add und Insert gehen.

creehawk 4. Mär 2020 10:25

AW: Png + imagelist = fehler
 
OK, danke für diese Hinweise. Zugegeben, hat eine Weile gedauert bis ich das begriffen habe....

creehawk


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