Глифы кнопок не обновляются при изменении изображения действия
Я использую диспетчер действий, и у меня есть несколько кнопок, связанных с некоторыми из этих действий. Символам этих кнопок автоматически назначаются соответствующие изображения из списка изображений диспетчера действий. Тем не менее, если я иду и изменяю индекс изображения одного из таких действий или иным образом изменяю фактическое изображение в списке изображений, кнопка сохраняет исходный глиф с того момента, когда оно было впервые назначено действию, и не обновляет к новому образу.
Как я могу гарантировать, что глифы этих кнопок обновляются, когда я изменяю изображение действия?
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);
Это будет просто рекурсивно перебирать все элементы управления в форме и назначать действие каждого элемента управления обратно самому себе, вызывая тем самым обновление любых элементов управления на основе глифов новым изображением.