C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[64978] Re:오브젝트 인스펙터에 없는 이벤트 함수를 불러와 쓸 수 있나요?
aa [] 1222 읽음    2011-08-11 22:44
chrisb 님이 쓰신 글 :
: 어떤 영상 출력 컴포넌트를 받았는데 여기 이벤트에는 더블클릭을 처리하는 것이 없더군요.
:
: 이미지 컴포넌트에서 ondbclick을 쓰게 되면 메인 소스에 TForm1::Image1DbClick 이런식으로 떠서 처리하는 걸 만들고 싶은데요.
:
: 어설프게 헤더에 있는 것처럼 따라 써보면서 방법을 모색중입니다.
:
:  __property TMouseEvent OnDbClick = {read=FOnDbClick, write=FOnDbClick};
:
: 이런식으로 적어 넣어서 해보면서 말이죠...
:
: 이벤트 함수 만들기, 추가 등으로 검색해 보았는데 원하는 답과 비슷한 것은 잘 이해가 가지 않아서요.
:
: 이미지 컴포넌트의 온 더블클릭 이벤트 처럼 없는 이벤트를 만들어서 다른 것들과 동일하게 사용이 가능할까요?
:
: 조언 부탁드립니다.

보통이렇게 정의하죠 vcl에 이미 이벤트 정의가 되어있습니다
직접 정의할때이렇게하죠
typedef void __fastcall (__closure *TLButtonClick) (TButton &Btn); << 끝부분은
예를 든것이므로 위에거 그대로쓰면 안됨....
__closure 가 들어가면 이게 인스펙터에 이벤트부분에 나타나게됩니다 없으면 안나타구요

private:  에 아래처럼 쓰고
    TLButtonClick FLButtonClick;

public:
    MESSAGE void __fastcall WMLMouseDown(TMessage &Message)
    {
        if(FLButtonClick)
            FLButtonClick(Message->LParam); <<LParam 이 맞는지는 모르겠네요
    }
    //메세지맵을 사용하면
    BEGIN_MESSAGE_MAP
        MESSAGE_HANDLER(WM_LBUTTONDOWN,TMessage,WMLMouseDown)
    END_MESSAGE_MAP(상속된 상위컨트롤)

published:
      __property TLButtonClick  OnDbClick = {read=FLButtonClick,write=FLButtonClick};

보통 이렇게 씁니다 이상태대로하면 안됩니다 예를 든것이므로 저대로쓰면 에러가날것임;

이런식으로  해서 컴파일 설치되었다치고 사용해보면 인스펙터에
이벤트부분에 나타나게되고 더블클릭하면 핸들러가 정의될겁니다
윗부분에서 아직 FLButtonClick 이함수가 사용 되지않았으므로
Dispatch 함수를 직접 오버라이딩 하시던지
메세지맵을 하시던지 하셔서 사용해주셔야겠죠
예를든건 메세지맵을 사용한것이구요

이런식으로 하게된다는걸 보여드린거구 데이터베이스 클릭할때
생기는이벤트니 적절히 수정해나가면서 게시판 검색하시고 하다보면 원하는답니 나올수도있구요

+ -

관련 글 리스트
64976 오브젝트 인스펙터에 없는 이벤트 함수를 불러와 쓸 수 있나요? chrisb 1011 2011/08/11
64978     Re:오브젝트 인스펙터에 없는 이벤트 함수를 불러와 쓸 수 있나요? aa 1222 2011/08/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.