我正在使用动作管理器,并且我有一些与这些动作相关的按钮。这些按钮的字形会自动从动作管理器的图像列表中分配相应的图像。但是,如果我去更改其中一个操作的图像索引,或以其他方式更改图像列表中的实际图像,该按钮会保留原始字形,因为它首次分配给操作时,并且不会更新到了新的形象。
当我更改动作的图像时,如何确保这些按钮的字形更新?
答案 0 :(得分:3)
这是使用Delphi行动的一个陷阱。将操作分配给按钮或任何基于字形的控件时,它会复制与该操作对应的图像。对该图像的任何更改都不会反映在按钮的字形中 - 或者反映在任何基于字形的控件上。
在您对操作图像进行更改时,您可以运行以下代码,强制更新表单上的所有控件以反映操作的任何和所有更改(主要是图像):
procedure UpdateActions(AControl: TWinControl);
var
C: TControl;
X: Integer;
begin
for X := 0 to AControl.ControlCount-1 do begin
C:= AControl.Controls[X];
C.Action:= C.Action; //Forces everything to update
if C is TWinControl then
UpdateActions(TWinControl(C));
end;
end;
你这样称呼它:
UpdateActions(MyForm);
这将简单地递归遍历表单上的所有控件并将每个控件的操作分配给自身,从而触发它使用新图像更新任何基于字形的控件。