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
[2662] Re:쉬운거지만 나만 모르는거시야요..
정진후 [] 4226 읽음    2000-01-11 00:00
: 전문가들이 보기에는 쉬운 문제지요.
: 폼의 boder style을 None으로 바꾸었어도
: 폼을 움직일 수 있게 하는 방법을 가르쳐 주세요.
:
: 델파이에서는 하는 방법을 겨우 알았는데 빌더로 바꾸기가 어렵군요.
:
: 여기서 쓰는 방법을 자세히 가르쳐 주세요.
: 그럼 정말 고맙겠습니다.
:
:
안녕하세요, 정진후라고 합니다.
저는 두가지 정도의 방법으로 구현을 해봤는데
크게 좋은 방법인지는 모르겠지만 어쨌든
도움이 되었으면 좋겠군요.
첫번째 방법은 직접 메시지 핸들러를
만드는 것이지요.
우선 헤더에 윈도우 메시지를 직접 받을 수 있는
핸들러를 선언합니다.

protected:
    void __fastcall WMLButtonDown(TWMLButtonDown &Msg);
private:   
    BEGIN_MESSAGE_MAP
      MESSAGE_HANDLER(WM_LBUTTONDOWN,TWMLButtonDown,WMLButtonDown)
    END_MESSAGE_MAP(TForm)

라고하면 왼쪽 마우스의 클릭을 잡아내는 핸들러를
갖게 되지요. 그다음은 cpp파일에 핸들러의 코드를 작성합니다.

void __fastcall TForm1::WMLButtonDown(TWMLButtonDown &Msg)
{
    SendMessage(Form1->Handle,WM_SYSCOMMAND,SC_MOVE|2,0);
}

이러한 형식으로 써주면 아마 폼은 캡션바가 없더라도
움직이게 되겠지요. 하지만 이 방법의 문제는 왼쪽 클릭
메시지를 받는 대상이 TForm에 한정된다는 것이어서,
폼 위에 올려놓은 다른 컴포넌트를 드래그할 때는 움직이지
않게됩니다.

그래서 또 제가 쓰는 방법은(위 와는 별개의 코드입니다)
TForm의 OnMouseMove이벤트에

    ReleaseCapture();
    SendMessage(Handle, WM_SYSCOMMAND, SC_MOVE+2, 0);

라고 한 후 각 컴포넌트의 OnMouseMove이벤트를 위에 작성한
TForm의 이벤트에 연결하여 쓰면 됩니다.
그러나 이 것 역시 약점이 있는데 어떤 필요에 의해서 자신의
OnMouseMove이벤트를 기술한 컴포넌트는 연결하기가 조금
곤란하고 복잡해지겠지요.

도움이 되기를 바랍니다.



+ -

관련 글 리스트
2661 쉬운거지만 나만 모르는거시야요.. 초보 빌더 사용자 3931 2000/01/11
2663     Re:캡션없는 폼의 드래그 박지훈.임프 4418 2000/01/11
2662     Re:쉬운거지만 나만 모르는거시야요.. 정진후 4226 2000/01/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.