Q&A

  • 실행중에 toolbutton이나 speed버튼 옮기기
안녕하세요

프로그램 실행중에 버튼의 위치를 옮기고 싶은데요..
델파이에서도 bar는 움직이는데 버튼들은 직접 움직일수 없자나요
customize를 해야만 버튼의 위치가 바뀌자나요

급합니다...

도와주세요..

감사합니다.
5  COMMENTS
  • Profile
    돌쇠 2002.09.11 23:41


    먼저 버튼을 위치만 바꾸실지 아니면 런타임시 마우스로 잡고 움직일려고 하는지 모르겠네요.

    단지 어떤 작업이 이루어 지면서 위치를 바꾸려면...
    Speedbutton1.top :=  100;
    Speedbutton1.Left :=  100;
    이런 식으로 하면 되구요

    런타임시 마우스로 움직이려고 한다면....
    일반 버튼이나 컴포넌드일 경우.  MouseDown 이벤트에 다음을 써주시면 되구요
    ReleaseCapture;
    (Sender as TWincontrol).Perform(WM_SYSCOMMAND,$f012,0);

    그런데 스피드버튼은 TWincontrol 을 가지고 있지 않아서 약간의 꽁수를 써야 합니다.
    그래서 다음과 같이 해 보았습니다.

    예) 판넬 위에다 스피드 버튼을 올려놓구요

    procedure TForm1.SpeedButton1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
    aaa :THandle;
    begin
    aaa := panel1.Handle;  <== 판넬의 핸들값을 이용하기 위해
    ReleaseCapture;
    PostMessage(aaa,WM_SYSCOMMAND,$f012,0);
    end;

    해주시면 판넬이 움직이면서 스피드버튼이 움직이는 효과가 생깁니다.
    당연히 판넬의 크기를 스피드 버튼크기와 같게 해주면.. 판넬을 깔았는지
    프로그램 실행시 모르겠줘...^^

    그럼 즐코하세요
  • Profile
    김현화 2002.09.12 01:15
    감사합니다..
    많은 도움되었습니다...

    그런데,,염치가 없지만 한가지만 더 여쭤보겠습니다.
    버튼의 MouseDown이벤트를 적용하면 다른 이벤트(사실은 click이벤트만 테스트해봤슴다)는 안 먹는거 같습니다.
    아시면 답변 부탁드립니다.
    감사합니다.



  • Profile
    돌쇠 2002.09.12 02:01
    ^^
    도움이 되었다니 제가 감사하네요...

    Click 이벤트는 따로 안 먹구요....
    제가 그걸 생각 못했네요....
    방금 사용한 문장을 MouseDown 에 쓰지말고.  Mousemove 이벤트에 쓰시고 사용하면... 버튼 클릭과  버튼 이동이 동시에 가능합니다..
    그럼 즐코하세요


  • Profile
    김현화 2002.09.12 02:15
    감사합니다... ^^

  • Profile
    김형환 2002.09.11 20:52


       예)
          Button1.Top  := x;
          Button1.Left  := y;