Q&A

  • Form1에 위치한 Panel2에..
안녕하세요..
궁금한 점이 있어서 이렇게 질문 올립니다.

Form1에 Button1~Button4가 존재합니다.

Button1을 Click시에 Form2.show되어진다면
이 Form2을 Form1의 패널에 움직이지 않게 넣으려구 합니다.

어떻게 처리를 해야하는지 좀 막막하네요. 알려주세용 ^^
2  COMMENTS
  • Profile
    이광철 2003.07.02 01:24

    Form2를 Form1의 Panel에 넣기..
    Form2를 생성시에  Auto Create Form에서 제거한다.
    제거방법은 델파이 메뉴의 Project->Options->Forms Tab에서
    Auto Create Forms쪽에 있는 Form2를 Available Forms 쪽으로 보낸다.
    '>' 버튼이용

    이렇게하면 Form2가 Form1의 Panel1 내부에서만 움직일수 있습니다.
    Form2를 움직이지 못하도록 하기위하여 Form2의 Title Bar를 삭제합니다.

    Title Bar 삭제 함수

    function RemoveTitleBar(hWindow: THANDLE; Hide: boolean = True): DWORD;
    var
      R: TRect;

    begin
      Result := GetWindowLong(hWindow, GWL_STYLE);

      if (Hide) then
        Result := Result and not WS_CAPTION
      else
        Result := Result or WS_CAPTION;

      GetClientRect(hWindow, R);
      SetWindowLong(hWindow, GWL_STYLE, Result);
      AdjustWindowRect(R, Result, boolean(GetMenu(hWindow)));
      SetWindowPos(hWindow, 0, 0, 0, (R.Right - R.Left), (R.Bottom - R.Top),
        SWP_NOMOVE or SWP_NOZORDER or SWP_FRAMECHANGED or SWP_NOSENDCHANGING);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      // Form2를 생성
      Application.CreateForm(TForm2, Form2);

      // Form2의 parent를 Form1의 Panel1로 설정
      Form2.Parent := Form1.Panel1;

      // Form2의 위치를 Form1의 Panel1의 0, 0으로 설정
      Form2.Left := 0;
      Form2.Top := 0;

      // Form2 Show
      Form2.Show;

      // Form2를 움직이지 못하게 하기위하여 Title Bar를 삭제한다.
      RemoveTitleBar(Handle);
    end;

  • Profile
    우주천왕 2003.07.02 01:30
    감사합니다. 해결했습니다. 감사