![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FastReport [D5, XP]
dzhagr © (2007-02-28 18:59:00)Подскажите, пожалуйста, что нужно, чтобы запустить самый простой отчет. Я расположил на форме frReport1: TfrReport; Вызываю процедуру frreport1.showreport; ничего не происходит. Может надо что-то еще? Или в чем еще может быть ошибка? Спасибо.
dzhagr (2007-03-02 18:23:00) [1]Спасибо огромнейшее!!! Буду спокойно спать))
easy (2007-03-02 15:52:00) [2]
6.1. ИСПОЛЬЗОВАНИЕ ДАННЫХ ИЗ НЕ-БД ИСТОЧНИКОВ. СОБЫТИЯ
Часто данные нужно извлекать из других источников, не имеющих отношения к базам данных (например, файл, массив и т.п.). Для этих целей служит компонент TfrUserDataset, генерирующий события OnFirst, OnNext, OnCheckEOF. Кроме того, придется писать обработчики событий OnGetValue, OnEnterRect компонента TfrReport.
Обработчик события OnGetValue вызывается каждый раз, когда в тексте объекта встречается переменная и нужно получить ее значение. Если переменной сопоставлено значение, то она обрабатывается внутренним обработчиком компонента. Иначе нужно подключать внешний обработчик, например:
procedure TForm1.Doc1GetValue(const ParName: string; var ParValue: Variant);
begin
if ParName = 'Var1' then
ParValue := '1'
else if ParName = 'Var2' then
ParValue := 2
end;
Обработчик события OnEnterRect вызывается перед прорисовкой любого объекта. Обычно он используется для того, чтобы загрузить в объект содержимое Memo-поля или картинки из БД. Пример обработчика:
procedure TForm1.Doc1EnterRect(Memo: TStringList; View: TView);
begin
if Memo.Count > 0 then
if Memo[0] = '[Memo]' then
Memo.Assign(Table1Memo)
else if (Memo[0] = '[Picture]') and (View is TPictureView) then
(View as TPictureView).Picture.Assign(Table1Picture);
end;
Обработчик события OnUserFunction вызывается, когда в тексте объекта обнаружена переменная или выражение, содержащее вызов функции. Функция может иметь до 3-х параметров любого типа. Пример обработчика:
procedure TForm1.Doc1UserFunction(const name: string; p1, p2, p3: Variant;
var val: string);
var
d: Double;
begin
if name <> 'CRAZYMONEY' then exit;
d := Parser.Calc(p1);
// для использования парсера необходимо включить в список uses
// FR_Pars.pas
if d > 10000 then
val := '''' + FormatFloat('#,##0.00',d) + ' - нифига себе!' + ''''
else
val := '''' + FormatFloat('#,##0.00',d) + '''';
// результат - это _форматированная_ строка, поэтому заключаем в кавычки
end;
Для навигации по источникам данных, не имеющим отношения к БД (например, массивам), используется компонент TfrUserDataset, расположенный на палитре компонентов FR. Он генерирует события OnFirst, OnNext, OnCheckEOF, назначение которых, думаю, понятно. Пример использования см. в демо, отчет с переменным количеством столбцов (cross-tab).
ASoft (2007-03-02 12:08:00) [3]с приведением типов, ессно
ASoft (2007-03-02 12:07:00) [4]
> Такое ощущение, там все про базы данных.
это основная функция FR - работа с базами данных :).
Простая передача данных в мемо поля FR перед show, к примеру,
fr.Pages[0].FindObject('memo1').Memo.Text:=<var variant>
dzhagr (2007-03-02 11:38:00) [5]Ну, если честно, то не всю. Вот, например, читаю fruserdataset, там вообще ничего нет про передачу. Такое ощущение, там все про базы данных.
DrPass (2007-03-02 01:25:00) [6]
> Каким вообще образом устанавливается связь переменных формы
> с отчетом?
По-разному. Например, через событие OnGetValue. Непохоже, что ты читал документацию...
dzhagr (2007-03-01 21:25:00) [7]Вобщем оставил я в frreport в форме. Заполняю отчет при помощи fruserdataset. Вот тут проблема. Каким вообще образом устанавливается связь переменных формы с отчетом?
ASoft (2007-03-01 03:40:00) [8]
> А что еще нужно сделать чтоб работала?
надо отчет заполнить :)
dzhagr (2007-02-28 23:35:00) [9]Вот проблема, когда из файла. Я так понял, надо storeindfm оставить false. В дизайнере открыть файл .rfr. А что еще нужно сделать чтоб работала?
easy (2007-02-28 23:02:00) [10]перед showreport этот report надо туда загрузить. либо из файла, либо в dfm -e его сохранять, тогда он сам подгрузится
dzhagr (2007-02-28 22:07:00) [11]да че-то не получается.
easy (2007-02-28 20:49:00) [12]с фастрепортом идёт подробнейший мануал на русском