![]() |
Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Hallo,
siehe Titel. Wie geht das. Ich such jetzt schon seit einer Stunde im Netz rum, ein Bild zur Laufzeit hinzufügen OK geht mit AddMasked, aber wie tausch ich eins zur Laufzeit aus? Gruß Matthias |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Was ist mit ImageList.Replace?
Code von: ![]()
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Bitmap: TBitmap; begin Bitmap := TBitmap.Create; try Bitmap.PixelFormat := pf32bit; Bitmap.Width := ImageList1.Width; Bitmap.Height := ImageList1.Height; Bitmap.Canvas.Brush.Color := clGreen; Bitmap.Canvas.FillRect(Rect(0, 2, 16, 14)); ImageList1.Replace(0, Bitmap, nil); finally Bitmap.Free; end; end; |
Erledigt AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Ah danke,
Es könnte ja so einfach sein. Die Funktion kannte ich nicht und habs wohl übersehen. Dankeschön |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Hallo zusammen
Ich habe dazu auch eine Frage. Wie kann ich in einem ImageList zur Laufzeit ein "png" Bild auswechseln ? ImageList1.Replace(0, Bitmap, nil); benötigt eine Bitmap... Ich habe schon fast alles versucht, aber em muß doch eine einfache Lösung dazu geben ! Vielen Dank im Voraus Gruß Bernd |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Mit welcher Komponente lädst Du das Png?
|
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Eine TImageList beinhaltet nunmal ausschließlich nur Bitmaps/Icons. Denn das Ding ist "nur" eine Schnittstelle zur entsprechenden Windows-Komponente, welche man beim
![]() Ob nun der Bilderlisten-Editor der VCL auch den Import von anderen Grafikformaten anbietet ist davon unabhängig. Die API bietet jedoch nur den Import von Bitmap/Icon ( ![]() ![]() ![]() und wenn Emba in seiner Komponente es nicht einbaut auch andere Grafikformate anzubieten, was vollkommen verständlich ist diese Komponenten standardmäßig immer in alle Programme einzubinden, dann hast du eben Pech und mußt diese Grafiken eben selber laden, in TBitmap (Image und Mask, bei Transparenzen) umwandeln und dann entsprechend zu übergeben. Wenn es möglich wäre mehrere ClassHelper an einen Typen zu binden, dann könnte man in die Units der jeweiligen PNG/JPEG/GIF-Komponenten die entsprechenden Lade-/Zugriffsfunktionen für TImageList, TPicture und Co. nachrüsten. Diue FMX-ImageList wird intern wohl alles selber machen, weswegen dort andere Spielregel gelten, aber auch dort wäre es "blöd", wenn man dort alle in Delphi vorhandenen Grafikformate direkt anbietet. (man könnte dessen Schnittstelle aber als TGraphic deklarieren und indirekt alles, der aktuell geladenen Units, ermöglichen) |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Hallo,
Zitat:
Delphi-Quellcode:
Gruß
procedure ImageListReplaceImageWithPNG (const Imagelist : TImageList; const Index : Integer; const Filename : string);
var p : TPngImage; b : TBitmap; begin // Testen, ob gültige Imagelist übergeben, der Index in den entsprechenden Grenzen, die Datei existiert p := TPngImage.Create; b := TBitmap.Create; try p.LoadFromFile (Filename); // Testen, ob Breite, Höhe etc. des PNG mit der Imagelist übereinstimmt p.AssignTo (b); Imagelist.Replace (Index, b, nil) finally p.Free; b.Free end end; |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
@All
Vielen Dank für Eure Antworten. Nach vielen Versuchen habe ich das jetzt anders gelöst. Es war ja nicht das Problem eine png-Datei "hizuzufügen", deswegen suche ich "Intern" nach dem entspechenden Bild, lösche es und füge das Neue hinzu. bei Bedarf suche ich wieder nach dem Bild und übergebe den index an die entsprechende Komponente. Ich weiß, ist zwar nicht unbedingt "Die Lösung", aber dadurch stelle ich obendrein sicher, das immer das richtige Bild verbunden wird. Ach ja, ich benutze den ImageLister von AlphaTools. Viele Dankt trotzdem für Eure Mühe Gruß Bernd |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Wenn du das meinst:
![]() Die haben scheinbar einen Bug in ihrem CMS, denn da fehlen irgendwie alle "<", ">" und vorallem die ganzen wichtigen "\". |
AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit
Nein, der Name der Grafik wird mitgespeichert und diesen Umstand mache ich mir zu Nutze.
Delphi-Quellcode:
man könnte das auch als Function schreiben, um zu überprüfen, ob es wirklich geklappt hat.
// ------------------------------------------------------------ Procedur einem Schalter eine bestimmte Grafik zuzuweisen
procedure Tfrm_Main.gp_LoadPic(ListViewName : TsAlphaImageList; // ----------- Das ImageList, das umgestellt werden soll ButtonName : TsSpeedButton; // -------- Der Schalter dessen Grafik geändert werden soll InternName : String); // ----------------------- Der Name den das eingelagerte Bild hat var I: Integer; begin for I := 0 to ListViewName.Items.Count - 1 do begin if ListViewName.Items[I].ImageName = InternName then begin ButtonName.ImageIndex := I; end; end; end; // ---------------------------------------------- Procedur um vorhanden Schalter-Grafiken in der ImageList auszutauschen procedure Tfrm_Main.gp_Replays(InternName : String; // ------------------------ Der Name den das eingelagerte Bild hat PicPath : String; // ------- Der Pfad, wo sich die zu ladenden Grafik-Datei befindet PicName : String; // ------------------------- Der Name der zu ladenden Grafik-Datei ListViewName : TsAlphaImageList); // ---------- Das ImageList, das umgestellt werden soll var I: Integer; P: String; begin for I := 0 to ListViewName.Items.Count - 1 do begin if ListViewName.Items[I].ImageName = InternName then begin ListViewName.Delete(I); ListViewName.LoadFromFile( PicPath + PicName); Break; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 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