![]() |
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:
Aber an der markierten Stelle fehlt mir das KnowHow. Im Netz finde ich nur alte Kamellen von 2010 zum Thema.
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; Kann jemand helfen? creehawk |
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. ![]() 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) |
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 |
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 |
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. |
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 00:42 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