Q&A

  • User Event 만들기....
델파이 초보자 입니다.



사용자가 직접 이벤트를 만들수 있지 않나요.

예를 들어 before_insert, after_insert

라는 이벤트를 만들어 기본 Base Window을 만들고

그걸 상속 받아 쓰고 싶거덩요...



Object Inspector에도 등록이 되나요....



여쭈어 봅니다.

좋은 답변을 기대 합니다.

2  COMMENTS
  • Profile
    어린왕자 2001.08.14 03:12
    자세한건 컴포넌트 만들기 강좌들을 찾아보시면 되구요.



    원리를 설명드릴께요.

    사용자가 이벤트를 만들어줄려면..



    이벤트 발생요건이 필요하고 (예를 들어서 마우스다운시키는 프로시저)

    이벤트핸들러가 필요합니다. (마우스다운되면 호출될 프로시저)

    당근 그전에 이벤트정의가 되어야죠 ( 마우스다운되면 호출될 프로시저 형태)



    예를 들어. 다음과 같은 것이 필요하다는 거져..



    procedure Doing;

    FOnDoing :TMyEvent;

    TMyEvent = procedure (Sender: TMyObject); // Sender는 파라메타로..

    // 원하는대로 다른걸 넣을 수 있습니다.

    구체적인 이벤트 핸들러(FOnDoing)을 정해주면 Doing이 실행될때 핸들러(FOnDoing)가 실행되야 하므로..



    procedure Doing;

    begin

    if Assigned(FOnDoing) then FOnDoing(Sender); // Sender는 원하는 파라메타..

    end;





    다 되었습니다..

    이제는 이 이벤트 핸들러를 사용할수 있게 해주는 거죠.



    TFirstClass = Class (TObject)

    private

    FOnDoing: TMyEvent;

    procedure Doing;

    public

    property OnDoing : TMyEvent read FOnDoing write FOnDoing;

    end;



    이렇게 하시면..TFirstClass에 TMyEvent가 정의 되었습니다.

    OnDoing에 다가 원하는 핸들러 포인터를 넣어주면 되져.

    public대신에 publish하면 인스펙터 오브젝트에 보일껍니다.





























    호동왕자 wrote:

    > 델파이 초보자 입니다.

    >

    > 사용자가 직접 이벤트를 만들수 있지 않나요.

    > 예를 들어 before_insert, after_insert

    > 라는 이벤트를 만들어 기본 Base Window을 만들고

    > 그걸 상속 받아 쓰고 싶거덩요...

    >

    > Object Inspector에도 등록이 되나요....

    >

    > 여쭈어 봅니다.

    > 좋은 답변을 기대 합니다.

  • Profile
    마형 2001.08.15 00:51
    어린왕자 wrote:

    > 자세한건 컴포넌트 만들기 강좌들을 찾아보시면 되구요.

    >

    > 원리를 설명드릴께요.

    > 사용자가 이벤트를 만들어줄려면..

    >

    > 이벤트 발생요건이 필요하고 (예를 들어서 마우스다운시키는 프로시저)

    > 이벤트핸들러가 필요합니다. (마우스다운되면 호출될 프로시저)

    > 당근 그전에 이벤트정의가 되어야죠 ( 마우스다운되면 호출될 프로시저 형태)

    >

    > 예를 들어. 다음과 같은 것이 필요하다는 거져..

    >

    > procedure Doing;

    > FOnDoing :TMyEvent;

    > TMyEvent = procedure (Sender: TMyObject); // Sender는 파라메타로..

    > // 원하는대로 다른걸 넣을 수 있습니다.

    > 구체적인 이벤트 핸들러(FOnDoing)을 정해주면 Doing이 실행될때 핸들러(FOnDoing)가 실행되야 하므로..

    >

    > procedure Doing;

    > begin

    > if Assigned(FOnDoing) then FOnDoing(Sender); // Sender는 원하는 파라메타..

    > end;

    >

    >

    > 다 되었습니다..

    > 이제는 이 이벤트 핸들러를 사용할수 있게 해주는 거죠.

    >

    > TFirstClass = Class (TObject)

    > private

    > FOnDoing: TMyEvent;

    > procedure Doing;

    > public

    > property OnDoing : TMyEvent read FOnDoing write FOnDoing;

    > end;

    >

    > 이렇게 하시면..TFirstClass에 TMyEvent가 정의 되었습니다.

    > OnDoing에 다가 원하는 핸들러 포인터를 넣어주면 되져.

    > public대신에 publish하면 인스펙터 오브젝트에 보일껍니다.



    참고로 procedure Doing; dynamic;

    dynamic 을 쓰셔야 상속된 상황에서도 제대로 동작이 될겁니다.

    주의 하시길...