질문하신 내용대로 캐스팅을 하여 억세스할 수 있는 프로퍼티와 메쏘드
가 있고, 억세스 할 수 없는 프로퍼티와 메쏘드가 있습니다..
차이점은..
어느 클래스에서 자신이 published로 정의한 메쏘드와 프로퍼티는 억세
스가 가능합니다..
하지만 상위 클래스에서 계승받은 메쏘드와 프로퍼티들은 억세스를 못
하더군요.. 왜 그런지는 저도 정확히 모르겠고.. 궁금하네요..
한가지 추측을 해보면..
TForm형으로 캐스팅을 해보면 이 객체는 TForm형으로 create된 객체가
아니라서 TForm형이 published로 정의한 프로퍼티와 메쏘드만이 억세스
가능하고 상위 클래스의 것들은 억세스가 불가능한 것 같습니다..
그렇다고 매번 TForm형으로 creation을 할 수도 없는 노릇이고..
고민 좀 하다 잔머리를 굴려봤는데.. 요건 잘 먹더군요..
캐스팅을 TForm형이 아닌 메인폼의 클래스로 캐스팅을 하는 방법입니
다.. 이 경우 TForm1이 되겠네요.. 아래와 같이 하시면 됩니다..
((Sender as TComponent).Owner as TForm1).SelectNext(TWinControl(Sender),
True,True) ;
이경우 Sender가 TWinControl로 캐스팅 되지 않는 경우가 있다면..
Sender is TWinControl로 체크를 해보고 SelectNext를 불러야 합니다..
이벤트 핸들러들을 오브젝트 인스펙터에서 델리게이션 시킬때 주의하세요..
폼을 하나만 사용하는 경우나 여러개를 사용하는 경우 현재 활성화 되
어 있는 폼은 Screen.ActiveForm을 통해 사용가능합니다..
아래와 같이 하면 조금 간단해 지겠네요..
TForm1(Screen.ActiveForm).SelectNext(TWinControl(Sender),True,True) ;
SelectNext를 사용하시는 것을 봐서는 폼 위의 컨트롤들 간의 포커스
이동을 하시려나 본데..
아래와 같이 하셔도 됩니다..
SendMessage(Form1.Handle,WM_NEXTDLGCTL,0,0) ;
SendMessage(Form1.Handle,WM_NEXTDLGCTL,1,0) ; // 역방향 진행..
기람..
미친병아리 서비였네용.. 삐약~ !!
[번 호] 1166 / 1169 [등록일] 98년 02월 07일 08:19
[등록자] YOONHO
[제 목] [질문] TObject의 OWNER속성에 문제[DEL 1.0]
─────────────────────────────────
안녕하세요..
DELPHI 1.0으로 프로그램을 하는 사람입니다.
이곳에 고수분들이 모여있어서.. 질문드립니다.
제가 하려는 것은 SENDER로 오는 TOBJECT의 OWNER 즉 FORM의 프로퍼티를
이용하거든요.. (TOBJECT AS TCOMPONENT).OWNER AS TFORM.프로퍼티..
이렇게 쓰면 되는 속성과 안되는 속성이 있는데..
왜 그런지 모르겠어요..
제대로 쓰면
((TOBJECT AS TCOMPONENT).OWNER AS TFORM).SELECTNEXT(....,..,..);
SELECTNEXT속성은 44번 에러가 나오거든요..
그럼..
|