한가지 더 질문하겠습니다.
제가 지금 버튼을 클릭하면 스크록박스안에 에디트 창을 동적으로 생성시키는 루틴을 작성했는데요.
동적으로 작성될 때마다 생성된 에디트창의
Top값을 20 씩 증가 시켰습니다.
그런데 에디트 창이 여러개가 생겨서 스크롤박스에
수직 스크롤바가 생긴 경우 수직스크롤바를 맨아래에 놓은 상태에서 버튼을 클릭해서 에디트창을 생성하면 생성된 에디트 창이 내가 원하던 위치보다
훨씬 아래에 생성되는 것입니다.
제 추측으로는 Edit 창의 Top 값은 스크롤박스의
상단(보이는 부분의 최상단)으로 부터의 값이기
때문에 수직스크롤바를 아래로 움직였을때
스크롤박스내부의 절대위치와 상관없이
Top 값을 스크롤박스의 상단으로부터 계산해서
생성시키는 것이 아닌가 생가되어집니다.
이걸 해결할 방법은 없나요?
스크롤박스내부의 절대위치에 생성시키는 방법이 있으면 좋겠는데요....
제 질문이 잘 전달 되었는지 모르겠네요...
고수님의 조언을 부탁드립니다.
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;
스크롤 박스내에서 절대위치를 찾으려고만 하기 보단
에디트 박스들의 위치에 따른 상대위치를 찾는 것도 답이 될 수가 있겠죠.