Сообщения не могут быть обработаны до тех пор, пока ваше приложение повторно не войдет в цикл обработки сообщений, поэтому любая попытка изменить / обновить состояние управления, которое зависит от обработки сообщений, не будет работать в рамках одной последовательности кода, которая не «перекачивает» сообщения.
К счастью, элементы управления VCL обычно предоставляют средства для принудительной перерисовки, не дожидаясь обработки сообщений, с помощью метода Update:
Button1.Enabled := False;
Button2.Enabled := False;
Button1.Update;
Button2.Update;
Это работает независимо от необходимости отключать перерисовку формы. Форма не будет перерисовываться до тех пор, пока ваше приложение не войдет в цикл сообщений, поэтому отключение рисования формы и повторное включение в рамках одной процедуры, которая сама по себе не вызывает обработку сообщений, является пустой тратой времени.
Возможно, это не совсем одновременная перерисовка двух кнопок, но по-настоящему одновременное рисование двух отдельных элементов управления невозможно без использования многопоточного кода рисования графического интерфейса пользователя, который, как мне кажется, выходит за рамки этой проблемы. Вызов обновления для двух кнопок таким образом будет практически одновременным, насколько вам нужно.
person
Deltics
schedule
11.03.2010