Delphi-PRAXiS
Seite 1 von 2  1 2      

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 SpeedButton: Glyph in der Laufzeit ändern mit ImageList (https://www.delphipraxis.net/59159-speedbutton-glyph-der-laufzeit-aendern-mit-imagelist.html)

MasterEvil 18. Dez 2005 14:28


SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
Hi leutz,

hab da ein kleines Problem mit dem SpeedButton.
Und zwar erstelle ich einen button zur Laufzeit und weise ihm ein Glyph folgendermaßen zu:
Delphi-Quellcode:
ImageListButtons.GetBitmap(7,SpeedButton.Glyph);
Das klappt auch wunderbar.
Nun will ich aber unter bestimmten Bedingungen, dieses Glyph ändern (das selbe Icon, nur mit einem Kreuz drauf).
Delphi-Quellcode:
ImageListButtons.GetBitmap(8,SpeedButton.Glyph);
SpeedButton.Glyph.Modified:=true;
Das geht ebenfalls problemlos.
Wenn ich nun aber das selbe mache, um wieder auf das ursprüngliche Bild zurück zu kommen (also ohne Kreuz), zeichnet er das Bild nicht komplett neu, ein Teil des Kreuzes bleibt erhalten.
Ich finde leider nicht raus wieso oder wie ich das Problem löse.

Jemand eine Idee?

greetz
Steffen

ibp 18. Dez 2005 15:12

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
und wenn du das bitmap zwischendurch löschst im button? was bleibt denn vom kreuz übrig?

ManuMF 18. Dez 2005 15:15

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
Hallo,

schon mal mit

Delphi-Quellcode:
SpeedButton.Refresh;
probiert?

Gruß,
ManuMF

MasterEvil 18. Dez 2005 15:52

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
@ibp:
aus mir unerfindlichen Gründen ist das Resultat das Selbe.
hatte ich auch schon probiert (Glyph.FreeImage).

@ManuMF:
bringt leider ebenfalls nichts.

ibp 18. Dez 2005 15:54

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
haben die bilder die gleiche größe?

Lannes 18. Dez 2005 16:45

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
Hallo,

teste das mal:
Delphi-Quellcode:
SpeedButton1.Glyph := nil;
ImageList1.GetBitmap(1,SpeedButton1.Glyph);

MasterEvil 18. Dez 2005 19:56

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
@ibp:
ja, haben sie ;)

@Lannes:
wow, das hat funktioniert ;)
Hatte es mit Glyph.Free versucht, aber dabei ist der dann immer abgeschmiert.
Find ich nicht ganz logisch ...

Aber nun gehts! thx

greetz
Steffen

DataCool 30. Mär 2006 16:39

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
Hi,

hatte das gleiche Problem, was ich auch mit folgenden Code wie oben auch schon beschrieben lösen konnte :

Delphi-Quellcode:
  SpeedButton1.Glyph := nil;
  ImageList1.GetBitmap(0,SpeedButton1.Glyph);
Funzt auch wunderbar, jetzt hatte ich mir gedacht schön und gut, da ich das ganze für diverse Buttons mit diversen Imagelists brauche, schreibe ich mir ne Procedure dazu :

Delphi-Quellcode:
procedure TfrmMain.GetBitmapFromImageList(TargetBmp: TBitmap; ImgIdx: Integer; SourceImgL: TImageList);
begin
  TargetBmp := Nil;
  SourceImgL.GetBitmap(ImgIdx,TargetBmp);
end;

// ...
// Aufruf der Procedure
GetBitmapFromImageList(speddButton1.Glyph,0,ImageList1);
Damit tut sich jetzt allerdings wieder gar nichts mehr :shock:

Jemand ne Idee ?

Danke und Gruß

Hawkeye219 30. Mär 2006 17:58

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
Hallo DataCool,

mit Deiner Version setzt Du lediglich die lokale Variable (den Parameter) TargetBmp auf den Wert NIL.
Du mußt einen Zeiger auf den SpeedButton übergeben und dessen Eigenschaft Glyph ersetzen:

Delphi-Quellcode:
procedure TfrmMain.GetBitmapFromImageList(aButton: TSpeedButton; ImgIdx: Integer; SourceImgL: TImageList);
begin
  aButton.Glyph := Nil;
  SourceImgL.GetBitmap(ImgIdx,aButton.Glyph);
end;

// ...
// Aufruf der Procedure
GetBitmapFromImageList(speddButton1,0,ImageList1);
So könnte es funktionieren.

Gruß Hawkeye

DataCool 30. Mär 2006 18:26

Re: SpeedButton: Glyph in der Laufzeit ändern mit ImageList
 
Hi,

ich wollte die Procedure extra mit Übergabe des TBitmap Objekts,
weil ich das ganze nicht nur mit SpeedButtons verwenden wollte ;-)

Habe jetzt auch ne Lösung gefunden die funktioniert :

Delphi-Quellcode:
procedure TfrmMain.GetBitmapFromImageList(TargetBmp: TBitmap; ImgIdx: Integer; SourceImgL: TImageList);
Var tmpBmp : TBitmap;
begin
  tmpBmp := TBitmap.Create;
  try
    SourceImgL.GetBitmap(ImgIdx,tmpBmp);
    TargetBmp.Assign(tmpBmp);
  finally
    FreeAndNil(tmpBmp);
  end;
end;
Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 Uhr.
Seite 1 von 2  1 2      

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