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

델파이 팁&트릭
Delphi Programming Tip&Tricks
[151] 팁! 런타임에 컨트롤 드래그하기...
박지훈.임프 [cbuilder] 18467 읽음    1999-06-04 00:00
옙~ 임프랍니다.
오늘도 변함없이.. 간단하고 쉬운, 그러나 유용한 팁 하나와 함께 즐거운
하루를 시작합시다.

어케 런타임에 컨트롤들을 클릭해서 이동, 즉 드래그할 수 있나...?
모를때는 엄청 복잡하게 구현을 해야 한다고 생각을 했었는데,
얼마전에 이 방법을 웹에서 발견하고는, 에구궁~ 했답니다.

이러한 처리를 위해서는, 드래그할 컨트롤에 WM_SYSCOMMAND를 주기만 하면 됩니다.
이 메시지는 윈도우의 무브, 사이즈변경, 닫기, 스크롤 등이 생길때
발생하는 메시지로서, 빌더의 윈32 헬프를 뒤져보면 자세한 옵션들이 나옵니다.

문제는.. M$ 에서 여기에 쓰일 수 있는 옵션들을 모두 공개하지
않았다는 것입니다. 예를 들어서, 약간의 상상력과 추리력을 발휘해보면,
당연히 윈도우를 드래그하는 것은 이 메시지에 의할 것임을 유추할 수 있습니다.

여기에 쓰이는 인자는, 매크로로 정의되지 않은 인자로, 값은 0xf012 입니다.
그러니까 드래그할 윈도우에 WM_SYSCOMMAND 메시지를 lparam으로 0xf012를 보내
면 되는겁니다. 코딩은,

void __fastcall TForm1::Panel1MouseDown(TObject *Sender, TMouseButton
        Button, TShiftState Shift, int X, int Y)
{
   ReleaseCapture();
   Panel1->Perform(WM_SYSCOMMAND, 0xf012, 0);
}

와 같이 하면 되죠

델파이 소스로는,
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 Panel1.Perform(WM_SYSCOMMAND, $f012, 0);
end;

ReleaseCapture() 가 필요한 이유에 대해서는...
윈 32 헬프를 참고하시길 바랍니다. (좀 길고, 설명하기도 까다롭습니다.)

이 내용은 볼랜드의 TI에서 참고한 것입니다.

참고로, 값을 이리저리 바꾸다 보면 드래그 사이징, 즉 드래그하여 컨트롤의
크기를 변경하는 옵션도 있습니다. 이 경우엔 각각 8개의 방향에 해당하는
옵션을 발견하실 수 있을겁니다. 뭐, 찾기 귀찮으신데 정말 필요하신 분은
말씀하시면 알려드리도록 하죠.

그럼, 도움되시길 바라면서, 이만...



독립문에서 임펠리테리였습니다.
김성철.마법사 [douner]   2002-02-16 05:13 X
0xf022 : 최소화하기
김성철.마법사 [douner]   2002-02-16 05:13 X
0xf032 : 최대화 하기
김성철.마법사 [douner]   2002-02-16 05:14 X
0xf042 : 부모 윈도우 최소화 하기
김성철.마법사 [douner]   2002-02-16 05:15 X
0xf062 : 자기자신 숨기기
김성철.마법사 [douner]   2002-02-16 05:17 X
모르겠다 -_-;;
김성철.마법사 [douner]   2002-02-16 05:17 X
근데 움직이니깐 넘 잼있네욤
아제나 [azena]   2010-10-29 13:45 X
0xF001 : 우측 고정 넓이 조절
0xF002 : 좌측 고정 넓이 조절
0xF003 : 하단 고정 높이 조절
0xF004 : 우하단 고정 전체 크기 조절
0xF005 : 좌하단 고정 전체 크기 조절
0xF006 : 상단 고정 높이 조절
0xF007 : 우상단 고정 전체 크기 조절
0xF008 : 좌상단 고정 전체 크기 조절
0xF009, 0xF012 : 이동

+ -

관련 글 리스트
151 팁! 런타임에 컨트롤 드래그하기... 박지훈.임프 18467 1999/06/04
(링크)     C++Builder Tip'N Tricks > 팁! 런타임에 컨트롤 드래그하기...
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.