Глифы кнопок не обновляются при изменении изображения действия

Я использую диспетчер действий, и у меня есть несколько кнопок, связанных с некоторыми из этих действий. Символам этих кнопок автоматически назначаются соответствующие изображения из списка изображений диспетчера действий. Тем не менее, если я иду и изменяю индекс изображения одного из таких действий или иным образом изменяю фактическое изображение в списке изображений, кнопка сохраняет исходный глиф с того момента, когда оно было впервые назначено действию, и не обновляет к новому образу.

Как я могу гарантировать, что глифы этих кнопок обновляются, когда я изменяю изображение действия?

1 ответ

Решение

Это одна из ловушек при использовании действий 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);

Это будет просто рекурсивно перебирать все элементы управления в форме и назначать действие каждого элемента управления обратно самому себе, вызывая тем самым обновление любых элементов управления на основе глифов новым изображением.

Другие вопросы по тегам