faqs.org.ru

 Главная > Программирование > Языки Pascal/Delphi >

RU.DELPHI.REPORTS FAQ

Секция 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 - Предыдущая - Следующая

Вернуться в раздел "Языки Pascal/Delphi" - Обсудить эту статью на Форуме
Главная - Поиск по сайту - О проекте - Форум - Обратная связь

© faqs.org.ru