안녕하세요.. 컴포넌트 관련 부분을 보다가... 한가지 궁금한게 있어서
질문을 드립니다.
보다가 메소드 포인터라는 부분이 있는데...
사용은 예를 들면
type
MethodPointerType = procedure (Num:integer) of object ;
이런 형태로 쓰이는데.. 컴포넌트를 만들거나 할때 사용하는거 같습니다...
C로보면 함수의 포인터라구 생각하는데.. 이건 구체적으로 어떤걸
야그하는지 잘 모르겠습니다.
클래스를 정의하고 프로시져를 선언하고 메소드를 정의할때 할당하는
식으로 사용하는거 같은데... 책을 봐두. 잘 이해가 안가네요..
그럼 추운날 프로그래밍 하는데 고생이 많겠지만.. 부탁드립니다...
그것은 콤포넌트나 다른 DLL 등에서 함수를 지정한다거나 할 때에 쓰입니다.
즉 일반 Form의 OnCreate 이벤트도 메소트 포인터로 지정한것인데
OnCreate 는 TNotifyEvent 형을 사용합니다.
TNotifyEvent 는
procedure (Sender: TObject) of object 와 같은 타입인데..
콤포넌트를 만들때에
FOnCreate: TNotifyEvent;
로 정의를 먼저 하고
Published 부분에서
Property OnCreate: TNotifyEvent Read FOnCreate Write FOnCreate;
로 선언해 줍니다.
그러면 OnCreate 이벤트가 Form 의 이벤트에 추가가 되고..
그렇게 콤포넌트에서 사용합니다.
그리고 OnCreate 이벤트는 다른 함수로 변경할 수 있다는 것은
함수원형만 같다면 가능한데 이것은 C 의 함수포인터와 비슷한
개념입니다.
가령 Form1.OnCreate:=MyCreate; 로 바꾸고
MyCreate 함수는 procedure MyCreate(Sender: TObject); 형태이면
된다는 말입니다.
심종현 wrote:
> 안녕하세요.. 컴포넌트 관련 부분을 보다가... 한가지 궁금한게 있어서
> 질문을 드립니다.
> 보다가 메소드 포인터라는 부분이 있는데...
> 사용은 예를 들면
> type
> MethodPointerType = procedure (Num:integer) of object ;
> 이런 형태로 쓰이는데.. 컴포넌트를 만들거나 할때 사용하는거 같습니다...
> C로보면 함수의 포인터라구 생각하는데.. 이건 구체적으로 어떤걸
> 야그하는지 잘 모르겠습니다.
> 클래스를 정의하고 프로시져를 선언하고 메소드를 정의할때 할당하는
> 식으로 사용하는거 같은데... 책을 봐두. 잘 이해가 안가네요..
> 그럼 추운날 프로그래밍 하는데 고생이 많겠지만.. 부탁드립니다...