createwnd를 재정의하는 일부 기존 델파이 사용자 정의 컴포넌트가 있습니다. 이러한 구성 요소는 양식 내의 패널에 있습니다.상위 컨테이너를 변경하면 Createwnd가 다시 호출됩니다. Delphi 6
폼과 패널이 인스턴스화되면 구성 요소도 초기화되므로 createwnd는 한 번 호출됩니다. 이것은 의미가 있습니다.
런타임 중에 패널의 부모를 전환하면 createwnd가 다시 호출된다는 사실에 놀랐습니다.
예를 들어 특정 상황에서 Panel1의 상위 컨테이너를 Form2.panel2로 변경할 수 있습니다. 기본적으로 런타임에 Form1의 패널 안에 Panel1을 그립니다.
TForm1.buttonclick(..)
begin
..
Panel1.parent := Form2.panel2;
..
end;
부모가 변경되면 왜 Panel1의 사용자 지정 구성 요소가 다시 만들어 집니까?
그리고 Panel1의 모든 구성 요소에 대해 동일한 동작이 발생합니다. 예를 들어 Panel1에 TButton이있는 경우와 같이 사용자 지정이 아닌 경우에도 부모가 전환 될 때 다시 생성됩니까? 나는 그렇게 생각하지 않는다. 그래서 나는 너무 놀랐다.
마지막으로,이 동작이 올바르지 않으면 부모 컨테이너가 변경 될 때 createwnd가 호출되지 않도록 어떻게해야합니까?
감사합니다.
동작이 잘못되지 않았습니다. 그것은 설계된대로입니다. –
실제로, 호출되는 것은'TControl.RecreateWnd'입니다. VCL 소스가 있다면 살펴보십시오. 그것은 정확하게 설계된대로 행동합니다. –