Главная > Программирование > Языки 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" - Обсудить эту статью на Форуме |
Главная - Поиск по сайту - О проекте - Форум - Обратная связь |