카테고리 없음

TPanel 크기변경, 이동 - 실행중

미스터몽키 2014. 6. 11. 14:06

실행중 (Run Time) TPanel의 크기를 변경

 

(참고)

http://cysnim12.tistory.com/entry/폼-처럼-표시가-나오며-크기가-변하는-코딩법

 

위의 참고 웹페이지가 복사방지가 되어있어 애좀 먹고 다시 작성했다.

 

상수 선언하고, 패널의 MouseDown, MouseMove 이벤트에 작성하면 된다.

 

const
 SC_DRAG_RESIZEL = $f001; // left resize
 SC_DRAG_RESIZER = $f002; // right resize
 SC_DRAG_RESIZEU = $f003; // upper resize
 SC_DRAG_RESIZEUL = $f004; // upper-left resize
 SC_DRAG_RESIZEUR = $f005; // upper-right resize
 SC_DRAG_RESIZED = $f006; // down resize
 SC_DRAG_RESIZEDL = $f007; // down-left resize
 SC_DRAG_RESIZEDR = $f008; // down-right resize
 SC_DRAG_MOVE = $f012; // move 

 

procedure TForm21.Panel20MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var SenderControl: TWinControl;
    SysCommWparam: integer;
begin

  SenderControl := TWinControl(Sender);

  if (X < 4 )and ( Y < 4) then
    SysCommWparam := SC_DRAG_RESIZEUL
  else if(X > SenderControl.Width-4) and (Y > SenderControl.Height-4) then
    SysCommWparam := SC_DRAG_RESIZEDR
  else if(X < 4) and (Y > SenderControl.Height-4) then
    SysCommWparam := SC_DRAG_RESIZEDL
  else if(X > SenderControl.Width-4 ) and ( Y < 4) then
    SysCommWparam := SC_DRAG_RESIZEUR
  else if(X < 4) then
    SysCommWparam := SC_DRAG_RESIZEL
  else if(X > SenderControl.Width-4) then
    SysCommWparam := SC_DRAG_RESIZER
  else if(Y < 4) then
    SysCommWparam := SC_DRAG_RESIZEU
  else if(Y > SenderControl.Height-4) then
    SysCommWparam := SC_DRAG_RESIZED
  else
    SysCommWparam := SC_DRAG_MOVE;  // 이동할 때

  ReleaseCapture();
  SendMessage(SenderControl.Handle, WM_SYSCOMMAND, SysCommWparam, 0);

end;

 

procedure TForm21.Panel20MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var SenderControl: TControl;
begin
  SenderControl := TControl(Sender);
  if ((X < 4) AND (Y < 4))or ((X > SenderControl.Width-4) and (Y > SenderControl.Height-4)) then
    SenderControl.Cursor := crSizeNWSE
  else if ((X < 4) and (Y > SenderControl.Height-4)) or ((X > SenderControl.Width-4) and (Y < 4))then
    SenderControl.Cursor := crSizeNESW
  else if ((X < 4 )or (X > SenderControl.Width-4))then
    SenderControl.Cursor := crSizeWE
  else if ((Y < 4) or (Y > SenderControl.Height-4))then
    SenderControl.Cursor := crSizeNS
  else
    SenderControl.Cursor := crDefault;
end;