освобождение памяти
Здравствуйте !
С помощью fastReport (2.4) происходит печать содержимого нескольких документов. Каждый документ выглядит как бланк с определенными значениями Top и Left элемента бланка данных. Печать происходит на матричном принтере.
При печати используются только компоненты mv (type TfrMemoView), без использования TfrBandView.
Вот код печати одного бланка:
frReport.Pages.Clear;
frReport.Pages.Add;
page := frReport.Pages[0];
sp.First;
while not sp.Eof do begin
v := TfrMemoView.Create;
v.Alignment := 0;
v.SetBounds(
sp.FieldByName('posleft').AsInteger,
sp.FieldByName('postop').AsInteger,
200, 16);
v.Memo.Add(sp.FieldByName('valueDraw').AsString);
page.Objects.Add(v);
sp.Next;
end;
Result := frReport.PrepareReport;
if not Result then exit;
frReport.ExportTo(frTextExport, printerName);
Здесь sp - хранимая процедура, возвращающая набор данных с координатами Top и Left. При печати нескольких документов данный код вызывается для каждого документа.
Вопросов два:
1. Достаточно ли выполнения frReport.Pages.Clear; для освобождения памяти всех ранее созданных v := TfrMemoView.Create; ?
2. Обнаружилось, что некоторые элементы данных, несмотря на равенство
значений sp.FieldByName('postop').AsInteger, печатаются на разных расстояниях Top.
В чем может быть причина ? Набор данных sp сортирован как order by postop, posleft.
С помощью fastReport (2.4) происходит печать содержимого нескольких документов. Каждый документ выглядит как бланк с определенными значениями Top и Left элемента бланка данных. Печать происходит на матричном принтере.
При печати используются только компоненты mv (type TfrMemoView), без использования TfrBandView.
Вот код печати одного бланка:
frReport.Pages.Clear;
frReport.Pages.Add;
page := frReport.Pages[0];
sp.First;
while not sp.Eof do begin
v := TfrMemoView.Create;
v.Alignment := 0;
v.SetBounds(
sp.FieldByName('posleft').AsInteger,
sp.FieldByName('postop').AsInteger,
200, 16);
v.Memo.Add(sp.FieldByName('valueDraw').AsString);
page.Objects.Add(v);
sp.Next;
end;
Result := frReport.PrepareReport;
if not Result then exit;
frReport.ExportTo(frTextExport, printerName);
Здесь sp - хранимая процедура, возвращающая набор данных с координатами Top и Left. При печати нескольких документов данный код вызывается для каждого документа.
Вопросов два:
1. Достаточно ли выполнения frReport.Pages.Clear; для освобождения памяти всех ранее созданных v := TfrMemoView.Create; ?
2. Обнаружилось, что некоторые элементы данных, несмотря на равенство
значений sp.FieldByName('postop').AsInteger, печатаются на разных расстояниях Top.
В чем может быть причина ? Набор данных sp сортирован как order by postop, posleft.