안녕하세요..
저는 label 컴포넌트를 사용할때 일일히 컴포넌트를 만들어 주는데,
나중에 필요한 label 컴포넌트 갯수가 다를경우에는 코드에서 만들어 줘야 할거 같아요.
예를 들면 화면에 데이터베이스에서 필드갯수만큼 출력을 해야 할때
while(필드갯수)
>>> 이부분에 label 컴포넌트를 등록해야 합니다. <<<
end
저렇게 컴포넌트를 사용자가 등록하는것이 아니라 자동으로 등록해주고 싶은데,
어떻게 해야 하나요?
그리고 제가 클릭하세요 델파이7 이라는 책을 보고 공부하고 있는데 정말, 제가 원하는 질문은
나와 있지 않네요... 좋은 책 있나요?
그냥 컴포넌트를 디자인시가 아니라 런타임시에 생성하는 방법을 묻는 질문으로 이해하고 답변 올립니다.
var
tempLabel : TLabel;
Loop : integer;
begin
for Loop := 0 to 2 do // 세개 만들다고 할때
begin
tempLabel := TLabel.Create(nil);
tempLabel.parent := Self; // Label의 Parent 윈컨트롤 지정..Label이 어느놈 위에 나타나는가..
tempLabel.Caption := 'aaaaa';
tempLabel.Left := Loop * 40;
......
end;
end;
근데 이런식으로만 해주면 다른 함수에서 라벨에 접근하기도...힘들고 하고 나중에 Free를 해줄 수 없으므로..
전역으로 LabelManagerList : TStringList;
를 선언하시고 FormCreate할때 TSTringList(LabelManagerList := TStringList.create) 를
생성해주시고요....
var
tempLabel : TLabel;
Loop : integer;
begin
for Loop := 0 to 2 do // 세개 만들다고 할때
begin
tempLabel := TLabel.Create(nil);
tempLabel.parent := Self; // Label의 Parent 윈컨트롤 지정..Label이
어느 놈 위에 나타나는가..
tempLabel.Name := 'MyLabel' + IntToStr(Loop); //이름을 구분자로 사용할 경우
tempLabel.Caption := 'aaaaa';
tempLabel.Left := Loop * 40;
......
LabelManagerList.addObject(tempLabel.Name,tempLabel);
end;
end;
일케 해시고요 접근하실때는
TLabel(LabelManagerList.Objects[LabelManagerList.IndexOf('MyLabel1')]).Caption := 'ccccc';
뭐 이런식으로 접근하시고요...
프로그램 끝낼때
var
Loop : integer;
begin
for Loop := LabelManagerList.count - 1 downto 0 do
begin
TLabel(LabelManagerList.Object[Loop]).Free;
end;
LabelManagerList.Free;
end;
이런식으로 해주시면 되요..
여서 대강 코딩한거라... 부분부분 에러가 있을지도 모르겠네요...