faqs.org.ru

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

RU.DELPHI.REPORTS FAQ

Секция 1 из 2 - Предыдущая - Следующая

From: "Anatoly Podgoretsky" <anatoly@podgoretsky.com>
Date: Sat, 7 Aug 2004 07:20:58 +0000 (UTC)
Subj: FR FAQ Оглавление

++++++++++++++++++
 Start Of Content
 Date: 07.11.2003
++++++++++++++++++
I-1   Версия от 5.11.2003
I-2   Введение
I-3   Копирайты
I-4   Преамбула
I-5   Доступность этого FAQ
I-6   Источники информации
Q-7   Слышал, что в FR можно сделать ссылки на другие страницы отчёта
Q-8   А настоящий URL - ссылки на страницы - можно?
Q-9   Есть ли у отчёта такие свойства как "комментарий", "дата создания"
Q-10  Хочу в триальной версии своей программы выводить "Nag Label" в
      отчёт
Q-11  FR не печатает на каком-то принтере.
Q-12  Не могу установить пользовательские размеры бумаги.
Q-13  Объекты не смещаются при изменении левой или правой границы
      печати.
Q-14  Экспорт в другие форматы (word, html, text) работает криво.
Q-15  Во всех диалогах FR написана какая-то фигня.
Q-16  При установке пакета FR Delphi требует другие пакеты, которых у
      меня нет.
Q-17  Пропал инспектор объектов, не могу его вернуть на место.
Q-18  Функция SUM работает неправильно.
Q-19  Проблемы с делфийским Translation Tool.
Q-20  Не работает обращение к свойствам внутренних DB-компонентов из
      скрипта.
Q-21  Переменная TOTALPAGES всегда возвращает 0.
Q-22  Ошибка при присвоении переменной FR строкового значения.
Q-23  Дизайнер показывает имя отчета как "Untitled".
Q-24  FR2.4 не открывает файлы frf, сделанные в предыдущих версиях FR.
Q-25  Распечатка немного отличается от того, что видно в превью.
Q-26  Как сделать какой-нибудь отчет?
Q-27  Умеет ли FR работать с какой-нибудь библиотекой?
Q-28  Что такое скрипт?
Q-29  Как вывести бэнд Summary внизу страницы?
Q-30  Как напечатать сумму по группе в ее заголовке?
Q-31  Как сделать, чтобы группа не переносилась частично на следующую
      страницу?
Q-32  Как сделать, чтобы MasterFooter не переносился в одиночку на
      след.страницу?
Q-33  Как задать TabOrder для контролов на диалоговой странице?
Q-34  Как сменить язык в FR во время выполнения программы?
Q-35  Можно ли сделать дизайнер в стиле MDI Child?
Q-36  Как работать с TfrUserDataset?
Q-37  Можно ли отчет формата А3 вывести на двух листах А4?
Q-38  Как напечатать на матричном принтере?
Q-39  Как запретить печать (но не превью) отдельных элементов отчета?
Q-40  FR печатает страницы в порядке 1,1,2,2. Как поменять порядок на
      1,2,1,2?
Q-41  Можно ли первой странице отчета назначить другой лоток принтера?
Q-42  Как послать сформированный отчет по факсу/эл.почте?
Q-43  Как изменить параметр во встроенном запросе из скрипта?
Q-44  Как "отключить" отдельные страницы отчета?
Q-45  Как определить, что отчет был построен успешно?
Q-46  Как скрыть некоторые кнопки в окне дизайнера?
Q-47  Как подключить свою функцию (например, сумму прописью)?
Q-48  Как программно заполнить список переменных в словаре данных?
Q-49  Я не хочу показывать некоторые датасеты из моего проекта в
      дизайнере FR.
Q-50  Как передать значение из программы в отчет?
Q-51  Как сделать TChart с несколькими сериями?
Q-52  Как поменять местами страницы отчета в дизайнере?
Q-53  Хотелось бы видеть все, что необходимо вставлять в отчет (поля БД,
      переменные) в одном списке.
Q-54  Как не показывать окно с параметрами экспорта?
Q-55  Я храню отчет в BLOb, и диалоги "Открыть файл"/"Сохранить файл" в
      дизайнере мне не нужны.
Q-56  Как обратиться к объекту отчета из программы?
Q-57  Как определить собственные горячие клавиши в компоненте
      TfrPreview?
Q-58  Как распечатать отчет сразу, без предварительного просмотра?
Q-59  Как распечатать картинку, находящуюся в файле?
++++++++++++++++++



------------------------------------------------------------
I-1:  Версия от 5.11.2003
------------------------------------------------------------
Конференция: fido7.ru.delphi.reports

------------------------------------------------------------
I-2:  Введение
------------------------------------------------------------
FAQ создан с помощью программы FAQ Maker ver. 1.1
от Анатолия Подгорецкого

Доступен на http:/www.podgoretsky.com или http://podgoretsky.pri.ee

Альтернативный источник FAQ центр <http://faq.delphiplus.org>, более быстрый
хостинг,  хранятся всевозможные FAQ, не только из иерархии FIDO7.RU.DELPHI.*

Первичный источник http://www.fastreport.ru/ru/faq.php

------------------------------------------------------------
I-3:  Копирайты
------------------------------------------------------------
Copyright N 1998-2003 by Fast Reports, Inc.
Публикуется с разрешения Fast Reports, Inc.

------------------------------------------------------------
I-4:  Преамбула
------------------------------------------------------------
Данный FAQ стал возможным благодаря любезному разрешению корпорации Fast
Report
Ни какие изменения в текст FAQ не вносятся, за исключением нумерации
вопросов. По технологическим причинам и с целью преемственности с другими
FAQ этой серии.

Любые предложения по внесению изменений должны посылаться на адрес
michael@fast-report.com

NB! темы 7-10 имеют статус неофициальных, пока не включены в официальный FAQ
(7.11.2003)

------------------------------------------------------------
I-5:  Доступность этого FAQ
------------------------------------------------------------
Этот документ регулярно изменяется в результате отслеживания содержимого
базового FAQ на сайте производителя продукта
http://www.fastreport.ru/ru/faq.php

Распространение и использование этого документа возможно только с разрешения
Fast Reports, Inc, в случае получения такого разрешения, дополнительное
разрешение не требуется.

Остерегайтесь подделок.

------------------------------------------------------------
I-6:  Источники информации
------------------------------------------------------------
Основыным источником инфорамации по Fast Report является сайт корпорации,
насположеный по следующему адресу: http://www.fastreport.ru

На сайте есть FAQ, форум, документация и другая связанная с продуктом
информации

------------------------------------------------------------
Q-7:  Слышал, что в FR можно сделать ссылки на другие страницы отчёта
------------------------------------------------------------
1. Q: Слышал, что в FR можно сделать ссылки на другие страницы отчёта во
время предварительного просмотра. Но вот КАК их сделать?

A: В FastReport 2.51 появилась возможность использовать ссылки для перехода
на другие страницы во время предварительного просмотра. Переход
осуществляется всегда на начало страницы. Для создания ссылки имя объекта
отчета типа TfrMemoView должно иметь следующий формат:

URL*. Аббревиатура URL служит исключительно для распознавания того, что это
гиперссылка.

Например: URL10, URL5, URL_MAIN и т.д.

В свойстве Tag выбранного объекта TfrMemoView с именем URL* указывается
конструкция вида @pagenumber, где pagenumber v номер страницы для перехода
во время клика на объект. Например: @1 v переход на страницу 1, @65 v
переход на страницу 65, @[RESULTS] v переход на страницу с номером из
переменной  RESULTS.

Пример создания оглавления.

В скрипте OnBeforePrint бенда, который должен быть включен в оглавление,
присваиваем значение некой переменной, например с именем RESULTS, значение
PAGE# (иными словами создаем Lякорь| для последующего перехода). В
оглавлении создаем MemoView с именем URL1. В тексте MemoView пишем название
пункта перехода, а в свойстве Tag помещаем
значение @[RESULTS].

Более детальный пример можно посмотреть, скачав и установив файл

http://www.fastreport.ru/files/fr251demo.exe

------------------------------------------------------------
Q-8:  А настоящий URL - ссылки на страницы - можно?
------------------------------------------------------------
2. Q: А настоящий URL - ссылки на страницы - можно?

A: Ссылки на любой URL создаются аналогично ссылкам на страницы  (п.1) за
исключением того, что в свойстве тег непосредственно    прописывается URL (к
примеру, http://www.fastreport.ru )

Объект указанный в URL будет открыт браузером по умолчанию во время    клика
на объект со ссылкой.

Более детальный пример можно посмотреть, скачав и установив файл

    http://www.fastreport.ru/files/fr251demo.exe


------------------------------------------------------------
Q-9:  Есть ли у отчёта такие свойства как "комментарий", "дата создания"
------------------------------------------------------------
3. Q: Есть ли у отчёта такие свойства как "комментарий", "дата создания"
(можно ли защитить отчёт паролем? и т.д.)

A: Начиная с FR версии 2.5 - есть и можно.

       ReportName: String - название отчета;
       ReportAutor : String - автор отчета;
       ReportComment: String - комментарий к отчету;
       ReportVersionMajor,
       ReportVersionMinor,
       ReportVersionRelease,
       ReportVersionBuild: String - поля номера версии отчета;
       ReportPasswordProtected: Boolean - признак защиты паролем;
       ReportPassword: String - пароль для доступа к отчету.

Вышеуказанные свойства доступны для редактирования в дизайнере. Существует
также два свойства, которые заполняются дизайнером автоматически:

    ReportCreateDate: TDateTime - дата и время создания отчета;
    ReportLastChange: TDateTime - дата и время последней модификации отчета.

Доступ ко всем выше описанным свойствам можно получить из кода программы
путем прямого обращения к ним.

Например:

ShowMessage(frReport1.ReportComment);
frReport1.ReportComment := [This is comment!];

Также возможен доступ ко всем этим свойствам из скрипта отчета.

Например:
[REPORTNAME].

------------------------------------------------------------
Q-10:  Хочу в триальной версии своей программы выводить "Nag Label" в отчёт
------------------------------------------------------------
4. Q: Хочу в триальной версии своей программы выводить "Nag Label" в отчёт,
который был бы недоступен для удаления пользователю.

A: Пример использования возможности модификации нужных страниц после
операции PrepareReport (непосредственно перед печатью).

var
  m : TfrMemoView;


------------------------------------------------------------
Q-11:  FR не печатает на каком-то принтере.
------------------------------------------------------------
Q:1.1. FR не печатает на каком-то принтере.
(варианты: при выборе принтера возникает exception; некоторые страницы не
печатаются; часть букв повернута на 90 градусов; текст сбился в кучу и т.д.)
(проблема известна с принтерами от Xerox, Canon и HP).

Попробуйте убрать комментарий со строки {$DEFINE PRN_RESET} в файле
FR_Prntr.pas и перекомпилировать пакет FR и ваш проект. Как правило,
проблема решается. Если это не помогло, попробуйте поставить драйвер от
похожей модели принтера.

(HP LJ 1000w - многостраничные отчеты не печатаются - все страницы
печатаются на одном листе - нашел новый драйвер, все заработало)

------------------------------------------------------------
Q-12:  Не могу установить пользовательские размеры бумаги.
------------------------------------------------------------
Q:1.2. Не могу установить пользовательские размеры бумаги.
(Диалог "Параметры страницы" в дизайнере, поля для ввода размеров все время
недоступны).

FR использует только размеры бумаги, поддерживаемые драйвером принтера. Если
в списке типов, возвращаемых драйвером, присутствует пользовательский размер
(номер бумаги в Windows - 0100h), то поле для ввода размеров станет
доступным при выборе этого типа бумаги. (Некоторые драйверы используют
другой номер для пользовательского размера, отличный от 100h - с ними FR
также не будет разрешать ввод размеров).

------------------------------------------------------------
Q-13:  Объекты не смещаются при изменении левой или правой границы печати.
------------------------------------------------------------
Q:1.3. Объекты не смещаются при изменении левой или правой границы печати.

Левая и правая границы влияют только на отчеты типа Cross-tab. В обычных
отчетах можно задать св-во объектов BandAlign = baLeft (к примеру), и объект
будет прижат к левой границе автоматически. Если у бэнда несколько объектов
с BandAlign = baLeft, то они будут прижаты друг к другу. Самому крайнему
справа объекту при этом можно установить BandAlign = baRest, тогда он займет
все оставшееся до правой границы пространство.

------------------------------------------------------------
Q-14:  Экспорт в другие форматы (word, html, text) работает криво.
------------------------------------------------------------
Q:1.4. Экспорт в другие форматы (word, html, text) работает криво.
(смещение текста, пустые строки и пр.)

А что вы хотели? ;) В FR координаты объектов в пикселях, в MSWord, html,
txt - построчное представление информации. При экспорте из-за этого
неизбежны искажения. Попробуйте поиграть настройками фильтра экспорта
(коэффициенты преобразования по X и Y, опция удаления пустых строк).

(не экспортируются некоторые объекты, напр. объект Rich)
Попробуйте взять другой фильтр экспорта - в powerpack их много. Кроме того,
есть замечательные (небесплатные, правда) фильтры от Pragnaan Software -
ссылка на них есть на домашней странице FR.

------------------------------------------------------------
Q-15:  Во всех диалогах FR написана какая-то фигня.
------------------------------------------------------------
Q:1.5. Во всех диалогах FR написана какая-то фигня.

а) установлены неверные языковые ресурсы. Скомпилируйте FR с русскими
ресурсами (для этого запустите FRRESRUSSIANmk.bat).

б) конфликт ресурсов FR с ресурсами одного из установленных компонентов.
Ресурсы FR занимают диапазон 53000..59000. Исправьте константу frRes в файле
FR_Const.pas для смещения нижней границы диапазона и перекомпилируйте пакет
FR.


------------------------------------------------------------
Q-16:  При установке пакета FR Delphi требует другие пакеты, которых у меня
нет.
------------------------------------------------------------
Q:1.6. При установке пакета FR Delphi требует другие пакеты, которых у меня
нет.
(напр., требует IBO40CRT, TEE45, RXCTL6, mwEdit_D6 и пр.)

Файл FRх.dpk (х - версия Delphi) содержит ссылки на эти файлы. Но ссылки
закомментированы директивами {$IFDEF}. Файл используется, если в файле
FR.inc убран комментарий с соответствующей строки (напр., если
раскомментирована строка {$DEFINE RX}, то при установке потребуется пакет
RXCTLх.dpk). При установке пакета FRх.dpk Delphi просит сохранить изменения
в файле FRх.dpk.

Если вы нажали "Yes", то Delphi уберет все директивы {$IFDEF} и файл будет
испорчен, и вы получите вышеуказанный эффект. Попробуйте установить FR еще
раз, взяв оригинальный файл .dpk, и на вопрос сохранить файл ответьте "No".



------------------------------------------------------------
Q-17:  Пропал инспектор объектов, не могу его вернуть на место.
------------------------------------------------------------
Q:1.7. Пропал инспектор объектов, не могу его вернуть на место.

FR хранит позиции своих диалоговых окон в системном реестре. Запустите
редактор реестра (regedit.exe), откройте ветку
HKEY_CURRENT_USERSoftwareFastReportимя_проектаFormTfrInspForm и проверьте и
при необходимости откорректируйте значения XPosition, YPosition, Width,
Height. Внимание! Неаккуратные действия могут привести к порче Windows!


------------------------------------------------------------
Q-18:  Функция SUM работает неправильно.
------------------------------------------------------------
Q:1.8. Функция SUM работает неправильно.
(в отчете с двумя masterdata-бэндами не могу вывести сумму по второму бэнду)

FR в этом случае не может определить, по какому бэнду считать сумму. Надо в
вызове функции SUM (это же касается и функцийй MIN, MAX, AVG) указывать
явным образом бэнд, по которому считается сумма. Напр., SUM([CustNo],
MasterData2)


------------------------------------------------------------
Q-19:  Проблемы с делфийским Translation Tool.
------------------------------------------------------------
Q:1.9. Проблемы с делфийским Translation Tool.
(при попытке запустить проект, в котором используется FR, и для которого
сгенерированы языковые DLL с помощью Translation Tool, выдается ошибка типа
"Resource TfrProgressForm not found")

Включите в список uses все файлы FR, чтобы Translation Tool сделал ресурсы и
для них. Или скомпилируйте ваш проект с run-time пакетами FR.


------------------------------------------------------------
Q-20:  Не работает обращение к свойствам внутренних DB-компонентов из
скрипта.
------------------------------------------------------------
Q:1.10. Не работает обращение к свойствам внутренних DB-компонентов из
скрипта.
(пишу frDialogForm.Query1.Open)

Надо писать без frDialogForm:
Query1.Open


------------------------------------------------------------
Q-21:  Переменная TOTALPAGES всегда возвращает 0.
------------------------------------------------------------
Q:1.11. Переменная TOTALPAGES всегда возвращает 0.

Отчет должен быть двухпроходным (диалог "Свойства отчета" в меню "Файл"
дизайнера).



------------------------------------------------------------
Q-22:  Ошибка при присвоении переменной FR строкового значения.
------------------------------------------------------------
Q:1.12. Ошибка при присвоении переменной FR строкового значения.
(код типа frReport1.Dictionary.Variables['Отчетный период'] := 'Март')

FR трактует строковые значения, присвоенные переменным из Dictionary, как
выражения, которые надо вычислять. Добавьте к строке кавычки:

frReport1.Dictionary.Variables['Отчетный период'] := '''' + 'Март' + '''';

Либо передавайте статичные данные через frVariables.


------------------------------------------------------------
Q-23:  Дизайнер показывает имя отчета как "Untitled".
------------------------------------------------------------
Q:1.13. Дизайнер показывает имя отчета как "Untitled".
(я храню форму отчета в BLOb-поле таблицы БД. Когда я загружаю отчет и
запускаю дизайнер, он показывает имя отчета как "Untitled")

Перед запуском дизайнера сделайте frReport1.FileName := 'MyReport';


------------------------------------------------------------
Q-24:  FR2.4 не открывает файлы frf, сделанные в предыдущих версиях FR.
------------------------------------------------------------
Q:1.14. FR2.4 не открывает файлы frf, сделанные в предыдущих версиях FR.
(до приобретения FastReportа мы пользовались бесплатной версией FreeReport,
создали много шаблонов отчетов... а теперь они не открываются, пишет
"Неверный FRF формат" :(( Неужели все придется переделывать?)

У файлов отчета надо заменить первый байт (с 17h на 16h), сделать следующие
модификации, прочитать все отчеты и сохранить их, потом изменения в коде
вернуть назад.

FR_Class:

  function ReadString(Stream: TStream): String;
  begin
    { if frVersion >= 23 then}
     Result := frReadString(Stream) {else
     Result := frReadString22(Stream);}
   end;

  procedure ReadMemo(Stream: TStream; Memo: TStrings);
  begin
   { if frVersion >= 23 then}
    frReadMemo(Stream, Memo){ else
    frReadMemo22(Stream, Memo);}
  end;

FR_Utils:

  procedure frReadMemo(Stream: TStream; l: TStrings);
  var
   s: String;
   b: Byte;
   n: Word;
  begin
   l.Clear;
   l.Text := frReadString(Stream); exit;
   Stream.Read(n, 2);
   if n > 0 then
    repeat
     Stream.Read(n, 2);
     SetLength(s, n);
     Stream.Read(s[1], n);
     l.Add(s);
     Stream.Read(b, 1);
    until b = 0
   else
    Stream.Read(b, 1);
  end;

  function frReadString(Stream: TStream): String;
  var
   s: String;
   n: Integer;
   b: Byte;
  begin
   Stream.Read(n, 4);
   SetLength(s, n);
   Stream.Read(s[1], n);
   // Stream.Read(b, 1);
   Result := s;
  end;

------------------------------------------------------------
Q-25:  Распечатка немного отличается от того, что видно в превью.
------------------------------------------------------------
Q:1.15. Распечатка немного отличается от того, что видно в превью.

В FR2.4 обеспечивается не совсем полный WYSIWYG. Ждите версию 3.0.


------------------------------------------------------------
Q-26:  Как сделать какой-нибудь отчет?
------------------------------------------------------------
Q:2.1. Как сделать какой-нибудь отчет?

Этот вопрос лучше задать в форуме или в списке рассылки. Кстати, в разделе
"ссылки" есть ссылки на коллекции готовых форм отчетов.


------------------------------------------------------------
Q-27:  Умеет ли FR работать с какой-нибудь библиотекой?
------------------------------------------------------------
Q:2.2. Умеет ли FR работать с какой-нибудь библиотекой?

FR работает со всеми библиотеками доступа к БД, которые используют механизм
TDataSet. Кроме того, в виде исключения поддерживается библиотека
IB_Objects, несовместимая с TDataSet.



------------------------------------------------------------
Q-28:  Что такое скрипт?
------------------------------------------------------------
Q:2.3. Что такое скрипт?

Это кусочек кода на языке, похожем на Pascal. FR умеет исполнять такой код,
что дает возможность изменять вид отчета в процессе его построения. См.
подробнее о возможностях языка в документации.

(а есть ли скрипт у бэнда?)
Есть, для этого выделите бэнд и нажмите Ctrl+Enter либо выберите в
инспекторе объектов свойство "OnBeforePrint".

(а у страницы отчета?)
Есть. Щелкните на пустом месте страницы и выберите в инспекторе свойство
"OnBeforePrint". Если страница типа "диалоговая форма", то свойство
называется OnActivate.

(а можно ли из скрипта одного объекта обращаться к свойствам другого?)
Можно, через точечную нотацию.

(а к каким именно свойствам объектов можно обращаться?)
К тем, которые отображаются в инспекторе. Кроме того, к некоторым
комплексным свойствам типа Font возможно обращение как Font.Name, Font.Size
и пр. Свойство Memo также доступно:
Memo1.Memo := 'some text'. Полный список свойств и методов объектов приведен
в документации.

(в каком порядке выполняются скрипты объектов - слева направо?)
Нет, в порядке, в котором были созданы объекты. Поэтому во избежание
путаницы скрипты лучше писать в бэнде.


------------------------------------------------------------
Q-29:  Как вывести бэнд Summary внизу страницы?
------------------------------------------------------------
Q:2.4. Как вывести бэнд Summary внизу страницы?

См. отчет "Summary at the bottom" в демке FR\DEMOS\REPORTS


------------------------------------------------------------
Q-30:  Как напечатать сумму по группе в ее заголовке?
------------------------------------------------------------
 Q:2.5. Как напечатать сумму по группе в ее заголовке?

См. отчет "Group totals in header" в демке FR\DEMOS\REPORTS


------------------------------------------------------------
Q-31:  Как сделать, чтобы группа не переносилась частично на следующую
страницу?
------------------------------------------------------------
Q:2.6. Как сделать, чтобы группа не переносилась частично на следующую
страницу?

См. отчет "Keep group together" в демке FR\DEMOS\REPORTS


------------------------------------------------------------
Q-32:   Как сделать, чтобы MasterFooter не переносился в одиночку на
след.страницу?
------------------------------------------------------------
Q:2.7. Как сделать, чтобы MasterFooter не переносился в одиночку на
след.страницу?

В скрипте MasterData надо написать:

begin
  if FreeSpace < MasterFooter1.Height then
    NewPage;
end
Правда, в результате появится избыток пустого места внизу страницы (если
бэнд MasterFooter имеет большую высоту).


------------------------------------------------------------
Q-33:  Как задать TabOrder для контролов на диалоговой странице?
------------------------------------------------------------
Q:2.8. Как задать TabOrder для контролов на диалоговой странице?

a) с помощью кнопок Bring to front/Send to back на панели инструментов
б) установите мастер TabOrder из powerpack.


------------------------------------------------------------
Q-34:  Как сменить язык в FR во время выполнения программы?
------------------------------------------------------------
Q:2.9. Как сменить язык в FR во время выполнения программы?

а) использовать ресурсы в DLL.
Скомпилируйте нужный ресурс в DLL (для этого запустите файл mkdll.bat из
папки FRRESнужный_язык) и в программе подключите его строкой

frLocale.LoadDll('FR_ENGL.DLL');

Если нужно использовать ресурсы по умолчанию, сделайте

frLocale.UnloadDll;

б) ресурсы в текстовом файле или другом виде. Используйте событие
frLocale.OnLocalize. Оно передает параметр StringID (номер строки) и ожидает
возврата в параметр ResultString. Например:

frLocale.OnLocalize := MyClass.OnLocalize;

procedure TMyClass.OnLocalize(StringID: Integer; var ResultString: String);
begin
  if StringID = 53000   then
    ResultString := 'Search';
end;


------------------------------------------------------------
Q-35:  Можно ли сделать дизайнер в стиле MDI Child?
------------------------------------------------------------
Q:2.10. Можно ли сделать дизайнер в стиле MDI Child?

Нет - придется переписывать исходники FR.


------------------------------------------------------------
Q-36:  Как работать с TfrUserDataset?
------------------------------------------------------------
Q:2.11. Как работать с TfrUserDataset?
(я хочу напечатать данные не из БД)

См. примеры в FRDEMOSPRNGRID


------------------------------------------------------------
Q-37:  Можно ли отчет формата А3 вывести на двух листах А4?
------------------------------------------------------------
Q:2.12. Можно ли отчет формата А3 вывести на двух листах А4?

Нет, FR не сможет переразбить уже построенный отчет.


------------------------------------------------------------
Q-38:  Как напечатать на матричном принтере?
------------------------------------------------------------
Q:2.13. Как напечатать на матричном принтере?

Чтобы было быстро - экспортируйте отчет в txt и выведите его на принтер.
Например, так:

frReport1.PrepareReport;
frReport1.ExportTo(frTextExport1, 'prn');



------------------------------------------------------------
Q-39:  Как запретить печать (но не превью) отдельных элементов отчета?
------------------------------------------------------------
Q:2.14. Как запретить печать (но не превью) отдельных элементов отчета?

Увы, никак. Это будет в версии 3.0.


------------------------------------------------------------
Q-40:  FR печатает страницы в порядке 1,1,2,2. Как поменять порядок на
1,2,1,2?
------------------------------------------------------------
Q:2.15. FR печатает страницы в порядке 1,1,2,2. Как поменять порядок на
1,2,1,2?

Если шаблон отчета имеет несколько страниц, то FR печатает сначала все
записи первой страницы, потом все записи второй, и т.д. Чтобы поменять это,
присвойте свойству TfrReport.DataSet источник данных, в котором столько
записей, сколько раз надо повторить печать страниц, и установите
TfrReport.ReportType = rtMultiple.


------------------------------------------------------------
Q-41:  Можно ли первой странице отчета назначить другой лоток принтера?
------------------------------------------------------------
Q:2.16. Можно ли первой странице отчета назначить другой лоток принтера?

Если шаблон отчета имеет несколько страниц, то каждой из них можно назначить
свои установки принтера. Если шаблон одностраничный, то сменить лоток
принтера нельзя.


------------------------------------------------------------
Q-42:  Как послать сформированный отчет по факсу/эл.почте?
------------------------------------------------------------
Q:2.17. Как послать сформированный отчет по факсу/эл.почте?

а) по факсу: установите программу-факс (она добавит в список принтеров
"Fax"), выберите этот принтер в FR и напечатайте отчет на нем.
б) по эл.почте: сохраните готовый отчет в один из доступных форматов
(frp,txt,html,rtf и пр.) и отправьте как вложение.


------------------------------------------------------------
Q-43:  Как изменить параметр во встроенном запросе из скрипта?
------------------------------------------------------------
Q:2.18. Как изменить параметр во встроенном запросе из скрипта?
(можно ли написать что-то типа Query1.Params[0].Text := '10'?)

Нет, но вы можете сопоставить параметру запроса переменную, и менять ее
значение. При этом надо закрыть и открыть запрос:

Query1.Close;
MyParam1 := '10';
Query1.Open;


------------------------------------------------------------
Q-44:  Как "отключить" отдельные страницы отчета?
------------------------------------------------------------
Q:2.19. Как "отключить" отдельные страницы отчета?

Добавьте в отчет пустую диалоговую форму и в ее скрипте (OnActivate)
напишите:

begin
  Page2.Visible := False // скрываем страницу с именем Page2
end


------------------------------------------------------------
Q-45:  Как определить, что отчет был построен успешно?
------------------------------------------------------------
Q:2.20. Как определить, что отчет был построен успешно?

if frReport1.PrepareReport then // успешно, показываем его
  frReport1.ShowPreparedReport


------------------------------------------------------------
Q-46:  Как скрыть некоторые кнопки в окне дизайнера?
------------------------------------------------------------
Q:2.21. Как скрыть некоторые кнопки в окне дизайнера?

В FR_Desgn.pas определены следующие вещи:

type
  TfrDesignerRestriction = (frdrDontEditObj, frdrDontModifyObj,
frdrDontSizeObj, frdrDontMoveObj,
     frdrDontDeleteObj, frdrDontCreateObj,
     frdrDontDeletePage, frdrDontCreatePage, frdrDontEditPage,
     frdrDontCreateReport, frdrDontLoadReport, frdrDontSaveReport,
     frdrDontPreviewReport, frdrDontEditVariables,
frdrDontChangeReportOptions);
  TfrDesignerRestrictions = set of TfrDesignerRestriction;

var
  DesignerRestrictions: TfrDesignerRestrictions;

Присвойте набор значений переменной DesignerRestrictions и вызовите
дизайнер.


------------------------------------------------------------
Q-47:  Как подключить свою функцию (например, сумму прописью)?
------------------------------------------------------------
Q:2.22. Как подключить свою функцию (например, сумму прописью)?

Используйте обработчик TfrReport.OnUserFunction. Вот простой пример такого
обработчика (определяется функция SumPropis):

 procedure TForm1.frReport1UserFunction(const Name: String;
     p1, p2, p3: Variant; var val: Variant);
   begin
     if AnsiCompareText('SUMPROPIS', Name) = 0 then
       val := My_Convertion_Routine(frParser.Calc(p1));
   end;

   Теперь функцию можно использовать в любом месте отчета (текст, скрипт) в
форме SumPropis(Value).

(но такой подход работает только для одного компонента TfrReport. А если я
хочу сделать свою функцию доступной везде?)

Самый простой вариант - сделать обработчик события OnUserFunction общим для
всех компонентов. Если этот вариант не подходит, придется писать библиотеку
функций.
Простой пример того, как это сделать:

    type
     TMyFunctionLibrary = class(TfrFunctionLibrary)
     public
       constructor Create; override;
       procedure DoFunction(FNo: Integer; p1, p2, p3: Variant;
         var val: Variant); override;
     end;

   constructor TMyFunctionLibrary.Create;
   begin
     inherited Create;
     with List do
     begin
       Add('DATEPROPIS');
       Add('SUMPROPIS');
     end;
   end;

   procedure TMyFunctionLibrary.DoFunction(FNo: Integer;
     p1, p2, p3: Variant; var val: Variant);
   begin
     val := 0;
     case FNo of
       0: val := My_DateConvertion_Routine(frParser.Calc(p1));
       1: val := My_SumConvertion_Routine(frParser.Calc(p1));
     end;
   end;

Регистрация библиотеки осуществляется процедурой
   frRegisterFunctionLibrary(TMyFunctionLibrary);
Удаление библиотеки осуществляется процедурой
   frUnRegisterFunctionLibrary(TMyFunctionLibrary);

Секция 1 из 2 - Предыдущая - Следующая

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

© faqs.org.ru