Q&A

  • Panel 위치이동을 제어하려 하는데요
Panel을 자유롭게 움직이게 하는건 아래와같은 코드를 이곳 질답게시판에서
찾아서 잘 이용하고 있습니다.

procedure TForm2.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  (sender as TWinControl).perform(WM_SysCommand, SC_DragMove,0);
end;

제가 제어하고자 하는건 이 Panel의 위치이동을 특정 Panel.left , Panel.top

까지만 가능하게 하고싶어서 입니다.

그위치를 넘어가지 않게 말이죠..

그럼 고수님들의 도움 부탁드리겠습니다.
3  COMMENTS
  • Profile
    최용일 2004.12.29 00:05
    안녕하세요. 최용일입니다.

    서브클래싱해보세요...

    type
        TForm1 = class(TForm)
            ......
              mOldWindowProc: TWndMethod;
              procedure PanelWindowProc(var Message: TMessage);
        end;

    // Panel2 이동하는넘 (SC_DragMove)
    // Panel1 특정 판넬 (Left, Top)

    procedure TForm1.FormCreate(Sender: TObject);
    begin
        mOldWindowProc := Panel2.WindowProc;
        Panel2.WindowProc := PanelWindowProc;
    end;

    procedure TForm1.PanelWindowProc(var Message: TMessage);
    var
        PanelRect: TRect;
        SrcRect: PRect;
    begin
        if Message.Msg = WM_MOVING then
        // WM_MOVING 이동전에 발생하는 메세지
        begin
            // 특정판넬(Panel1)의 영역좌표를 글로벌좌표로 ...
            PanelRect.TopLeft := Panel1.ClientToScreen(Panel1.ClientRect.TopLeft);
            PanelRect.BottomRight := Panel1.ClientToScreen(Panel1.ClientRect.BottomRight);
            // SrcRect = 판넬이 이동될 위치정보
            SrcRect := PRect(Message.LParam);
            if not PtInRect(PanelRect, SrcRect.TopLeft) then
            // 특정판넬의 위치를 벗어났는가?
            begin
                // 특정판넬의 위치(Left,Top)를 벗어나지 못하도록 이동좌표값수정
                if SrcRect.Left < PanelRect.Left then
                begin
                    SrcRect.Right := SrcRect.Right + (PanelRect.Left - SrcRect.Left);
                    SrcRect.Left := PanelRect.Left;
                end;
                if SrcRect.Top < PanelRect.Top then
                begin
                    SrcRect.Bottom := SrcRect.Bottom + (PanelRect.Top - SrcRect.Top);
                    SrcRect.Top := PanelRect.Top;
                end;
            end;
        end;
        // 원래의 메세지핸들러 실행
        mOldWindowProc(Message);
    end;

    ^^ 항상 즐코하세요...

  • Profile
    누룽지 2004.12.29 01:01
    귀찮으셨을텐데 소스까지 친절하게 올려주셔서 너무감사하네요 꾸벅 (_._)

    남은 한 해 잘 마무리 하시구요.

    새해에 좋은일만 생기시길 바랍니다. ^^
  • Profile
    일그니 2004.12.28 23:30
    음.
    질문을. 이해를. 잘..

    하지만.. 일단 객체의 움직임을 제어하고 싶다는..것으로 이해하겠습니다.
    마우스로 객체를 제어시에는.

    마우스 의 x,y 또는 객체의 x,y의 좌표가 변하게됩니다.
    이때 left는 x로 top은 y로 비교하시면 될것으로 생각됩니다.

    절대 좌표가 아니라면. 바로 상위의 포함하는 객체의 좌표에서 x,y값의
    차를 이용하시면 되겟지요.

    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.12.30 19:35
      Win32에 TImageList 란 컴포넌트가 있지요... 걸 활용하면 됩니다.
    • 최용일
      2004.12.30 01:03
      안녕하세요. 최용일입니다. 컴포넌트패키지의 requires절에 designide.dcp를 추가해주세요. 델파이 L...
    • 초보의눈물
      2004.12.30 03:12
      designide는 이미 추가가 되어있습니다.-_-; 또 designide를 designide.dcp로 위 컴포넌트 패키지에 추...
    • 최용일
      2004.12.30 18:56
      안녕하세요. 최용일입니다. Proxies 유닛 문제는 이미 해결 방법이 나와 있어서 여기저기 몇번 검색만 ...
    • 오익환
      2004.12.29 17:59
      Acu Cobol이면 Vutil.exe를 사용하시면 됩니다.
    • 황유동
      2005.01.18 17:07
      감사합니다~ ^^
    • 기형종
      2004.12.30 01:11
      안녕하세요 문의하신 내용을 VB로 표현하면 아래와 같습니다. Selection.Font.Name = "돋움체" Select...
    • Jeeeeeeeeeep
      2004.12.30 03:40
      네..그걸 델파이로 바꾸면 되는거까진 알겠느데.. 델파이로 바꾼걸 좀 올려주시면 안될까요..;;; 부탁요^...
    • 기형종
      2004.12.31 02:48
      간단한 예제소스입니다. 먼저 폼위에 TWordApplication 컴포넌트를 떨구고 시작하십시요. procedure TF...
    • Jeeeeeeeeeep
      2004.12.31 05:18
      잘되는군요^^ 감사감사^^ 답변 고마워여 잘볼꼐요..^^ 다음번에도 모르는것 있으면 부탁해요^^ㅎ
    • 누룽지
    • 2004.12.28 20:50
    • 3 COMMENTS
    • /
    • 15 LIKES
    • 최용일
      2004.12.29 00:05
      안녕하세요. 최용일입니다. 서브클래싱해보세요... type     TForm1 = class(T...
    • 누룽지
      2004.12.29 01:01
      귀찮으셨을텐데 소스까지 친절하게 올려주셔서 너무감사하네요 꾸벅 (_._) 남은 한 해 잘 마무리 하시구...
    • 일그니
      2004.12.28 23:30
      음. 질문을. 이해를. 잘.. 하지만.. 일단 객체의 움직임을 제어하고 싶다는..것으로 이해하겠습니다. ...
    • 공성환
      2004.12.28 20:46
      간단하게 uses절에 ShellAPI추가시키시고... ShellExecute(GetDesktopWindow, 'open', 'www.delphi.co.k...
    • 오병주
      2004.12.28 20:36
      이걸 이용하세요..^^ Function OpenInternetExplorer( sURL : string ): Boolean; const  &nbs...
    • 임우식
      2005.01.06 00:16
      ^^
    • 정원석
    • 2004.12.28 01:01
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 착한천사
      2004.12.31 23:54
      Client는 Oracle7용을 설치하고, setting도 oracle7 client에서 setting했던 것 처럼 사용하십시오.. 똑...
    • 이정택
    • 2004.12.27 20:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 오정훈
      2005.01.05 01:28
      ActiveX를 만드시려면 데이타 베이스 관련해서는 제약이 많습니다. 예전에 제가 만들었을 때에도 데이타 ...
    • 하얀까마귀
      2004.12.28 07:58
      안녕하세요 하얀까마귀 입니다. ActiveX 개발할때 조심해야될 부분이.. IE의 특성이 새창을 열때 새...
    • 초보델
    • 2004.12.27 18:48
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2004.12.28 01:45
      안녕하세요... MapVirtualKey() 함수를 사용하시면, 특정 키의 스캔코드값을 가지고 올 수 있습니다....
    • 황당한초보
      2004.12.27 19:14
      numlock on시 숫자패드 코드를 가지며, off시에는 방향키의 코드를 가집니다. 아래 코드를 참조하십시오....
    • 신철우
    • 2004.12.25 01:53
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2004.12.28 01:48
      아래 질문하신거에 대한 답변은 테스트 거치고 다시 올려드린건데.. 안해보셨나 보네요.. 다시 올려드...
    • 황당한초보
      2004.12.25 12:08
      sndPlaySound(FData, SND_MEMORY or SND_ASYNC or SND_LOOP); 이렇게쓰시지요 각각 인자는 아시겠지요? ^...
    • 권오현
    • 2004.12.24 22:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.12.25 02:59
      안녕하세요. 최용일입니다. 아래와 같이 해보세요... uses     ......, ClipBr...
    • 신철우
    • 2004.12.24 19:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2004.12.24 21:09
      안녕하세요.. wav 파일의 연주를 특정 시간 만큼 반복재생키 위해 while 문을 사용하셨나요? 만일 ...
    • 김성현
    • 2004.12.24 00:45
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2004.12.24 02:06
      값을 형변환으로 스트링을 만들면 아무것도 없을때 '' 이 되던데요. ^^ 해보세요.
    • 김성현
      2004.12.24 02:33
      감사합니다 ^^;; 그런데 디비에서 값을 가져 오는거라 '' 와 널값은 다르다고 알고 있었는데 아닌가...
    • 석주현
      2004.12.24 08:03
      디비에서 값을 가지고 오지만 마지막 부분에 AsString 을 하기 때문에 그런거죠.. ^^
    • 김성현
      2004.12.26 23:41
    • 석주현
      2004.12.24 01:56
      작업 관리자를 띄우고 태스트 해보세요. 해보면 보통 동적으로 생성된 객체들은 그냥 메모리 잡아 먹고 ...
    • 김종균
      2004.12.24 02:30
      답변 감사드립니다. 같은 질문인데요... 폼이 닫히면 자동으로 반환이 안되나요? 안된다면, 동적으로 만...
    • 석주현
      2004.12.23 18:01
      TImage 말고 TPaintBox를 이용해서 작업하세요. 그리고 얼마나 복잡한 그림을 그리시는지는 모르지만 ...
    • 김종균
      2004.12.23 20:02
      답변감사합니다. 하다 하다 안되서... image를 두번 그려서 하고 있는데여 ^^;;; PaintBox로 해바야 겠네...
    • 하얀까마귀
      2004.12.28 07:52
      안녕하세요 하얀까마귀 입니다. TImage는 당연히 느립니다. ㅠㅠ 내부의 소스를 보시면 하는짓이 많...
    • nilriri™
      2005.07.10 06:28
      http://www.delphi.co.kr/zboard/zboard.php?id=delphiResource >그 미리보기에서 > >원하는 페이지를...
    • 이원희
    • 2004.12.23 04:44
    • 1 COMMENTS
    • /
    • 0 LIKES
    • ㉳㉥ㅗ㉣ㅐ㉧ㅛ
      2004.12.23 20:10
      강의실에서 contextmenu로 조회하시면 해당 내용이 나옵니다.
    • 이승호
    • 2004.12.23 02:59
    • 0 COMMENTS
    • /
    • 0 LIKES