|
현재 만들고 있는 위저드컨트롤은, TPageControl과 유사한 방식으로
동작합니다.
음.. NewPage를 하면, 새로운 위저드페이지가 삽입되면서, 페이지 위
치에 따라 배경 그림과 각종 기본 캡션이 자동으로 그려지는 방식이구
요, 각 페이지에는 NextPage와 PriorPage라는 프라퍼티가 있어서
이 값이 NULL인 경우 Next버튼이나 Prior버튼이 Disable 처리되는 구조
입니다.
따라서 이 컨트롤을 써서 위저드를 구현할 경우, 라디오버튼 등에 의해
페이지 분기가 일어난다는지 하는 액션을 효율적으로 구현할 수 있고
아무튼 제가 지금까지 본 위저드컨트롤보다 훨씬 편리할 것 같습니다.
완성되면 이 사이트에도 공개할거구요.
빌더 컴포넌트 제작에 필요한 거의 모든 기술을 다 쓰게 되는것 같네요.
저 역시 20여개의 컴포넌트를 만들어봤지만 이런 형태의 컴포넌트는
처음이라서 많이 헤매고 있습니다.
지금 잘 안되는 것은, 각 페이지의 NextPage와 PriorPage 프라퍼티에
넣을 수 있는 페이지포인터를 제한하는 것인데,
좀 쉽게 설명드리자면, 폼에 PageControl을 2개를 박아 넣고, 각각
2개의 TabSheet를 만듭니다.
이렇게 하면, Form에는 PageControl1, PageControl2, TabSheet1,
TabSheet2, TabSheet3, TabSheet4, 여섯개의 멤버가 추가되겠죠.
PageControl1에서 ActivePage프라퍼티의 콤보박스를 선택하면, TabSheet1과
TabSheet2만 선택이 가능하죠.
PageControl2에서는 역시 TabSheet3와 TabSheet4만 선택이 가능하구요.
이런식으로 같은 타입의 멤버 중 특정 조건에 맞는 것만 선택 가능하게 제
한하는 것을 어떻게 처리하는지가 궁금합니다.
제 컨트롤의 이름은 TnWizard이고, 각각의 페이지는 TnWizardPage입니다.
이 TnWizardPage의 프라퍼티인 NextPage와 PriorPage는 모두 TnWizardPage*
타입의 프라퍼티이구요.
프라퍼티의 속성상, 자신의 포인터는 지정할 수 없어야 하고, 페이지가 맨
첫페이지이거나 맨 마지막 페이지인 경우에는 각각 PriorPage와 NextPage에는
NULL만이 들어갈 수 있어야 합니다.
현재는 SetNextPage() 메쏘드에서 이를 채크하여 거부하는 구조인데, TPageControl
에서 이루어지는 것 처럼 아예 대입할 수 있는 후보목록에서 나오지 않게 하고
싶습니다.
즉, 맨 처음 페이지에서 PriorPage 프라퍼티의 콤보박스를 선택하면, 선택할 수 있
는 페이지포인터가 전혀 없고,
두번째 페이지에서는 두번째 페이지의 포인터 외에 다른 페이지의 포인터들이 나열
되고...
어떻게 미리 제한을 거는지 잘 모르겠네요.
제 생각엔, TDesigner 클래스를 이용하는 것 같기도 한데..
아무튼, 어떻게 하는지 알고 계시다면 알려주시면 고맙겠습니다.
패패루였슴다.
|