|
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 함수를 직접 오버라이딩 하시던지
메세지맵을 하시던지 하셔서 사용해주셔야겠죠
예를든건 메세지맵을 사용한것이구요
이런식으로 하게된다는걸 보여드린거구 데이터베이스 클릭할때
생기는이벤트니 적절히 수정해나가면서 게시판 검색하시고 하다보면 원하는답니 나올수도있구요
|