델파이 컴포넌트(Component) 5편
이번에는 이벤트 핸들러에 들어가는
매개변수의 형(type)과 갯수를 마음대로 바꿔서 사용할수 있도록 해봅시다.
우선 TNotifyEvent의 정의부터 보도록 합시다.
type TNotifyEvent = procedure (Sender: TObject) of object;
위의 형식에다가 그대로 대입만 해주면 되겠지요?
참, 참고로 '... of object'를 보도록 하죠.
지금까지 함수포인터 얘기를 자주 했지요?
그런데 'of object'는 왜 붙어야 할까요?
결론부터 얘기하자면 'of object'를 덧붙임으로서
TNotifyEvent는 객체(object)의 함수포인터가 됩니다.
즉 일반 함수포인터의 선언시에는 'of object'가 빠지게 됩니다.
그럼 우리의 이벤트 타입(type)을 만들어 보도록 합시다.
type
TOnResize = procedure ( Sender : TObject; Width, Height : integer ) of object;
버튼의 크기가 변경되었을때 발생해서 Width, Height를 넘겨주도록 하려고 합니다.
우선 함수포인터로서 역할을 할 변수를 만들어야죠?
private
{ Private declarations }
fOnResize : TOnResize;
그리고 오브젝트 인스펙터에 나타날 이름을 적어주어야 하구요..
published
{ Published declarations }
property OnResize : TOnResize read fOnResize write fOnResize;
그럼 크기가 변경될때 나오는 WM_SIZE를 처리해야 겠죠?
함수를 선언하구요..
protected
{ Protected declarations }
procedure WmSize(var Message: TMessage); message WM_SIZE;
다음과 같이 함수내에서 fOnResize를 호출하면 끝...
procedure TMyButton.WmSize(var Message: TMessage);
begin
inherited;
if Assigned( fOnResize ) then
fOnResize( self, Width, Height );
end;
지난 강좌에서 한 방법과 거의 같습니다.
다만 다른 점은 델파이에 미리 정해져 있는 형식을 쓰지 않기 때문에
사용자가 직접 선언을 해 주어야 한다는 점입니다.
완전한 소스
unit MyButton;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type
TOnResize = procedure ( Sender : TObject; Width, Height : integer ) of object;
TMyButton = class(TButton)
private
fOnResize : TOnResize;
protected
procedure WmSize(var Message: TMessage); message WM_SIZE;
public
constructor Create( AOwner : TComponent ); override;
destructor Destroy; override;
published
property OnResize : TOnResize read fOnResize write fOnResize;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('C쟁이네', [TMyButton]);
end;
constructor TMyButton.Create( AOwner : TComponent );
begin
inherited Create(AOwner); // 생성시에 할일...
end;
destructor TMyButton.Destroy;
begin
// 해제시에 할일...
inherited Destroy;
end;
procedure TMyButton.WmSize(var Message: TMessage);
begin
inherited;
if Assigned( fOnResize ) then
fOnResize( self, Width, Height );
end;
end.
6편 계속...
'Delphi Tip > 컴포넌트' 카테고리의 다른 글
델파이 컴포넌트(Component) 7편 (0) | 2023.07.24 |
---|---|
델파이 컴포넌트(Component) 6편 (0) | 2023.07.21 |
델파이 컴포넌트(Component) 4편 (0) | 2023.07.19 |
델파이 컴포넌트(Component) 3편 (0) | 2023.07.18 |
델파이 컴포넌트(Component) 2편 (0) | 2023.07.17 |
댓글