操作图像更改时按钮字形未更新

Button glyphs not updated when action's image changes

我正在使用动作管理器,并且有一些按钮与其中一些动作相关联。这些按钮的字形自动分配给动作管理器图像列表中的相应图像。但是,如果我去更改其中一个操作的图像索引,或者以其他方式更改图像列表中的实际图像,按钮将保留最初分配给该操作时的原始字形,并且不会更新到新图片。

如何确保在更改操作图像时更新这些按钮的字形?

这是使用 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);

这将简单地递归遍历表单上的所有控件并将每个控件的操作分配回自身,从而触发它使用新图像更新任何基于字形的控件。