Секция 2 из 2 - Предыдущая - Следующая
(а как зарегистрировать функцию в списке функций (диалог "Вставка
функции")?)
Используйте процедуру frAddFunctionDesc (модуль FR_Class):
frAddFunctionDesc('SUMPROPIS', 'Мои функции',
'SUMPROPIS(<Число>)/Возвращает сумму прописью.');
Обратите внимание: символ "/" в описании функции обязателен! Он отделяет
описание синтаксиса от описания самой функции.
FuncLib - это ссылка на библиотеку функций (может быть nil, если библиотека
не используется). Когда библиотека удаляется процедурой
frUnRegisterFunctionLibrary, все связанные с ней функции удаляются из списка
функций.
------------------------------------------------------------
Q-48: Как программно заполнить список переменных в словаре данных?
------------------------------------------------------------
Q:2.23. Как программно заполнить список переменных в словаре данных?
Переменные хранятся в TfrReport.Dictionary.Variables. Там же хранятся и
категории.
with frReport1.Dictionary do
begin
// создаем категорию (пробел перед именем обязателен)
Variables[' New category'] := '';
// создаем переменную
Variables['New Variable'] := 'CustomerData.Customers."CustNo"';
Variables['Another Variable'] := 'Page#';
end;
------------------------------------------------------------
Q-49: Я не хочу показывать некоторые датасеты из моего проекта в дизайнере
FR.
------------------------------------------------------------
Q:2.24. Я не хочу показывать некоторые датасеты из моего проекта в дизайнере
FR.
Используйте TfrReport.Dictionary.DisabledDatasets:
with frReport1.Dictionary do
begin
// отключаем ненужный датасет
DisabledDatasets.Add('CustomerData.Bio');
// или вообще все датасеты, находящиеся в форме или модуле данных
DisabledDatasets.Add('CustomerData*');
end;
------------------------------------------------------------
Q-50: Как передать значение из программы в отчет?
------------------------------------------------------------
Q:2.25. Как передать значение из программы в отчет?
Есть несколько способов. Первый: использовать глобальный объект frVariables
(описан в FR_Class):
frVariables['My variable'] := 10;
создает переменную My variable со значением 10. Это способ подходит, если в
отчет нужно передать статическую информацию (т.е. не меняющуюся в течение
построения отчета).
Второй способ: использовать событие TfrReport.OnGetValue. Этот способ
подходит для передачи в отчет информации, которая может меняться от записи к
записи:
procedure TForm1.frReport1GetValue(ParName: String; var ParValue: Variant);
begin
if ParName = 'MyField' then
ParValue := Table1MyField.Value;
end;
И, наконец, третий способ: программно заполнить список переменных.
with frReport1.Dictionary do
begin
Variables['MyVariable'] := 'CustomerData.Customers."CustNo"';
Variables['Another Variable'] := '10';
end;
(а можно ли передать значение из отчета обратно в программу?)
Можно - используйте объект frVariables. Если в отчете написать в скрипте
одного из объектов:
MyVariable := 10
то в программе значение MyVariable можно достать так:
v := frVariables['MyVariable'];
------------------------------------------------------------
Q-51: Как сделать TChart с несколькими сериями?
------------------------------------------------------------
Q:2.26. Как сделать TChart с несколькими сериями?
Средствами дизайнера FR - никак. Но вы можете сформировать нужную диаграму у
себя в программе и передать ее в готовом виде в FR. Для этого поместите в
отчет пустой компонент TfrChartView (с именем Chart1, к примеру) и напишите
следующий обработчик
TfrReport.OnBeforePrint:
if View.Name = 'Chart1' then
TfrChartView(View).AssignChart(your_Delphi_chart)
------------------------------------------------------------
Q-52: Как поменять местами страницы отчета в дизайнере?
------------------------------------------------------------
Q:2.27. Как поменять местами страницы отчета в дизайнере?
Просто переместите мышкой закладку страницы на нужное место (drag&drop).
------------------------------------------------------------
Q-53: Хотелось бы видеть все, что необходимо вставлять в отчет (поля БД,
переменные) в одном списке.
------------------------------------------------------------
Q:2.28. Хотелось бы видеть все, что необходимо вставлять в отчет (поля БД,
переменные) в одном списке.
Установите TfrReport.MixVariablesAndDBFields := True. Это заставит
отображаться переменные в списке полей БД. Теперь вставку всего необходимого
можно делать из диалога "Вставка поля БД".
------------------------------------------------------------
Q-54: Как не показывать окно с параметрами экспорта?
------------------------------------------------------------
Q:2.29. Как не показывать окно с параметрами экспорта?
Установите необходимые параметры в компоненте (например, для экспорта в
текст - в компоненте TfrTextExport из палитры компонент) и отключите диалог
с помощью свойства ShowDialog.
------------------------------------------------------------
Q-55: Я храню отчет в BLOb, и диалоги "Открыть файл"/"Сохранить файл" в
дизайнере мне не нужны.
------------------------------------------------------------
Q:2.30. Я храню отчет в BLOb, и диалоги "Открыть файл"/"Сохранить файл" в
дизайнере мне не нужны.
У компонента TfrDesigner есть соответствующие события: OnLoadReport и
OnSaveReport. Маленький пример:
procedure TForm1.frDesigner1LoadReport(Report: TfrReport; var ReportName:
String; var Opened: Boolean);
begin
with MyOpenDialog do
begin
Opened := ShowModal = mrOk;
if Opened then
begin
Report.LoadFromBlobField(...);
ReportName := ...;
end;
end;
end;
procedure TForm1.frDesigner1SaveReport(Report: TfrReport; var ReportName:
String; SaveAs: Boolean; var Saved: Boolean);
begin
if SaveAs then
with MySaveDialog do
begin
Saved := ShowModal = mrOk;
if Saved then
begin
Report.SaveToBlobField(...);
ReportName := ...;
end;
end
else
Report.SaveToBlobField(...);
end;
------------------------------------------------------------
Q-56: Как обратиться к объекту отчета из программы?
------------------------------------------------------------
Q:2.31. Как обратиться к объекту отчета из программы?
Объекты FR не являются компонентами (как в QR, RB) и недоступны в программе
обычным способом. Используйте следующий код:
var
t: TfrMemoView;
begin
t := TfrMemoView(frReport1.FindObject('Memo1'));
if t <> nil then
t.Memo.Text := 'FastReport';
// или так:
if t <> nil then
t.Prop['Memo'] := 'FastReport';
end;
------------------------------------------------------------
Q-57: Как определить собственные горячие клавиши в компоненте TfrPreview?
------------------------------------------------------------
Q:2.32. Как определить собственные горячие клавиши в компоненте TfrPreview?
У компонента есть свойство Window: TForm. На Window.OnKeyDown достаточно
подвесить собственный обработчик.
------------------------------------------------------------
Q-58: Как распечатать отчет сразу, без предварительного просмотра?
------------------------------------------------------------
Q:2.33. Как распечатать отчет сразу, без предварительного просмотра?
Вот так:
if frReport1.PrepareReport then
frReport1.PrintPreparedReport('', 1, True, frAll);
// или
frReport1.PrintPreparedReportDlg;
------------------------------------------------------------
Q-59: Как распечатать картинку, находящуюся в файле?
------------------------------------------------------------
Q:2.34. Как распечатать картинку, находящуюся в файле?
а) используйте обработчик события TfrReport.OnBeforePrint:
if View.Name = 'Picture1' then
TfrPictureView(View).Picture.LoadFromFile(...) or
.Assign or
.everything_what_you_want
б) в скрипте (объекта или его бэнда) напишите:
begin
Picture1.LoadFromFile(filename)
end
Секция 2 из 2 - Предыдущая - Следующая
© faqs.org.ru