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 Actions und deren Captions und Bilder (https://www.delphipraxis.net/188793-actions-und-deren-captions-und-bilder.html)

Der schöne Günther 7. Apr 2016 15:41

Actions und deren Captions und Bilder
 
Wenn ich einer Komponente, z.B. einem TButton eine Action zuweise übernimmt er gleich deren Eigenschaften Caption und ImageIndex. Ich möchte das nicht.

Muss ich das jetzt immer so machen:

Delphi-Quellcode:
var
   oldImageList: TCustomImageList;
   oldImageIndex: Integer;
begin
   oldImageList := Button1.Images;
   oldImageIndex := Button1.ImageIndex;

   Button1.Action := Action1;
   Button1.Images := oldImageList;
   Button1.ImageIndex := oldImageIndex;
Oder gibt es irgendwo eine Eigenschaft wo ich das abstellen kann? Oder übersehe ich etwas dummes wenn ich einfach nur, speziell für einen Button, sage

Delphi-Quellcode:
Button1.OnClick := Action1.OnExecute;

Uwe Raabe 7. Apr 2016 16:03

AW: Actions und deren Captions und Bilder
 
Das geschilderte Verhalten ist so gewollt. Ist ein Control mit einer Action verknüpft, bestimmt der dabei verwendete ActionLink das Verhalten - unter anderem, daß das Control die Caption und den ImageIndex der Action übernimmt und diese im Regelfall auch aktuell hält. Verhindern kann man das Aktualisieren, wenn die jeweiligen Eigenschaften (Caption, ImageIndex) von denen der Action abweichen. Das geht aber nur solange gut, bis das vielleicht zufällig mal nicht der Fall ist und ab dann wieder eine Synchronisierung stattfindet.

Wenn du lediglich das Execute der Action verwenden willst und auf das Update verzichten kannst, dann ist eine simple Zuweisung auf das OnClick eine Lösung. Zu beachten ist nur, daß damit nur der aktuell dem Execute zugewiesene Event übergeben wird. Sollte das Execute später mal einem anderen Event zugewiesen werden, bekommt das OnClick nichts davon mit. In dem Fall wäre ein OnClick-Handler besser, der dann einfach
Delphi-Quellcode:
Action.Execute
aufruft.

Alternativ kannst du aber den TButton ableiten und das GetActionLinkClass überschreiben. Da gibst du dann eine angepasste ActionLink-Klasse zurück, die das gewünschte Verhalten implementiert.


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