Q&A

  • ScrollBox내에 불규칙하게 생성되는 문제

한가지 더 질문하겠습니다.

제가  지금 버튼을 클릭하면  스크록박스안에 에디트 창을 동적으로 생성시키는 루틴을 작성했는데요.

동적으로 작성될 때마다 생성된 에디트창의
Top값을 20 씩 증가 시켰습니다.

그런데 에디트 창이 여러개가 생겨서 스크롤박스에
수직 스크롤바가 생긴 경우 수직스크롤바를 맨아래에 놓은 상태에서 버튼을 클릭해서 에디트창을 생성하면 생성된 에디트 창이 내가 원하던 위치보다
훨씬 아래에 생성되는 것입니다.

제  추측으로는 Edit 창의 Top 값은 스크롤박스의
상단(보이는 부분의 최상단)으로 부터의 값이기
때문에 수직스크롤바를 아래로 움직였을때
스크롤박스내부의 절대위치와 상관없이
Top 값을 스크롤박스의 상단으로부터 계산해서
생성시키는 것이 아닌가 생가되어집니다.

이걸 해결할 방법은 없나요?
스크롤박스내부의 절대위치에 생성시키는 방법이 있으면 좋겠는데요....

제 질문이 잘 전달 되었는지 모르겠네요...
고수님의 조언을 부탁드립니다.
2  COMMENTS
  • Profile
    소울해커 2004.02.11 00:49
    대충 짜 보았습니다.

    type
      ...
      private
        Cnt: Integer;
        MyEdit: Array of TEdit;
      end;

    implementation

    procedure TForm1.Button1Click(Sender: TObject);
    begin
         Cnt := Cnt + 1;
         SetLength(MyEdit, Cnt + 1);
         MyEdit[Cnt] := TEdit.Create(ScrollBox1);
         if Cnt = 1 then
            MyEdit[Cnt].SetBounds(0, 0, ScrollBox1.Width - 4, Height)
         else
            MyEdit[Cnt].SetBounds(0, MyEdit[Cnt - 1].Top + 20, ScrollBox1.Width - 4, Height);
         MyEdit[Cnt].Parent := ScrollBox1;
         MyEdit[Cnt].Visible := True;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var i: Integer;
    begin
         for i := 0 to Cnt do
             MyEdit[i].Free;
         Cnt := 0;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
         Cnt := 0;
    end;

    스크롤 박스내에서 절대위치를 찾으려고만 하기 보단
    에디트 박스들의 위치에 따른 상대위치를 찾는 것도 답이 될 수가 있겠죠.


  • Profile
    윤상현 2004.02.11 19:33

    고맙습니다. 소울해커님.
    제가 원하던 것이  구현되어 있더군요... ^^

    너무 감사해요...
    소울해커님 화이팅 !!!