며칠전에 여러개 테이블에 대한 퀵레포트 생성에 대하여 질문을 했던 사람입니다.
어떻게 하는게 가장 효율적일지 몰라서...
제가 하려는 방식은 퀵레포트를 여러개 생성하여 QRConpositeReport 로 묶으려고 합니다.
여러개를 생성하는데 모든 테이블에 대해서 만들어 줄 수가 없어서
테이블에 대한 정보를 하나의 테이블로 만들었습니다.
그리고 그 테이블을 참조하여 동적으로 생성을 하려고 합니다.
각설하고... 이번에 여쭤보고 싶은것은..
컴포넌트를 동적으로 생성하였는데..
개수가 7~9 정도라서 배열로 잡고 생성하는 식으로 했습니다.
<!--CodeS-->
private
LabelList : array[0..10] of TQRLabel;
...
with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add('select * from TableDesign where FormName = "'+ThisName+'" order by ID');
Open;
First;
for i:=0 to RecordCount-1 do begin
LabelList[i] := TQRLabel.Create(Self);
LabelList[i].Parent := self.QRGHead;
LabelList[i].Top := 0; LabelList[i].Width := 150;
LabelList[i].Caption := FieldByName('ColumnName').AsString;
Next;
end;
end;
<!--CodeE-->
중요하다 싶은부분만 발췌했습니다.
첫번째 질문은
LabelList : array[0..10] of TQRLabel;
이 문장은 객체는 생성이 안된 포인터만 가지고 있는 배열인가요??
그렇다면
for i:=0 to RecordCount-1 do begin
LabelList[i] := TQRLabel.Create(Self);
이렇게 생성을 했을때 폼이 종료되면 자동으로 free가 되나요??
아니면 close 이벤트에서 free를 시켜줘야 할까요?
LabelList : array[0..10] of TQRLabel;
네 맞습니다. 포인터만 선언된 상태지요..
두번째..
LabelList[i] := TQRLabel.Create(Self);
네 그것도 맞습니다. self가 자기 자신을 가르키는 거니깐 해당폼이 또는 객체가
소멸할때 하위의 것도 소멸합니다.편하죠..