Как в TQuickRep запихнуть данные из StringGrid?

1. Установите свойство DataSet - пустым. Это показывает QuickRep, что данные будут браться не из БД.
2. Установите обработчик события OnNeedData (в QuickRep).
3. Установите обработчик события DetailsBand.BeforePrint.
Как это происходит.
A) Во время построения отчета QuickRep будет все время вызывать Ваш обработчик OnNeedData, передавая ему параметр MoreData (значение которого можно менять).
Б) Перед завершением OnNeedData вы обязаны установить MoreData в True или False. True говорит QuickRep, что у Вас еще есть данные, которые должны быть представлены в отчете. False - Ваши данные закончились, и QuickRep завершает построение отчета и начинает выводить его на экран (принтер).
В) Всякий раз, когда в OnNeedData Вы возвращаете True - QuickRep будет создавать новую строку в DetailsBand.
Г) После того, как QuickRep создаст очередную строку в DetailsBand, он тут же вызовет Ваш обработчик DetailsBand.BeforePrint, чтобы дать Вам возможность поместить туда какую-нибудь иформацию. Ваша задача - заполнить ее каким-либо содержимым. Как угодно. Например, очередной строчкой из StringGrid.
Понятно, что придется завести целую перменную, что-нибудь вроде GridIndex - показывающую с какой строкой из gid мы сейчас работаем. В каждом OnNeedData мы увеличиваем GridIndex на 1, а как он превысит размер grid'а - возвращаем MoreData = False. А в DetailsBand.BeforePrint просто вставляем нужные тексты из grid (само-собой подразумевается, что в DetailsBand сидят нужные объекты, например TQRLabel).
Что-то вроде:

var
GridIndex :Integer;

procedure xxxReportBeforePrint(Sender: TCustomQuickRep; var PrintReport:Boolean);
begin
GridIndex := -1;
end;

procedure xxxxOnNeedData(Sender : TObject; var MoreData : Boolean);
begin
Inc( GridIndex );
MoreData := (GridIndex < MyGrid.RowCount);
end;

procedure xxxxBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean);
begin
DetailsLabel1.Caption := MyGrid.Cells[GridIndex, 0];
DetailsLabel2.Caption := MyGrid.Cells[GridIndex, 1];
DetailsLabel3.Caption := MyGrid.Cells[GridIndex, 2];
end;

© Kid_Deceiver