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 DevExpress: TcxButton, Glyph zur Laufzeit ändern (https://www.delphipraxis.net/107517-devexpress-tcxbutton-glyph-zur-laufzeit-aendern.html)

alzaimar 29. Jan 2008 09:49


DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi

Ich steh zur Zeit völlig im Wald und zweifle an meinen Fähigkeiten:

Ich hab einen TcxButton (ähnlich TBitBtn) und der soll zur Laufzeit ein anderes Bildchen zeigen. Ich habe wirklich hübsche Bitmaps in einer TImageList und ich will doch nur, das das Buttoni immer das nächste Bildchen anzeigt. Auf einer Paintbox krieg ich das gebacken, aber dieses /%§$%§-TcxButton busht rum und will einfach nicht. Bin ich zu blöd? :oops:

Das hier hab ich:
Delphi-Quellcode:
Procedure TForm1.cxButtonClick(Sender: TObject);
Begin
  cxButton.Tag := (cxButton.Tag + 1) Mod ilImages.Count;
  cxButton.Caption := format('Apply Bitmap [current %d]', [cxButton.Tag]);
  ilImages.Draw(cxButton.Glyph.Canvas, 0, 0, cxButton.Tag);
End;
Dann habe ich noch probiert, die Bitmap aus der Imagelist zu extrahieren (GetBitmap) und dann in das Button.Glyph.Canvas zu zeichnen. Klappt auch nicht. Bin ich zu dämlich dazu?

Bitte bitte, erbarmt sich vielleicht einer von Euch?

uligerhardt 29. Jan 2008 10:09

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Hmmm, so geht's:
Delphi-Quellcode:
procedure TForm1.cxButtonClick(Sender: TObject);
begin
  cxButton.Tag := (cxButton.Tag + 1) mod ilImages.Count;
  cxButton.Caption := format('Apply Bitmap [current %d]', [cxButton.Tag]);
  //ilImages.Draw(cxButton.Glyph.Canvas, 0, 0, cxButton.Tag);
  ilImages.Draw(FBitmap.Canvas, 0, 0, cxButton.Tag);
  cxButton.Glyph.Assign(FBitmap);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //cxButton.Glyph.Width := ilImages.Width;
  //cxButton.Glyph.Height := ilImages.Height;
  FBitmap := TBitmap.Create;
  FBitmap.SetSize(ilImages.Width, ilImages.Height);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FBitmap.Free;
end;
Keine optimale Lösung, aber vermutlich besser als nichts. :-)

alzaimar 29. Jan 2008 10:16

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Welche Version hast Du? Bei der aktuellsten Version 6.28 klappt es nämlich nicht. Leider.

Beim 1.Mal wird die Bitmap noch neu gezeichnet, aber danach geht nix mehr.

Mein Workaround: Mit der TActionlist arbeiten.

Ich habe schon einen Bugreport an DevExpress geschickt...

uligerhardt 29. Jan 2008 10:28

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Zitat:

Zitat von alzaimar
Welche Version hast Du? Bei der aktuellsten Version 6.28 klappt es nämlich nicht. Leider.

Wir sind noch auf 6.26.

Zitat:

Zitat von alzaimar
Beim 1.Mal wird die Bitmap noch neu gezeichnet, aber danach geht nix mehr.

Bei mir geht's mit Extra-Bitmap zum Cachen zuverlässig (AFAICT), ohne geht gar nix.

Zitat:

Zitat von alzaimar
Ich habe schon einen Bugreport an DevExpress geschickt...

Die reagieren ja zum Glück recht schnell.

RavenIV 29. Jan 2008 10:37

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Zitat:

Zitat von uligerhardt
Zitat:

Zitat von alzaimar
Welche Version hast Du? Bei der aktuellsten Version 6.28 klappt es nämlich nicht. Leider.

Wir sind noch auf 6.26.

Es gibt ja schon die Version 31.
Oder hab ich das mit den Versionsnummern falsch verstanden?

uligerhardt 29. Jan 2008 11:04

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Zitat:

Zitat von RavenIV
Zitat:

Zitat von uligerhardt
Zitat:

Zitat von alzaimar
Welche Version hast Du? Bei der aktuellsten Version 6.28 klappt es nämlich nicht. Leider.

Wir sind noch auf 6.26.

Es gibt ja schon die Version 31.

Ja, aber wir brauchen (noch) D5. :-(


Zitat:

Zitat von RavenIV
Oder hab ich das mit den Versionsnummern falsch verstanden?

Nö, ich glaube nicht. Die Nummer hinter dem Punkt läuft synchron über alle DevEx-VCL-Produkte, während die vor dem Punkt produktspezifisch ist. Wir haben z.B. einmal 5.26 und einmal 6.26.

alzaimar 29. Jan 2008 17:47

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Also: Es ist ein waschechter Bug, der sich in der 6.28'er eingeschlichen hat und bald gefixt wird. Es gibt einen Workaround, der es erlaubt, einmalig das Glyph zu setzen, aber das beliebige Überschreiben zur Laufzeit geht nicht.

Wie schon erwähnt, erzeuge ich nun Actions, die ich der Action-Eigenschaft des Buttons zuweise und damit klappt es. Ist auch sauberer.

Gut zu wissen, das ich doch nicht zu blöd dafür bin. :stupid:

Edit: Schlecht zu wissen, das ich wohl zu blöd bin erstens die Posts zu lesen (Version 31) und dann noch mal bei DevEx nachzuschauen, ob es eine neue Version gibt. Nun gut. Dann lass ich das eben mit den Programmieren.

Und werde.
Äh.
Briefmarkenbefeuchter.

Shit.
Die sind ja selbstklebend.

uligerhardt 29. Jan 2008 18:21

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Zitat:

Zitat von alzaimar
Und werde.
Äh.
Briefmarkenbefeuchter.

Shit.
Die sind ja selbstklebend.

:lol: Die Welt ist einfach schlecht...

DeddyH 29. Jan 2008 18:26

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Vielleicht wäre noch eine Stelle als Zitronenfalter frei :lol:

RavenIV 30. Jan 2008 07:46

Re: DevExpress: TcxButton, Glyph zur Laufzeit ändern
 
Zitat:

Zitat von DeddyH
Vielleicht wäre noch eine Stelle als Zitronenfalter frei :lol:

Bei uns in der Firma könnten wir noch einen Klodeckelrunterklapper gebrauchen... :wink:


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