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

델파이 Q&A
Delphi Programming Q&A
[5278] [답변] CAFEKID/ 아래 SIDM/ 런타임시 크기조정자세히좀
박지훈.임프 [cbuilder] 879 읽음    1998-11-25 15:36
안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당자 임펠리테리입니다.

상식적으로 가만히 생각해보시면 알수 있으실 텐데.. ^^

OnMouseDown에서 처리하셨겠죠? 그럼 X, Y 위치가 파라미터로 전달되잖나요~

그럼 이 X, Y 위치를 기준으로 판단하면 되죠. 제 소스를 예제로 보여드리죠.

(저는 델파이가 아닌 빌더를 사용해서 씨 코딩입니다만, 금방 알아보실겁니다.)

void __fastcall TForm1::Panel1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TControl *SenderControl = dynamic_cast<TControl *>(Sender);
    int SysCommLparam;

    if(X < 4 && Y < 4)
        SysCommLparam = SC_DRAGRESIZEUL;
    else if(X > SenderControl->Width-4 && Y > SenderControl->Height-4)
        SysCommLparam = SC_DRAGRESIZEDR;
    else if(X < 4 && Y > SenderControl->Height-4)
        SysCommLparam = SC_DRAGRESIZEDL;
    else if(X > SenderControl->Width-4 && Y < 4)
        SysCommLparam = SC_DRAGRESIZEUR;
    else if(X < 4)
        SysCommLparam = SC_DRAGRESIZEL;
    else if(X > SenderControl->Width-4)
        SysCommLparam = SC_DRAGRESIZER;
    else if(Y < 4)
        SysCommLparam = SC_DRAGRESIZEU;
    else if(Y > SenderControl->Height-4)
        SysCommLparam = SC_DRAGRESIZED;
    else
        SysCommLparam = SC_DRAGMOVE;

    ReleaseCapture();
    SendMessage(Panel1->Handle, WM_SYSCOMMAND, SysCommLparam, 0);
}

대충 어떻게 되는 건지 알아보시리라 믿습니다.

참고로...

마우스 커서도 바뀌어주어야 되겠죠? 이건 당근 OnMouseMove 핸들러에서 하면

되겠죠? ^^

void __fastcall TForm1::Panel1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
    TControl *SenderControl = dynamic_cast<TControl *>(Sender);
    if((X < 4 && Y < 4) :: (X > SenderControl->Width-4 && Y > SenderControl->Height-4))
        SenderControl->Cursor = crSizeNWSE;
    else if((X < 4 && Y > SenderControl->Height-4) :: (X > SenderControl->Width-4 && Y < 4))
        SenderControl->Cursor = crSizeNESW;
    else if(X < 4 :: X > SenderControl->Width-4)
        SenderControl->Cursor = crSizeWE;
    else if(Y < 4 :: Y > SenderControl->Height-4)
        SenderControl->Cursor = crSizeNS;
    else
        SenderControl->Cursor = crDefault;
}

정의된 매크로 값들은 이미 저번 답변에서 말씀드렸으니 그걸 참고 하시면 되겠구..


그럼 존 코딩하세요~ ^^





독립문에서 임펠리테리였습니다.

(cbuilder, cbuilder@thrunet.com)



+ -

관련 글 리스트
5278 [답변] CAFEKID/ 아래 SIDM/ 런타임시 크기조정자세히좀 박지훈.임프 879 1998/11/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.