Q&A

  • 폼의 크기를 조절하려면?
델파이 초보개발자입니다.
이번에 프로그램을 만들고 있는데
폼의 borderstyle을 bsNone로 설정하여 테두리를 없애고
이미지 콤포넌트로 테두리를 만들었습니다.
이 상태에서 우측 하단에 폼 리사이징의 의미하는 이미지를 올려놓고
이 이미지의 MouseDown, Mouswup에서
폼의 크기를 조정할 수 있도록 하려고 합니다.
MouseDown에서 윈도우의 테두리만 선으로 표시되어 크기가 커진 후
MouseUp에서 변화된 크기만큼 실제 폼의 크기를 크게 하려고 하는데
원하는대로 제어가 안됩니다.
고수분들의 조언을 부탁합니다.
2  COMMENTS
  • Profile
    김종화 2005.07.29 18:59
    폼의 borderstyle이 bsNone이면 폼 리사이징이 안될겁니다..


    procedure CreateParams(var Params: TCreateParams); override;


    procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
        Inherited Createparams(Params);
        with Params do Style := style or WS_THICKFRAME;
    end;


    이렇게 하면 폼 리사이징이 될겁니다..





  • Profile
    김봉균 2005.07.29 19:32
    알려주셔서 감사합니다.
    답변 내용대로 처리해보니 외곽 테두리가 나타나네요.
    이렇게 되면 UI가 맞지 않다고 승인을 받지 못합니다.

    이 곳의 질의/응답을 뒤져서 한가지 찾아내어 적용해보니 크기조절은 처리되었습니다.
    다만, 마우스로 드래그하는 동안 내용은 표시되지 않고 테두리만 조절되어야 합니다.
    마치, 내 컴퓨터 > 속성 > 고급 > 성능 > 시각효과의 '마우스로 끄는 동안 창내용 표시'의 체크를
    제거한 상태처럼 처리되어야 하거든요.
    제가 찾아서 적용한 내용은 아래와 같습니다.

    type
      TForm1 = class(Tform)
        ......
        procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
    end;

    implementation

    procedure Tform1.WMNCHitTest(var Message: TWMNCHitTest);
    const
      BorderSize = 4;
    var
      P: TPoint;
    begin
      P := Point(Message.XPos, Message.YPos);
      P := ScreenToClient(P);
      if (P.X < BorderSize) and (P.Y < BorderSize) then
        Message.Result := htTopLeft
      else if (P.X > Width - BorderSize) and (P.Y < BorderSize) then
        Message.Result := htTopRight
      else if (P.X > Width - BorderSize) and (P.Y > Height - BorderSize) then
        Message.Result := htBottomRight
      else if (P.X < BorderSize) and (P.Y > Height - BorderSize) then
        Message.Result := htBottomLeft
      else if (P.X < BorderSize) then
        Message.Result := htLeft
      else if (P.Y < BorderSize) then
        Message.Result := htTop
      else if (P.X > Width - BorderSize) then
        Message.Result := htRight
      else if (P.Y > Height - BorderSize) then
        Message.Result := htBottom
      else
        inherited;
    end;