|
이학균 님이 쓰신 글 :
: 권대길.한꼬맹이 님이 쓰신 글 :
: : 이학균 님이 쓰신 글 :
: : : 권대길.한꼬맹이 님이 쓰신 글 :
: : : : 이학균 님이 쓰신 글 :
: : : : : 안녕하세요....
: : : : :
: : : : : 제가 만든 간단한 시리얼 통신 루틴을 컴포넌트로 만들려 하는데...
: : : : : 이벤트 처리는 어떻게 하나요...
: : : : : 책을 찾아봐도 메소드나 프로퍼티는 만드는 법이 나오는데.. 이벤트는 나오지 않네요...
: : : : :
: : : : : 따른 부모 클래스를 상속받지 않아도 되구여..
: : : : : 포트에 데이타를 감지하는 루틴에서 데이타가 들어오면.. WM_COMM_READ라는 메시지를 뿌려주고
: : : : : 그 메시지를 감지하는 루틴을 만들어서 컴포넌트 이벤트 란에다 넣고 싶은데,
: : : : : 어떻게 해야 하는지 모르겠어요.. 이 이벤트에는...
: : : : : void __fastcall TSerialCompo::OnDataRead(char *Inbuf, int Length)에서
: : : : : Inbuf와 길이 Length를 넘겨 주고 싶거든요...
: : : : : 부탁 드려요..
: : : : :
: : : :
: : : : 안녕하십니까?
: : : :
: : : : 한꼬맹이 입니다.
: : : :
: : : : 이학균 님께서 설명한 부분을 제대로 이해했는지 모르겠지만 제가 이해한대로 설명드리겠습니다.,,
: : : :
: : : : 일단 컴포넌트 클래스의 private: 영역에
: : : : Classes::TNotifyEvent FCommRead; 라고 선언하시고
: : : : published: 영역에다가
: : : : __property Classes::TNotifyEvent OnCommRead = {read=FOnCommRead, write=FOnCommRead};
: : : : 선언합니다.
: : : : 그리고 포트에 데이타를 감지하는 루틴에서 다음과 같이 코딩하세요..
: : : : if(FOnCommRead)
: : : : FOnCommRead(this);
: : : :
: : : : 이렇게 하고나서 컴포넌트의 이벤트란에 OnCommRead라는 이벤트에 연결해서 쓰시면 됩니다.
: : : :
: : : : 그럼 도움되시길...
: : : :
: : : :
: : : :
: : :
: : : 답변 잘 받았습니다.
: : : 감지하는 루틴에서 FOnCommRead를 호출하고... 감지한 걸 처리하는 루틴은 어디에다 연결해야 하나요..
: : : __property Classes::TNotifyEvent OnCommRead = {read=FOnCommRead, write=FOnCommRead};
: : : 에서.. write= 부분에다 연결해야 하지 않나요?
: : : 책에 내용이 나와있지 않아서. 많이 혼란스럽네요..
: : : 도와주세요... --++
: : :
: : :
: :
: : 컴포넌트로 만드신다고 하지 않으셨나요,,,,
: :
: : 컴포넌트로 만들었어 빌더에 등록하고 만든 컴포넌트 폼에 놓으면 왼쪽에 있는 이벤트 프러퍼티에 자동으로
: :
: : OnCommRead라고 나올건데요.. 그부분을 마우스로 클릭하면 자동으로 이벤트 연결되고 그리고 연결함수도
: :
: : 자동으로 만들어 지죠... 그러면 끝인데요,,,,,
: :
: :
:
: 답변 주셔서 감사합니다...
: 근데.. 문제가 있네요....
: 데이타가 들어오는 루틴을 감지하는 쓰레드에서 FOnCommRead를 호출하고....
: OnCommRead이벤트 구현 부분에.. 현재 읽어들인 데이터 버퍼랑 문자 수를 넘기고 싶거든요...
: Char *InBuf, int Length 라는 변수를 넘기고 싶은데
: 이건 어떻게 해야하나요..
: 답변 주셔서 감사합니다..
: 또한번 기다릴께요... ^^;;
:
안녕하십니까
한꼬맹이 입니다.
먼저 헤데파일 다음과 같이 선언하시고
typedef void __fastcall (__closure *TCommReadEvent)(System::TObject* Sender, Char *InBuf, int Length );
TNotifyEvent를 TCommReadEvent다 바꿉니다.
그리고 FOnCommRead(this, InBuf, Length)로 호출해 주세요...
그럼 도움되시길...
|