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/)
-   -   Delphi Grafik in TBitButton zur Laufzeit austauschen (https://www.delphipraxis.net/74399-grafik-tbitbutton-zur-laufzeit-austauschen.html)

little_budda 2. Aug 2006 16:21


Grafik in TBitButton zur Laufzeit austauschen
 
Hallo,

ich habe in einem BitButton ein Bild eingebunden.
(Eigenschaft Glyph).
Nun möchte ich das Bild ereignisorientiert ändern.
Hierzu habe ich die relevanten Bilder in einer ImageList hintelegt.
Ich verwende folgenden Code um die Bilder auszutauschen.

Delphi-Quellcode:
  ImageList.GetBitmap(0, bBtnConnectState.Glyph);
  bBtnConnectState.repaint;
Hierbei verwende ich den Index 0 bis 2 um die jeweiliegen Bilder anzusprechen.
Das Bild wechselt aber nicht.
Der Button sieht immer gleich aus.

Ich wäre für Anregungen sehr dankbar.

Gruß Holger.

Der_Unwissende 2. Aug 2006 16:48

Re: Grafik in TBitButton zur Laufzeit austauschen
 
Hi,
also ein repaint ist hier überflüssig. Auch ein BitBtn sollte sich selbst aktualisieren, wenn du ein Bild änderst. Verwende einfach einen Puffer.
Leg eine Bitmap an, setzte ihre Größe, lade dein Bild aus der TImageList in diese Bitmap und weise die dann einfach dem Glyph zu, fertig (Freigeben nicht vergessen!)

Gruß Der Unwissende

little_budda 2. Aug 2006 19:23

Re: Grafik in TBitButton zur Laufzeit austauschen
 
Hallo,
der Tipp war klasse.
Danke.

Gruß Holger.

Ralf Stehle 29. Aug 2006 18:37

Re: Grafik in TBitButton zur Laufzeit austauschen
 
ich hatte das gleiche Problem, wusste aber nicht wie man das genau umsetzt.
Nach langer Suche hier die Lösung für alle, die genauso Anfänger sind wie ich:

zunächst mit der rechten Maustaste auf die TImageList-Komponente klicken und Bild-Editor wählen. Jetzt alle gewünschten Bitmaps in die ImageList speichern.

Zuerst muss das aktuelle Bitmap aus dem BtnBtn verschwinden:

Delphi-Quellcode:
BitBtn1.Glyph := nil;
danach das neue Bitmap aus der TImageList dem BitBtn1 übergeben:

Delphi-Quellcode:
ImageList1.GetBitmap(0, BitBtn1.Glyph)
die 0 ist hier das erste Bild mit dem Index 0 aus der ImageList

Was ich nicht herausgefunden habe, ob es auch möglich ist, herauszubekommen, welche Bitmap
gerade im BitBtn angezeigt wird. Vielleicht kann das noch jemand hier ergänzend hinzufügen.

Außerdem habe ich irgendwo gelesen, dass man statt einer TImageList irgendwie auch über
..LoadResource(HInstance, ...). Bitmaps verwalten kann, das war aber zu hoch für mich

-=cats=- 22. Sep 2006 09:34

Re: Grafik in TBitButton zur Laufzeit austauschen
 
:thumb: Cool, genau das hatte ich gesucht :-)

Ich hab hier nochmal eine kleine "Anleitung" für LMD:

1. Als erstes LMDSpeedButton einfügen
2. Einfügen der BitmapList unter LMDCont
3. Glyph auf „ohne“ setzen
4. BitmapList mit Bildern füllen (Doppelklick auf das BitmapList Symbol in der Form).
5. Dann in den Quelltext an die Stelle gehen, wo sich das Bild ändern soll (z.B. beim klicken auf den Button)
6. Dort folgendes einfügen:

LMDSpeedButton1.Glyph := LMDBitmapList1.Items[1].Bitmap;

Die [1] ist das 2. Bild in der BitmapList. Bild [0] wird automatisch als erstes angezeigt.


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