AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

Ein Thema von matashen · begonnen am 19. Feb 2014 · letzter Beitrag vom 7. Okt 2014
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
454 Beiträge
 
Delphi XE2 Enterprise
 
#1

Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 19. Feb 2014, 14:17
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
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 19. Feb 2014, 14:25
Was ist mit ImageList.Replace?

Code von: http://www.delphigroups.info/2/9/640652.html

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;
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
454 Beiträge
 
Delphi XE2 Enterprise
 
#3

Erledigt AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 19. Feb 2014, 14:32
Ah danke,

Es könnte ja so einfach sein.

Die Funktion kannte ich nicht und habs wohl übersehen.

Dankeschön
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
BGHake

Registriert seit: 7. Okt 2009
Ort: Nürnberg
3 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 5. Okt 2014, 19:04
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.798 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 5. Okt 2014, 19:12
Mit welcher Komponente lädst Du das Png?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 5. Okt 2014, 19:31
Eine TImageList beinhaltet nunmal ausschließlich nur Bitmaps/Icons. Denn das Ding ist "nur" eine Schnittstelle zur entsprechenden Windows-Komponente, welche man beim Bei Google suchenImageList_Create rausbekommt.

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 (Bei Google suchenImageList_Replace, Bei Google suchenImageList_LoadImage, Bei Google suchenImageList_AddIcon usw.) an
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 5. Okt 2014 um 19:37 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#7

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 5. Okt 2014, 21:47
Hallo,

Zitat:
[...] Wie kann ich in einem ImageList zur Laufzeit ein "png" Bild auswechseln ? [...] Ich habe schon fast alles versucht [...]
Auch so (oder ähnlich)?
Delphi-Quellcode:
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;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
BGHake

Registriert seit: 7. Okt 2009
Ort: Nürnberg
3 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 7. Okt 2014, 16:41
@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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.604 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 7. Okt 2014, 17:49
Wenn du das meinst: http://www.delphi-treff.de/tipps-tri...m-verknuepfen/

Die haben scheinbar einen Bug in ihrem CMS, denn da fehlen irgendwie alle "<", ">" und vorallem die ganzen wichtigen "\".
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
BGHake

Registriert seit: 7. Okt 2009
Ort: Nürnberg
3 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Bild in Imagelist durch ein anderes Ersetzen - zur Laufzeit

  Alt 7. Okt 2014, 18:30
Nein, der Name der Grafik wird mitgespeichert und diesen Umstand mache ich mir zu Nutze.

Delphi-Quellcode:
// ------------------------------------------------------------ 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;
man könnte das auch als Function schreiben, um zu überprüfen, ob es wirklich geklappt hat.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 06:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf