안녕하세요. 천리안 프로그래머 포럼 델파이 담당자 댁스터(강범석)입니다.
TLabel과 TImage 컴포넌트의 계층도를 보면(도움말 참조) TGraphicControl에서
상속을 받고 있습니다. 기존 컴포넌트에서 상속받지 않고 새로운 컴포넌트를 만들
때 상속할 수 있는 클래스가 몇개 있는데 그중에 하나가 TGraphicControl입니다.
이 클래스는 입력 포커스를 받을 수 없죠. 만약 포커스를 받을 필요가 있다면
TWinControl을 상속받야 합니다. 이 TWinControl은 입력 포커스도 받을 수 있고
API 호출을 처리하는 Window 처리기도 가지고 있습니다.
그래서 TLabel과 TImage는 TGraphicControl을 상속받았기 때문에 포커스를 가질
수 없습니다. 하지만, TStaticText는 TWinControl을 상속받고 있죠. 그래서
입력 포커스를 가질 수 있습니다. 그래서 프로퍼티에 보면 TabStop도 있죠.
그러나 기본 TStaticText의 이벤트에는 OnEnter가 없습니다. 그래서 포커스를
받아도 이벤트를 작성할 수 없죠. 이 문제를 해결하기 위해서 전 TStaticText를
상속받아 새로운 TStaticText를 만드는 방법을 선택했습니다.
방법은 아주 간단해요.
먼저 델파이나 씨빌더의 메인 메뉴에서 Component:New Conponent를 선택하고
조상 타입을 TStaticText로 하고 ClassName은 적당히 적어주세요. 참고로
저는 TNewStaticText라고 했습니다.
그리고 팔레트페이지는 컴포넌트가 설치되서 보여질 페이지를 선택합니다.
참고로 저는 Additional페이지를 선택했습니다.
그리고 install버튼을 누르면 새로 만든 컴포넌트가 설치됩니다.
그 다음 새로운 컴포넌트의 소스에서 한줄만 추가하면 됩니다.
새로만든 컴포넌트의 소스(위 예의 경우 Newstatictext.pas 혹은 씨빌더의 경우
Newstatictext.cpp)에 클래스 선언부의 published(혹은 빌더의 경우 __published)
에다가 property OnEnter; <--- 요렇게 선언만 해주시면
TStaticText에 OnEnter이벤트를 만들 수 있는 새로운 TNewStaticText가 만들어
졌습니다. 이제 저장을 하시고, TStaticText 대신 새로 만든 컴포넌트를 사용하
시면 됩니다.
그리고 사용하실 때 TabStop속성을 true로 해주시는 것을 잊지마시고요.
제 방법보다 좋은 방법있으신 분들 계시면 올려주세용...
그럼 참고하세요.
|