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
[44024] Re:Re:객체를 함수로 넘겨서 생성한다음 다시 쓸려고 하는데..어떻게 하면 좋을지요..
둥이네 [grin79] 899 읽음    2006-03-09 13:40
WARSHIP 님이 쓰신 글 :
: 둥이네 님이 쓰신 글 :
: : void __fastcall TForm1::FFPanel9MouseMove(TObject *Sender,
: :       TShiftState Shift, int X, int Y)
: : {           
: :               //............................
: :               POINT pPos ;
: :                 pPos.x  = X;
: :                 pPos.y = Y;
: :                 GetCursorPos(&pPos);
: :
: :                 if (FindControl(WindowFromPoint(pPos)) == NULL)
: :                         return ;
: :                 TFFPanel *PanTest =  (TFFPanel *)FindControl(WindowFromPoint(pPos));
: :              
: :                                           if( PanTest->Tag>0 ){
: :                         RxSpeedButton->Left =  PanTest->Left-2;
: :                         RxSpeedButton->Top = PanTest->Top-2;
: :                         xPoint = X;
: :                         yPoint = Y;
: :                  //.....................
: :                 }
: :
: :
: : 이렇게 된 부분을.... 중간에..TFFPanel *PanTest =  (TFFPanel *)FindControl(WindowFromPoint(pPos));
: : 윕부분까지를 따로 함수를 만들어서 빼낼려고 합니다.
: : 이부분이 중복 되는 구간이 많아서 따로 뺄려고 하거등요..
: :
: :
: : void __fastcall TForm1::FFPanel9MouseMove(TObject *Sender,
: :       TShiftState Shift, int X, int Y)
: : {
: :               // ..........................
: :                TFFPanel *PanTest;
: :                 FindPanel(*PanTest,X, Y);
: :                  if( PanTest->Tag>0 ){
: :                         RxSpeedButton->Left =  PanTest->Left-2;
: :                         RxSpeedButton->Top = PanTest->Top-2;
: :                         xPoint = X;
: :                         yPoint = Y;
: :
: :
: :
: :              //...........................
: : }
: :
: : void __fastcall TForm1::FindPanel(TFFPanel &PanTest,int X,int Y){
: :                 POINT pPos ;
: :                 pPos.x  = X;
: :                 pPos.y = Y;
: :                 GetCursorPos(&pPos);
: :
: :                 if (FindControl(WindowFromPoint(pPos)) == NULL)
: :                         return ;
: :
: :                 PanTest =(TFFPanel *)FindControl(WindowFromPoint(pPos));
: :                // Edit1->Text =  PanTest->Tag ;
: : }
: :
: : 이렇게 했는데..자꾸.. PanTest =(TFFPanel *)FindControl(WindowFromPoint(pPos));
: : 이 부분에서 에러가 나네요...
: : 함수를 어떻게 바꾸면 좋을지 몰라서 조언 부탁 드립니다. 아니면 처음부터 잘못 작성한건지..
: : 어떻게 해야 할지..조언 부탁 드립니다.
:
: 우선 소스가 좀 정리가 안된것 같습니다.
: pPOS 에 X,Y값을 대입하고, 다시 GetCursorPos로 또 대입하는 것은 중복투자인것 같구요
: MouseMove는 현재 윈도우 안에서만 발생되므로
: GetCursorPos는 필요 없을것 같습니다.( 정확한 의도를 모르기에 확신하지는 않습니다 ^^)
: FindControl 도 두번 호출하셨는데요. 그것보다는
:
: TFFPanel *ppn = dynamic_cast<TFFPanel*>(FindControl(WindowFromPoint(pPos)));
: if (ppn)
: {
:            // Code
: }
:   
: 이런식으로 하시는게 낳을듯 싶습니다.
: dynamic_cast는 하향 캐스팅이 실패할 시에 NULL을 리턴해 줌으로써
: 에러처리가 가능합니다.
: 아마 에러가 나는 이유는 다른 윈도우의 객체 포인터를 TFFPanel로
: 강제로 형변환 하면서 생긴것이 아닌가 조심스럽게 추측해 봅니다. ^^;

저부분이..마우스 클릭해서 드래그시에 나타내는 부분이여서..
GetCursorPos(&pPos);
부분을 제거하면 제대로 작동이 안되는거 같네요..이유는 잘모르겠지만...
그리고... dynamic_cast 이거 사용 해봤는데..
ppn->tag 로 접근하니.에러가..^^; 이유는 잘모르겠네요..
새로운 함수 갈켜 주셔서 감사 합니다. dynamic_cast 에 대해서 좀더 알아 봐야 겠네요..

+ -

관련 글 리스트
44017 객체를 함수로 넘겨서 생성한다음 다시 쓸려고 하는데..어떻게 하면 좋을지요.. 둥이네 849 2006/03/09
44054     Re:객체를 함수로 넘겨서 생성한다음 다시 쓸려고 하는데..어떻게 하면 좋을지요.. 0 899 2006/03/10
44068         Re:Re:객체를 함수로 넘겨서 생성한다음 다시 쓸려고 하는데..어떻게 하면 좋을지요.. 둥이네 797 2006/03/11
44023     Re:객체를 함수로 넘겨서 생성한다음 다시 쓸려고 하는데..어떻게 하면 좋을지요.. WARSHIP 877 2006/03/09
44024         Re:Re:객체를 함수로 넘겨서 생성한다음 다시 쓸려고 하는데..어떻게 하면 좋을지요.. 둥이네 899 2006/03/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.