Я увидел введение TActivityIndicator в Delphi 10 Seattle и подумал, что я могу использовать это где-то. Я хотел использовать это, чтобы показать, что некоторые динамически созданные разделы моей формы все еще загружали данные перед заполнением формы. Поэтому я думал, что сделаю это, прежде чем загружать свои данные в FormShow
, где self - это форма.Ошибка создания TActivityIndicator в Runtime
indicator := TActivityIndicator.Create(self);
indicator.IndicatorSize := TActivityIndicatorSize.aisLarge;
К сожалению, когда я пытаюсь создать их динамически и установить затем TActivityIndicator.IndicatorSize
я получаю исключение ... EInvalidOperation with message 'Control '<name>' has no parent window'
Какие пошагового VCL берет меня Vcl.Controls TWinControl.CreateWnd
специально
if (WndParent = 0) and (Style and WS_CHILD <> 0) then
if (Owner <> nil) and (csReading in Owner.ComponentState) and
(Owner is TWinControl) then
WndParent := TWinControl(Owner).Handle
else
raise EInvalidOperation.CreateFmt(SParentRequired, [Name]);
Я проверил Owner
это форма, конечно, TWinControl, но (csReading in Owner.ComponentState)
возвращает false. Переход через Owner.ComponentState = [] в FormCreate и [csFreeNotification] в FormShow.
Я обнаружил, что если вы попытаетесь изменить IndicatorSize
TActivityIndicator, который был создан во время разработки, он отлично работает. Итак, что мне здесь не хватает или невозможно создать TActivityIndicators
во время выполнения?
Да, я знаю, что данные загружаются в другой поток, а затем, когда они закончены, загружаются. Я прошу поток пользовательского интерфейса заполнить поля. Также вы легенда :), которая решила проблему –