Sauber freigeben kannst du mit:
FreeAndNil(SpeedButton1.Glyph);
Allerdings gibt es hier eine
Exception, wenn dem Glyph noch kein Bitmap zugeordnet ist.
Außerdem sollte alles sauber freigegeben werden, wenn die Form - zu der der SpeedButton gehört - freigegeben wird, also wenn dein Programm beendet wird.
Diese Lösung halte ich nicht für besonders gut:
Delphi-Quellcode:
SpeedButton1.Glyph := nil;
SpeedButton1.Glyph := TBitmap.Create;
SpeedButton1.Glyph.Width := ICO.Width;
SpeedButton1.Glyph.Height := ICO.Height;
SpeedButton1.Glyph.Canvas.Draw(0, 0, ICO);
Wenn noch Bildreste da sind, kannst du auch vorher einfach die Größe des Bitmaps auf 0 stellen, dann sollte nichts mehr vom alten Bild übrig sein:
Delphi-Quellcode:
SpeedButton1.Glyph.Width := 0;
SpeedButton1.Glyph.Height := 0;
SpeedButton1.Glyph.Width := ICO.Width;
SpeedButton1.Glyph.Height := ICO.Height;
SpeedButton1.Glyph.Canvas.Draw(0, 0, ICO);