안녕하세요. 퀵리포트를 잘 사용하고 싶은 어린왕자입니다.
근데..동적으로 리포트를 작성하고 싶어서. 담과 같이 작성했어요.(DEMO보고 베꼈음)
procedure TForm1.Button2Click(Sender: TObject);
var
aReport : TCustomQuickRep;
SomeFields: TStringList;
nIdx: integer;
begin
SomeFields := TStringList.Create;
for nIdx := 0 to DM.ADOQueryRe.FieldCount - 1 do
SomeFields.Add(DM.ADOQueryRe.Fields[nIdx].FieldName);
areport := nil;
QRCreateList(aReport, nil,DM.ADOQueryRe, 'Country Listing', SomeFields);
// Make the column header's font use bold attribute
aReport.Bands.ColumnHeaderBand.Font.Style := [fsBold];
for nIdx := 0 to aReport.Bands.ColumnHeaderBand.ControlCount -1 do
if aReport.Bands.ColumnHeaderBand.Controls[nIdx] is TQRPrintable then
with TQRPrintable(aReport.Bands.ColumnHeaderBand.Controls[nIdx]) do
Left := Left - (5 * nIdx);
for nIdx := 0 to aReport.Bands.DetailBand.ControlCount -1 do
if aReport.Bands.DetailBand.Controls[nIdx] is TQRPrintable then
with TQRPrintable(aReport.Bands.DetailBand.Controls[nIdx]) do
Left := Left - (5 * nIdx);
areport.preview;
aReport.Free;
SomeFields.Free;
end;
근데 문제는 ADOQueryRe에 필드가 많아지니깐..세로종이로 출력해버리더라구요...
전 세로종이가 아닌 가로종이로 두줄로 나타내고 싶었어요..
그래서 다음과 같이 추가했죠..(필드의 세로가 일정크기 넘으면 높이를 낮추라고)
for nIdx := 0 to aReport.Bands.ColumnHeaderBand.ControlCount -1 do
if aReport.Bands.ColumnHeaderBand.Controls[nIdx] is TQRPrintable then
with TQRPrintable(aReport.Bands.ColumnHeaderBand.Controls[nIdx]) do
begin
if Left>200 then
begin
Left:=30;
Top:=15;
end;
Left := Left - (5 * nIdx);
end;
for nIdx := 0 to aReport.Bands.DetailBand.ControlCount -1 do
if aReport.Bands.DetailBand.Controls[nIdx] is TQRPrintable then
with TQRPrintable(aReport.Bands.DetailBand.Controls[nIdx]) do
begin
if Left>200 then
begin
Left:=30;
Top:=15;
end;
Left := Left - (5 * nIdx);
end;
결과는 두줄로 표시되는데 세로종이는 여전히...
....
고수님들..제발 언제나 가로로 출력하게 해주세요..
그렇게 해주시면 무척 감사하겠습니다.