Затем разработаем отчет, который печатает данные из этих двух компонентов в двух колонках. Отчет тоже несложен и состоит из полос заголовка и окончания, а также полосы данных с расположенными на ней двумя элементами оформления DataText.

Наша задача сейчас - настроить компонент TRvCustomConnection так, чтобы он мог отображать данные из двух компонентов тмето.

ЛИСТИНГ 26.1. Методы-обработчики событий компонента TRvCustomConnection, обеспечивающего соединение отчета с массивами Молю

procedure TfmMain.rcCustomOpen(Connection: TI

begin
Connection.DataRows := Max(meLeft.Lines.Count, meRight.Lines.Count);
i := 0;
end;
procedure TfmMain.rcCustomGetCols(Connection: TRvCustomConnection);
begin
Connection.WriteField('LeftColumn', dtString, 40, 1LeftColumn', ' ' ) ;
Connection.WriteField('RightColumn', dtString, 40, 'RightColumn' , '');
end;

procedure TfmMain.rcCustomGetRow(Connection: TRvCustomConnection) ; begin if meLeft.Lines.Count >= i then Connection.WriteStrData('', meLeft.Lines[i])

else Connection. WriteNullData; if meRight.Lines.Count >= i then Connection.WriteStrData('', meRight.Lines[i])

else Connection. WriteNullData;
Inc(i);
end;

При открытии соединения в методе-обработчике onOpen рассчитывается число записей, необходимое для отображения наиболее длинного из двух файлов.

Метод-обработчик onGetCols вызывается, когда отчету необходимы метаданные о наборе данных соединения. Здесь создаются два поля.

Для этого используется метод

procedure WriteField(Name: String;
DataType;
TEPEataType;
Width: Integer;
FullName: String;
Description: String) ;

который создает поле в соответствии с переданными в нем параметрами.

И при печати отчета для каждой строки вызывается метод-обработчик OnGetRow, в котором задаются значения полей. Для каждого типа данных используется свой метод:

function WriteBCDData (FormatData: String;
NativeData: Currency): String;
function WriteBlobData (var: Buffer;
Len: Longint) : String;
function WriteBoolData (FormatData: String;
NativeData: Boolean): String;
function WriteCurrData(FormatData: String;
NativeData: Currency) : String;
function WriteDateTime (FormatData: String;
NativeData: TDateTirne) ;
funct ion WriteFloatData (FormatData: String;
NativeData: Extended): String;
function WritelntData(FormatData: String;
NativeData: Integer): String;
funct ion W r i t eNul 1 Data ;
function WriteStrData (FormatData: String;
NativeData: String): String;

Обратите внимание, что все эти методы не определяют, какому именно полю будет присвоено значение. Поэтому присваивание осуществляется в порядке следования полей: первый по порядку метод отправляет в отчет значение для первого поля, второй для второго и т. д.

Методы-обработчики компонентов TRvCustomConnection И TRvDataSetConnection совпадают (см. выше разд. "Компонент TRvDataSetConnection "данной главы).

Теперь осталось связать соединение с проектом отчетов. Это делается стандартным образом - при создании объекта прямого просмотра. Но здесь есть одна особенность. Как уже говорилось выше, при создании прямого просмотра в нем автоматически создаются объекты полей, соответствующие полям набора данных. И теперь мы знаем, что у компонента соединения имеется специальный метод-обработчик OnGetCols, который вызывается при создании полей.


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Декабрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31