Это должен был быть комментарий, но я хочу добавить код. Прежде всего, вы не должны вызывать VCL из вторичных потоков, поэтому вызов FindComponent
не гарантированно работает. Несмотря на этот факт, я сомневаюсь, что это ваша проблема, потому что если вам не повезет, вы не получите условия гонки и не получите ошибку.
Вы должны сделать две вещи:
- Поместите свой код под простую кнопку в форме, протестируйте его, и, когда вы знаете, что код хорош, переместите его в фоновый поток.
- Немного затормозите ваш код, чтобы вы могли увидеть, что и где не работает. Не нужно догадываться, если
FindComponent
- это то, что дает сбой, когда его так легко проверить и быть уверенным.
Запишите свой код так:
var ParentPanel: TWinControl;
anControl: TControl;
begin
Assert(Assigned(Form1)); // Assertions are free, you might as well test everything
anControl := Form1.FindComponent('YourNameHere'); // casting straight to TWinControl raises an error if the returned control is nil
Assert(Assigned(anControl)); // Make sure we got something
ParentPanel := anControl as TWinControl; // raises error if the control is not TWinControl
ButtonVariableName := TButton.Create(ParentPanel);
ButtonVariableName.Parent := ParentPanel;
end;