У нас есть некоторые устаревшие пользовательские компоненты delphi, которые переопределяют createwnd. Эти компоненты располагаются на панели внутри формы.Изменение родительского контейнера вызывает повторный вызов Createwnd, Delphi 6
Когда форма и панель получают экземпляр, так и компоненты, а createwnd вызывается один раз. Это имеет смысл.
Я с удивлением обнаружил, что createwnd снова будет вызван, если я переключу родительский элемент панели во время выполнения.
Например, при определенных обстоятельствах я могу изменить родительский контейнер Panel1 как Form2.panel2. В основном рисовать Panel1 внутри панели Form2 во время выполнения.
TForm1.buttonclick(..)
begin
..
Panel1.parent := Form2.panel2;
..
end;
Почему пользовательские компоненты в Panel1 воссоздаются при изменении родительского элемента?
И поведение одинаково для всех компонентов Panel1, даже для тех, которые не являются обычными, например, если у меня также был TButton на Panel1, будет ли он также воссоздаваться при переключении родителей? Я не думаю, что это так, поэтому я был так удивлен.
И, наконец, если это неправильное поведение, как это сделать, то createwnd не вызывается при изменении родительских контейнеров.
Спасибо!
Поведение неверно. Он так же разработан. –
На самом деле, что называется 'TControl.RecreateWnd'. Посмотрите на источник VCL, если он у вас есть; он ведет себя точно так же, как и был разработан. –