Content


I-1: Версия от 2.02.2002

 Конференция:  fido7.ru.delphi.reports

I-2: Введение

 FAQ  для  конференции  fido.ru.delphi.reports,  основано  на  FAQ  от  QUSoft  AS
 Временный  управляющий  данного  FAQ  Анатолий  Подгорецкий  (anatoly@podgoretsky.com),  разыскивается  постоянный  управляющий,  который  в  состоянии  вести  это  FAQ  делать  периодический  постинг  в  конференцию  и  обновлять  по  мере  необходимости.

I-3: Копирайты

 Copyright  2000  Qusoft  AS
 Copyright  (C)  Anatoly  Podgoretsky,  2001

I-4: Преамбула

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

I-5: О поле Subject:

 Правилами  иерархии,  в  частности,  регламентируется  содержание  поля  Subject:  ваших  писем.  Дело  в  том,  что  довольно  большое  количество  "потенциально  полезных  вам  индивидумов"  читают  эхи  методом  "по  сабджектам",  сознательно  не  тратя  время  на  письма  под  заголовком  "Help!",  "Проблема"  или  "Вопрос  чайника".  В  данном  случае  использование  комбинации  клавиш  Shift-1  лишь  усугубляет  ваше  положение.  Подумайте  об  этом.
 
 Не  указание  же  заголовка  вообще  может  вызвать  законный  вопрос  "ТЫ  МЕНЯ  УВАЖАЕШЬ",    так  здесь  явное  неуважение  к  читателям  конференции,  не  хватило  даже  сил  на  написание  заголовка,  то  какое  право  на  получение  ответа,  лень  написать  заголовок,  так  остальным  будет  лень  отвечать.

I-6: Здесь не приветствуется

 *  обсуждение  вопросов,  не  относящихся  к  отчетам,  для  этого  специально  существует  другие  конференции.  К  сожалению,  мотивация  типа  "мой  аплинк/провайдер  не  получает  эту  эху/ньюсгруппу"  в  данном  случае  не  принимается,  потому  что  за  продолжительное  время,  прошедшее  с  момента  создания  RU.DELPHI.REPORTS,  следовало  бы  подумать  в  первую  очередь  о  себе  и  создать  для  себя  необходимое  количество  каналов  поступления  информации.
 
 *  обсуждение  вашей  совершенно  новой  и  безумно  свежей  идеи  о  том,  что  эху  пора  разделить  на  две/три/больше  частей,  потому  что  читать  ее  нет  никаких  сил.  Вы  даже  не  в  первой  сотне  придумавших  и  успешно  высказавших  сие.  От  себя  могу  посоветовать  пользоваться  хорошими  программами  для  чтения  эхо-конференций.
 
 *  обсуждение  тем,  не  связанных  с  собственно  отчетами  -  алгоритмы,  общие  вопросы  программирования  под  Win32,  общие  организационные  вопросы,  связанные  с  разработкой  программного  обеспечения,  etc.
 
 *  общая  неспособность  получать  информацию  из  окружающей  реальности.  Прочтите  книгу  об  эффективной  коммуникации  и  должном  отношении  ко  всему.

I-7: Доступность этого FAQ

 Этот  документ  регулярно  изменяется  в  результате  отслеживания  происходящего  в  RU.DELPHI.REPORTS.  Вы  можете  поучаствовать  в  составлении  документа,  прислав  по  адресу  anatoly@podgoretsky.com  сформулированный  вариант  вопроса,  ответ  или  дополнение  или  исправление  к  ответу.  Довольно  важным  критерием  отбора  ответов  является  размер.
       
 Разрешается  свободное  распространение  и  использование  этого  документа  при  соблюдении  определенной  вежливости  по  отношению  к  автору  и  читателям,  основной  составляющей  чего  является  соблюдение  целостности  документа.  Hе  очень  приветствуется  выкладывание  копий  этого  документа  на  WWW:  подумайте,  нужны  ли  вам  непрерывные  усилия  по  синхронизации?
 
 Если  же  вы  вынуждены  использовать  этот  документ  на  сайте,  для  того,  чтобы  создать  его  содержимое,  подумайте,  нужен  ли  вообще  ваш  сайт?
       
 Свежая  версия  этого  документа  находится  на  домашней  странице  автора  http://posgoresky.com  (доступны  исходные  тексты  движка,  движок  FaqMaker.exe  и  последними  версиями  баз).  
 Альтернативное  хранилище  расположено  по  http://fido7faq.delphiplus.org,  более  быстрый  хостинг,  но  информация  может  быть  менее  актуальной.
 
 Остерегайтесь  подделок.

I-8: Источники информации

 Прежде  всего,  конечно  же,  книги.  Как  бы  это  странно  ни  звучало,  но  зайдите  в  книжный  магазин  и  купите  себе  там  какую-нибудь  книгу,  даже  если  она  уже  у  вас  есть.  Следует  сразу  предупредить,  что  специфика  современного  российского  книгоиздания  такова,  что  существует  довольно  большое  количество  книг,  не  стоящих  своих  денег.  Вероятно,  вам  следует  положиться  на  собственное  чутье  и  тщательно  изучить  предлагаемую  продукцию.
       
 Список  литературы  на  все  интересующие  темы,  рекомендованный  к  прочтению,  находится  в  неофициальном  FAQ.  эхоконференции  RU.BOOKS.COMPUTING.  Свежие  версии  этого  FAQ.  регулярно  публикуются  в  соответствующей  эхоконференции,  а  также  доступны  на  домашней  странице  автора.
       
 Инфорамация  на  домашних  странихах  производителей  конкретного  генератора  отчетов.  Для  Quick  Repopt  -  http://www.qusoft.com
 
 Учтите,  что  кроме  книг  по  Delphi  вас  могут  интересовать  также  издания,  посвященные  программированию  под  Windows  и  проектированию  баз  данных.  Delphi,  в  сущности,  является  обычным  компилятором  для  Windows,  и  довольно  большое  количество  вопросов,  которые  у  вас  возникнут,  будут  не  столь  уж  сильно  ориентированы  именно  на  Delphi.
       
 Само  собой,  хотелось  бы  увидеть  у  активного  участника  конференции  определенные  знания  языка  программирования  Object  Pascal,  являющегося  основой  Delphi,  а  также  знаний  в  области  программирования  вообще,  программирования  под  Windows  в  частности,  а  также  предметной  области  своей  собственной  задачи.  Без  всякого  сомнения,  вы  можете  общаться  и  задавать  вопросы  на  любом  уровне,  но  ожидайте  соответствующей  реакции  извне.
       
 Hаучитесь  также  пользоваться  системой  помощи,  поставляемой  вместе  с  Delphi.  Как  это  ни  прискорбно,  весьма  ощутимый  процент  задаваемых  в  эхе  вопросов  легко  снимается  нажатием  кнопки  F1  и  поиском  примерного  перевода  вопроса  на  английский  язык.  Примером  тому  может  являться  сакраментальный  вопрос  о  получении  короткого  имени  файла  из  длинного  и  ответ:  GetShortPathName.  Да,  скорее  всего  вам  придется  восполнить  свои  пробелы  в  школьном  образовании  и  изучить  некоторое  подмножество  английского  языка,  без  коего  вы  имеете  не  столь  много  шансов  успешно  функционировать  в  выбранной  области.
       
 Учтите  наличие  в  поставке  Delphi  большого  количества  разнообразных  примеров.  Возможно,  ознакомившись  с  ними,  вы  приобретете  дополнительные  знания.  
       
 Множество  качественной  информации,  относящейся  к  программированию  под  Windows  95/NT,  можно  получить  на  http://www.sysinternals.com.  Hа  http://www.iarchitect.com  находится  большой  ресурс,  посвященный  вопросам  построения  пользовательского  интерфейса.
             
 Если  же  вы  из  Интернета,  то  поисковые  машины,  такие  как  http://www.altavista.com,  http://ftpsearch.lycos.com,  а  также  крупнейший  архив  ньюсгрупп  http://www.dejanews.com,  станут  вашими  лучшими  помощниками.  
 
 FAQ  по  Fast  Report  можно  взять  по  следующему  адресу  http://www.fastreport.ru/ru/faq.php

I-9: Список рекомендуемой литературы

 1.  QuickReport  3  Tutorial  in  Adobe  Acrobat  format.  (21.09.2001)
       http://www.qusoft.com/getfile.asp?level=0&Filename=QR3TUT.PDF
 
 2.  QuickReport  3  Tutorial  in  Word  97  format.
       http://www.qusoft.com/getfile.asp?level=0&Filename=QR3TUTORIAL.ZIP
 
 3.  Quick  Report  2.0  на  русском
       http://www.podgoretsky.com/ftp/Docs/Delphi/DX//qr2rus.zip
 
 4.  Создание  отчетов  с  помощью  QuickReport  3
       http://www.podgoretsky.com/ftp/Docs/Delphi/DX/qr3rus.zip
 
 5.  П.В.Шумаков.  Delphi3  и  разработка  приложений  баз  данных.,"  олидж",М.,1998.
       Гл.14  (12  параграфов)  "Введение  в  построение  отчётов".
 
 6.  Елманова.  Создание  отчётов.,  "Компьютерпресс".,  9'1997.
 
 7.  Генератор  отчетов  FastReport  v2.4  Руководство  разработчика
       fr24rus.chm  (790  кб)
       http://www.fastreport.ru/rus/  (русская  версия),
       http://www.fast-report.com  (английская  версия).
 
 Новые  книги  можно  искать  и  заказывать  через  Интернет  на  сайте  http://books.ru
 Там  же  как  правило  есть  аннотация.
 

Q-10: Как создать секцию в runtime?

 Вы  можете  создать  секцию  вызвав  конструктор  и  назначив  свойства
 
 with  TQRGroup.Create(Self)  do
 begin
     Parent  :=  QuickRep1;
     Master  :=  Parent;
     Expression  :=  'CustNo';
 end;
 
 with  TQRDBText.Create(Self)  do
 begin
     Parent  :=  QRGroup1;
     Dataset  :=  QuickRep1.Dataset;
     DataField  :=  'CustNo';
 end

Q-11: Ошибка с добавлением AddPrintable

 При  попытке  вызова  AddPrintable  в  обработчике  beforeprint  конкретной  секции  приводит  к  возникновению  ошибки  GPF  (или  Access  Violation).
 
 Вы  можете  вызывать  AddPrintable  к  секции  только  до  запуска  отчета.  QuickReport  нужно  знать  все  обо  всех  printable  конмонентах  до  запуска  отчета.

Q-12: Как изменить ширину поля созданного с помощью QRCreateList?

 Ширина  всех  полей  расчитывается  на  основе  буквы  'X'  умноженной  на  количество  из  свойство  DisplayWidth.  Растояние  между  полями  устанавливается  в  значение  10.  Если  вы  измените  значение  свойства  DisplayWidth,  то  это  отразится  в  отчете.
 
 Пример:
 
     QRCreateList(aReport,  Self,  tbCountry,  'Test  Listing',  SomeFields);
 
     //  Now  reduce  the  spacing  between  each  field  by  5  (nIdx  declared  as  integer)
     for  nIdx  :=  0  to  aReport.Bands.ColumnHeaderBand.ControlCount  -1  do
         if  aReport.Bands.ColumnHeaderBand.Controls[nIdx]  is  TQRPrintable  then
             with  TQRPrintable(aReport.Bands.ColumnHeaderBand.Controls[nIdx])  do
                 Left  :=  Left  -  (5  *  nIdx);
 
     for  nIdx  :=  0  to  aReport.Bands.DetailBand.ControlCount  -1  do
         if  aReport.Bands.DetailBand.Controls[nIdx]  is  TQRPrintable  then
             with  TQRPrintable(aReport.Bands.DetailBand.Controls[nIdx])  do
                 Left  :=  Left  -  (5  *  nIdx);

Q-13: Печать Memo на секциях с AlignToBottom

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

Q-14: QRStringsBand и многоколоночный отчет

 Я  использую  многоколоночный  отчет  с  Column  Header  band.  Column  Header  band  не  печатается  для  первой  колонки.
 
 QRStringsBand  не  может  быть  использован  с  другими  секциями,  поэтому  он  не  работает  так  как  вы  желаете.    ColumnHeaderBand  был  разработан  для  работы  с  Detail  секциями  и  печать  не  корректно  синхронизируется  с  QRStringsBand.  
 Единственным  решением  является  использование  обработчика  OnNeedData    вместо  QRStringsBand.

Q-15: Как можно напечатать секцию в нужной мне позиции на странице?

 Позиция  печати  текущей  секции  определяется  свойством  CurrentY.  Это  свойство  типа  integer  и  единица  измерения  1/10  mm,  (254  =  составляет  1  дюйм)
 При  генерации  отчета  данное  свойство  обновляется  автоматически,  но  вы  можете  переопределить  его  значение  в  обработчике  BeforePrint.

Q-16: Могу я поместить три сектии типа TitleBand и запрещать/разрешать их в зависимости от условия?

 Вы  можете  иметь  только  одну  секцию  типа  TitleBand  на  весь  отчет,  но  вы  можете  добавить  несколько  секций  типа  ChildBand  и  уже  управлять  ими.

Q-17: Три компоненты QRLabel с установленным свойством AutoStretch

 Вопрос:  На  секции  Detail  располодены  три  компоненты  QRLabels  с  установленным  свойством  AutoStretch  каждая,    когда  секция  переходит  на  другой  лист,  то  я  имею  QRLabel  1  на  первом  листе,  а  остальные  на  следующем  листе.  Есть  ли  возможность  печатать  все  три  метки  на  одном  листе?
 
 Нет,  это  ограничение  QuickReport.    Когда  секция  печатается,  то  она  начинается  с  размера  по  умолчанию  и  печатет  каждый  компонент  друг  за  другом.  Если  компонент  может  расширяться,  то  он  расширяется  до  тех  пор  пока  не  будет  отпечатан  весь  текст.  Если  при  этом  произойдет  переход  на  другой  лист,  то  будет  произведена  печать  того,  что  уже  есть  на  нем  в  данный  момент.  При  трех  компонентах  мы  не  можем  печатать  все  из  них  в  одно  и  то  же  время.
 
 Вы  имеете  несколько  возможностей  обойти  это.  Вы  может  печатать  текст  строка  за  строкой,  вы  можете  использовать  три  секции  типа  subdetail  с  тремя  отдельными  компонентами.  Вы  можете  использовать  обработчик  OnNeedData  в  цикле  лоя  печати  каждой  строки.  Если  секция  меньше  по  высоте,  чем  размер  листа,  то  вы  можете  запустить  печать  в  два  прохода  и  запоминать  расчитанную  высоту  на  первом  проходе,  затем  использовать  ее  на  втором  проходе  для  установки  вручную  размера  на  втором  проходе.  Имеется  пример  на  нашем  сайте,  котрый  демонстрирует  код  для  подобной  печати,  имя  QR3LSD4.ZIP
 
 Другая  возможность  -  это  разместить  данные  на  отдельном  компоненте  RichEdit    и  разделять  данные  с  помощью  табуляции.

Q-18: Как поместить секцию subdetail в нужное место, после добавления ее в отчет?

 Порядок  секций  определяется  типом  секции.  свойством  master  и  порядком  создания  секций.  Если  свойство  master  пустое,  то  секция  помещается  в  конец  отчета.  Если  секция  subdetail  принадлежит  секции  detail,  то  свойство  master  должно  быть  назначено  отчету.  Если  секция  принадлежит  какой  нибудь  другой  секции,  то  следует  установить  свойство  master  данной  секции.

Q-19: Как поместить секцию subdetail над какой то другой секцией этого же типа?

 Вопрос:  Я  добавляю  новую  чекцию  типа  subdetail    в  отчет  где  уже  есть  такие  секции,  как  я  могу  разместить  эту  секцию  над  одной  из  уже  существующих?
 
 Если  вы  пытаетесь  добавить  секцию  перед  другой,  которая  уже  имеет  установленное  свойство  master,  то  безопасный  путь  это  прсмотр  форму  как  текст  и  вырезания  и  вставки  новой  секцие  в  место  перед  нужной.  Порядок  секций  определяется  типом  секции.  свойством  master  и  порядком  создания  секций

Q-20: Почему событие BeforePrint секции возникает раньше события BeforePrint секции PageHeader

 Когда  обрабатываеся  событие  BeforePrint  секции  GroupHeader  (или  Detail)  отчет  еще  находится  на  предыдущей  странице,  в  данный  момент  проверяется  может  ли  секция  поместиться  на  текущем  листе  или  нет,  Если  не  может  то  создается  новая  страница  и  генерируется  событие  BeforePrint  секции  PageHeader  

Q-21: Как печатать пустую строку после каждой пятой строки?

 Наиболее  простой  путь  это  добавить  секцию  childband  к  секции  detailband.  В  обработчика  события  BeforePrint  секции  ChildBand  устанавливать  переменную  PrintBand  после  печати  каждых  пяти  строк  отчета.
 
 Пример:
 
 procedure  TfrmBands.ChildBand1BeforePrint(Sender:  TQRCustomBand;
     var  PrintBand:  Boolean);
 begin
     PrintBand  :=  (TQuickRep(Sender.Parent).RecordNumber  mod  5)  =  0;
 end;

Q-22: Секция ColumnHeader не печатается если нет данных для отчета

 Вы  должны  иметь  хотя  бы  одну  строку  в  detail  

Q-23: Как я могу напечатать отчет с секцией Title выше секции PageHeader

 Печать  секций  фиксирована  и  вы  не  можете  печатать  Title  выше  секции  PageHeader.
 Можно  это  обойти  следующим  образом,  создайте  секцию  ChildBand  с  заголовком  страницы  а  информацию  Title  разместите  на  подлинной  секции  PageHeader,  затем  в  обработчике  события  OnPrint  секции  PageHeader  установите  свойство  PrintBand  в  false  когда  PageNumber  >  1

Q-24: Как я могут печатать секцию ColumnBands над секцией detail при наличии секции GroupBand?

 Секция  ColumnBands  всегда  печатается  сразу  за  секциями  Title  и  PageHeader.  Есть  несколько  путей  получить  желаемое.  Например  вы  можете  разместить  заголовки  в  секции    GroupBand  или  ChildBand  присоединенной  к  GroupBand.

Q-25: Как можно напечатать FooterBand только на последней странице отчета?

 Вместо  использования  секции  FooterBand  используйте  секцию  SummaryBand  и  установите  свойство  AlignToBottom  property.

Q-26: Как я могу обеспечить печать не расширяемого текста только на первой странице

 Как  я  могу  обеспечить  печать  не  расширяемого  текста  на  первой  странице,  если  моя  секцция  разделяется  на  две  страницы?
 
 Если  вы  имеете  в  одной  секции  расширяемы  и  не  расширяемый  текст,  то  позпотьтесь  о  том,  что  бы  не  расширяемый  текст  печатался  первым.  (правый  щелчок  мышкой  и  выбрать  пункт  'send  to  back')

Q-27: Как запретить секцию Detail, что бы я мог произвести только расчет без печати самой секции?

 Установите  PrintBand  в  false  в  обработчике  BeforePrint.  Это  запретит  печать,  но  расчет  будет  произведен.
 
 (QR3)  Примечание:  
 
 Данное  поведение  изменено  в  QuickReport  3.    Для  эмуляции  поведения  Quick  Report  2,  вместо  установки  PrintBand  в  false,  установите  высоту  секции  в  0

Q-28: Как добавить секцию ChildBand и поля на ней в runtime?

 Установить  свойство  HasChild  в  true.  Следующий  пример  создает  секцию  ChildBand  и  добавляет  компонент  секцию  ChildBand  на  ней.
 
     QRGroup1.HasChild  :=  true;
     with  TQRLabel(QRGRoup1.ChildBand.AddPrintable(TQRLabel))  do
     begin
         Left  :=  0;
         Top  :=  0;
         Caption  :=  'Hello  there';
     end;

Q-29: Можно ли удалить отдельные поля какой нибудь секции в run-time?

 Все  секции  наследники  от    TCustomPanel  и  вы  можете  использовать  свойство  ControlCount  в  цикле  для  прохода  по  всем  компонентам.
 
 Пример:
 
 with  PageHeaderBand1  do
     for  nIdx  :=  0  to  ControlCount  -1  do
         if  Controls[nIdx]  is  TQRLabel  then
             TQRLabel(Controls[nIdx]).Caption  :=  IntToStr(nIdx);
 

Q-30: Как я могу получить высоту секции с расширяемыми компонентами в runtime?

 Это  доступно  только  в  версии  3.0  

Q-31: Можно ли иметь две или более различных секций PageHeader в одном отчете?

 Вы  не  можете  иметь  несколько  секций  типа  PageHeader  в  отчете,  но  есть  несколько  путей  обойти  это.    Наиболее  простой  простой  путь  это  добавить  секцию  ChildBand  к  секции  PageHeader  и  разместить  на  ней  необходимые  компоненты.    Затем  использовать  обработчик  события  BeforePrint  и  решать  в  run  time  какую  из  секций  печатать.

Q-32: Где я могу найти barcode компонент для использования вместе с QuickReport?

 Мы  не  поставляем  barcode  компонент  с  нашим  генераторомl,  но  на  нащей  странице  загрузки  есть  ссылки  не  компаниии,  которые  производят  barcode  компоненты  для  QuickReport.

Q-33: Где я могу найти barcode шрифты для использования font that I can use with QuickReport?

 Есть  много  компаний,  которые  делают  barcode  шрифты,  вот  некоторые  из  них:
 
 CIA  (Bar  Codes),  Wythenshawe,  Manchester,  UK  -  http://ourworld.compuserve.com/homepages/CIA_UK
 Rivers  Edge,  Cedar  Park,  TX,  USA  -  http://www.riversedge.com
 Azalea,  Seattle,  WA,  USA  -  http://www.azalea.com
 
 

Q-34: Как я могу сделать MDI custom preview, который поддерживал бы CompositeReport?

 Такие  Previews  могут  быть  сделаны  в  версии  QuickReport  3.    
 На  нашей  странице  загрузки  есть  QR3  MDI  демо-пример.    

Q-35: Клавиша Save не работает для фильтров экспорта в preview для композитных отчетов

 Фильтры  экспорта  не  поддержины  для  композитных  отччетов.  Единственная  возможноть  это  генерировать  каждый  отчет  отдельно.

Q-36: Как печать каждый отчет в композитном отчете с новой страницы?

 Что  бы  печать  каждый  отчет  в  композитном  отчете  с  новой  страницы  вы  должны  иметь  
 TitleBand  и  в  обработчике  секции  события  BeforePrint  вызвать  метод  NewPage

Q-37: Две разные ориентации в одном композитном отчете

 В  одном  из  моих  композитном  отчете  есть  одновременно  отчет  с  ориентацией  Landscape  и  другой  Portrait.  Оба  отчета  печатаются  в  ориентацие  Portrait
 
 Вы  не  можете  смешивать  два  отчета  с  разной  ориентацией  в  одном  композитном  отчете.

Q-38: Как я могу сделать экспорт в EMF формат?

 Установите  свойство  Enhanced  компоненты  TQRWMFFilter  в  true  и  вместо  WMF  будет    создан  EMF  файл.

Q-39: Я теряю все мои QRCharts во время экспорта

 Для  WMF  фильтра  поддержан  только  экспорт  простых  текстовых  полей

Q-40: Как я могу сохранить отчет в .qrp файле без просмотра или печати?

 Вы  должны  предварительно  создать  отчет.  Затем  с  помощью  методда  qrprinter.save  можно  сохранить  его  в  файл.
 
 Пример:
 
         quickrep1.Prepare;
         quickrep1.qrprinter.Save('c:\report.qrp');
         quickrep1.qrprinter.Free;
         quickrep1.qrprinter  :=  nil;

Q-41: У меня пропадает десятичная точки при выполнении выражени x*15

 Результатом  умножение  числа  с  плавающей  запятой  на  целочисленное  является  целое.  Но  если  сменить  15  на  15.0  то  результат  будет  с  плавающей  запятой.

Q-42: При печати суммы групп значения продолжают наращиваться от группе к группе

 Вы  должны  установить  свойство  ResetAfterPrint  в  true  для  соответствующего  компонента  TQRExpr,  который  используется  в  GroupFooter.

Q-43: Как использовать функцию FORMATNUMERIC, в хелпе нет информации.

 Это  оболочка  вокруг  функии  FormatFloat.

Q-44: Как проверить значение QRExpr в runtime?

 Свойство    "Value"  компоненты  TQRExpr  является  типом  TQREvResult,  который  определен  в  модуле  qrprntr.pas.  Вы  можете  проверить  "Value.Kind"  для  определения  типа  результата.
 Следующая  таблица  показывает  как  определить  тип  результата  на  основании  значения  "Value.Kind"
         If  Value.Kind  =  resInt  значение  =  Value.IntResult
         If  Value.Kind  =  resDouble    значение  =  Value.DblResult
         If  Value.Kind  =  resString  значение  =  Value.StrResult  (string[255])
         If  Value.Kind  =  resBool  значение  =  Value.BooResult
         If  Value.Kind  =  resError  значение  =  error

Q-45: Какие типы данных разрешено использовать в TQRExpr?

 Разрешенные  типы  следующие:
 
 longint,  double,  string[255]  и  boolean.    
 Поля  Currency  как  double.    
 Поля  Date  и  time  как  строка.
 

Q-46: Некоторые линии видны на печати, но не видны в Preview

 Отчет  создается  в  TMetafile  перед  прсмотром.  В  зависимости  от  значения  коэффициента  маштабирования  (zoom),  TMetafile  может  не  показать  некоторые  линии.    Если  увеличить  коеффициент  то  строки  появятся.

Q-47: Как я могу на печатать подвал группы?

 Добавьте  TQRBand,  установите  его  тип  в  groupfooter  и  свяжите  с  rbGroupFooter.    Затем  вы  должны  связать  его  с  TQRGroup  секций  с  помощью  свойства  footerband.    Новая  секция  будет  печататься  по  окончанию  группы.

Q-48: В master/detail не печатаются detail записи

 Надо  проверить  следующие  вещи.
 Проверьте,  что  свойство  subdetail's  dataset  указывает  на  правильный  dataset.
 Проверьте,  что  dataset  секции  subdetail  связан  с  отчетом  (master).
 Для  TTables,  это  делается  через  свойства  MasterSource  и  MasterFields.  Для  TQuery  с  помощью  свойства  Params.    
 Также  проверьте  свойство  DisableControls  master  dataset.

Q-49: Как можно вставить QRsubdetail между двумя уже существющими subdetail секциями?

 QuickReport  использует  порядок  сохдания  секций  для  печати  в  runtime.   Вы  можете  сменить  этот  порядок  с  помощью  методов  SendToFront  и  SendToBack.

Q-50: Как я могу заставить работать функцию SUM() для subdetail?

 Проверьте,  что  свойство  Master  компоненты  QRExpr  установлено  на  SubDetail.

Q-51: Как я могу узнать ширину текста до печати?

 Объект  report  имеет  функции  TextWidth  и  TextHeight,  котрые  вы  модете  вызвать  в  событии  OnNeedData  event.    

Q-52: Если разница между отчетом расположенным на форме или сам по себе?

 Мы  нашли,  что  портирования  отчета  из  версии      в  версию  Дельфи  более  проблематично  если  отчет  не  используется  на  форме.  Кроме  того  расположение  отчета  на  форме  имеет  также  и    другие  преимущества,  вы  можете  использовать  событие  формы  Create/Destroy  для  выполнения  дополнительной  работы.

Q-53: Какие файлы надо поставлять совместно с QuickReport?

 Если  вы  не  используете  runtime  пакеты  (такие  как  qrpt40.bpl),  то  никаких.

Q-54: access violations при вызове preview несколько раз подряд.

 Это  известная  проблема  и  мы  работаем  над  ней.  Для  борьбы  можно  использовать  вызов  Application.ProcessMessages  между  каждым  Preview.    Это  позволяет  корректно  завершаться  перед  каждым  стартом.

Q-55: access violation при закрытии dataset в событии AfterPreview

 Вы  не  должны  закрывать  или  освобождать  dataset  отчета  в  этом  обработчике.  Вы  можете  делать  это  только  по  окончанию  вызова  Preview.

Q-56: Можно ли иметь обработчик OnClick для QRDBText, QRLabel или QRSubdetail?

 Данная  возможность  не  существует  в  QuickReport  3,  но  это  планируется  включить  в  QuickReport  5.

Q-57: Как я могу создать crosstab отчет?

 QuickReport  не  имеет  возможности  создавать  crosstab  (aka  pivot  table)  отчеты,  но  мы  имеем  примеры  на  нашей  странице  загрузки,  которые  демонстрируютдва  метода  создания  crosstab  отчетов.    Файл  crosstab.zip  содержит  пример  создания  отчета  с  помощью  массивов.  Файл  CUBE_RPT.ZIP  содержит  пример  создания  отчета  с  помощью  Decision  Cube.

Q-58: Как можно напечатать только текущую запись?

 Не  указывайте  DataSet  в  свойстве  отчета  и  установите  свойство  PrintIfEmpty  в  True.

Q-59: Почему QRImage не печатает icon файлы если свойство Stretch установлено в true?

 Свойство  Stretch  неприменимо  к  иконкам.  Это  документировано  в  справке  Delphi's  для  свойства  stretch  компоненты  TImage  (наследуется  QRImage)

Q-60: Не печатаются корректно компоненты shapes на секции, которая переходит на другую страницу.

 Правым  щелчком  мышки  по  QRShape  и  выбрать  пункт  print  to  back  что  бы  это  печаталось  первым

Q-61: Почему TQRShapes на экране тоньше, чем на печати

 Известная  проблема  изменение  толщины  компонент  Shape  между  preview  и  принтером.  Решение  сделать  свойство  Shape.Pen.Width  переменным  и  менять  значение  в  зависимости  печать  или  просмотр.  В  обработчие  отчета  BeforePrint,  вы  можете  проверять  занчение  свойства  QRPrinter.Destination.  Если  оно  установлено  в  qrdMetafile,  то  это  просмотр,  а  если  qrdPrinter,  то  это  печать.

Q-62: Проблемы с переходом от Дельфи 3 к Дельфи 5

 Я  потерял  много  времени  пытаясь  перенести  приложение  разработанное  для  Delphi  3  (QuickReport  Pro  3)  в  Delphi  5.  Проблем  в  том,  что  многие  QR  модули  выдают  ошибку  что  модуль  был  'compiled  with  a  different  version  of  .  .  .'.    Как  исправить?
 
 Мы  имеем  версию  3.0.5,  специально  откомпилированную  для  Delphi  5,  вы  не  можете  использовать  набор  файлов  из  Delphi  3.  Вы  также  жолжны  проверить,  что  файлы  проекта  не  размещены  в  некоторых  каталогах  Delphi  3.

Q-63: Как установить help файл?

 Есть  небольшая  freeware  программа  для  инсталляции  хелп  файлов  Delphi,  называется  'HelpLinker'.  HelpLinker  был  разработан  компанией  Scoutship  Software.  Вы  можете  загрузить  ее  с  http://www.scoutship.com/helplinker.htm

Q-64: Как узнать какие файлы установлены во время инсталляции QuickReport?

 Во  время  инсталляции  создается  файл  install.log  в  каталоге  delphi.  

Q-65: Как я могу установить последний патч к QuickReport?

 Мы  не  используем  патч  файлы.  Каждая  версия  это  полностью  законченый  набор  QuickReport  Pro.  Поэтому  нет  необходимости  применять  патчи  при  инсталляции  или  апгрейде.  Для  Delphi  4,  требуется  предварительно  установленый  Update  Pack  2  (или  новееr).  Для  инствлляции  QuickReport  3  Pro,  вы  должны  закрыть  Delphi  и  любые  приложения,  которые  используют  Delphi  runtime  пакеты.  Если  вы  используете  некоторые  пакеты  третьих  сторон,  которые  используют  QuickReport,  вы  должны  удалить  их  до  инсталляцииQuickReport  3  Pro.  После  инсталляции  QuickReport  3  Pro,  вы  можете  перестроить  эти  пакеты,  что  бы  они  могли  использовать  обновленные  файлы  QuickReport  (Ознакомьтесь  с  процедурами  инсталляции  этих  пакетов  по  сопутствующей  документации).  После  закрытия  Delphi,  просто  запустите  инсталляцию.  Будет  выдано  предупреждение  насчет  удаления  TeeChart  и  Decision  Cube  и  затем  будет  выполнена  инсталляция  QuickReport  3  Pro  package.

Q-66: Ошибка "Can't load package (the path & such)" A device attached to the system is not functioning"

 Удалите  файл  qrpt30.dpl  из  папки  delphi  3.0\bin  directory.

Q-67: Как определить, какая версия QuickReport установлена у меня?

 Если  щелкнуть  правой  кнопкой  мышки  по  QuickReport  компоненте,  то  первая  строка  Popup  меню  показывает  номер  версии.

Q-68: Можно ли установить ширину каждой колонки, если их на листе четыре

 Ширина  колонок  определяется  шириной  листа  деленое  на  количеством  колонок,  затем  вычитается  значение  свойства  report.page.columnwidth  value.  Так  что  вы  не  можете  устанавливать  ширину  напрямую.

Q-69: Как обновлять полоску Progress при использовании OnNeedData?

 Вы  можете  устанавливать  свойство  QRPrinter.Progress  в  обработчике  OnNeedData.  Значение  должно  быть  в  диапазоне  от  1  до  100.
 
 Пример
 
 QuickRep1.QRPrinter.Progress  :=  (Longint(CurrentIndex)  *  100)  div  MyTotalCount;

Q-70: Как использовать событие OnNeedData?

 После  определения  данного  обработчика,  он  будет  вызываться  для  определения  необходимости  печатать  новую  секцию  Detail.  Если  устанавливать  свойство  MoreData  в  TRUE  то  секция  будет  печататься.  И  при  установке  этого  свойства  в  FALSE  то  печать  отчета  будет  закончена.
 На  нашем  сайте  есть  пример  QR3DEMO,  который  демонстрирует  это.

Q-71: Как печатать отчет данные для которого поступают не от BDE table или query

 QuickReport  был  разработан  для  работы  с  BDE  источниками  данных,  но  вы  можете  использовать  для  печати  с  данными  от  других  источников,  через  OnNeedData  союытие.  
 На  нашем  сайте  есть  пример  QR3DEMO,  который  демонстрирует  это.

Q-72: Если Quickreport.Page.TopMargin меньше чем Top, то отчет не печатается

 Если  Quickreport.Page.TopMargin  меньше  чем  Top  у  Quickreport,  то  отчет  не  печатается.  Пользователю  выдается  сообщение,  что  Quickreport  is  out  of  printable  range
 
 Данная  ошибка  будет  исправлена  в  будущих  версиях

Q-73: Как определить размер бумаги для выбранного принтера?

 Следующий  пример  показывает  как  определить  размер  бумаги  по  умолчанию  для  выбранного  принтера.
 
 with  TQRPrinter.Create  do
 begin
     PrinterIndex  :=  QuickRep1.PrinterSettings.PrinterIndex;
     {  for  the  default  printer  use  the  following  line  }
     PrinterIndex  :=  -1;
     QuickRep1.Page.PaperSize  :=  Papersize;
     free;
 end;

Q-74: Как установить HelpContext для формы просмотра?

 Лучший  метод  это  создать  свою  собственную  форму  просмотра.  На  нашем  сайте  есть  пример.

Q-75: Печатается не вся страница, что можно сделать?

 У  некоторых  драйверов  принтера  есть  проблемы  с  печатью  полных  страниц.  Есть  несколько  установок,  которые  вы  можете  попробовать  сменить  для  решения  данной  проблемы.
 Перейдите  в  диалог  настроек  драйвера  принтера,  который  вы  используете  для  печати.  Затем  перейдите  на  страницу  "details  page"  и  выберите  "spool  settings".  Прверьте  "Spool  Data  Format".  если  вы  имеете  выбор  между  "EMF"  и  "RAW",  попробуйте  поменять.  "EMF"  требует  меньше  памяти,  чем  "RAW".
 Изменение  режима  графики  в  "HPGL/2"  или  "Vector"  на  "Raster"  также  может  помочь,  если  драйвер  имеет  такие  установки.
 Если  драйвер  имеет  свойство  "page  protect",  то  это  также  может  помочь.
 Часто  помогает  смена  разрешения  на  меньшее.
 Можно  также  поппробовать  "Disable  bi-directional  support  for  this  printer".  Если  свойство  "Enable  bi-directional  support  for  this  printer"  установлено  или  ваш  кабельне  расчитан  для  подобного  режима,  то  вы  можете  иметь  проблемы  при  печати.
 Другая  вещь,  на  которую  надо  обратить  внимание  -  это  настройки  LPT  порта  в  BIOS.    Если  порт  установлен  в  ECP,  то  попробовать  его  в  режиме  EPP  или  даже  standard.
 Другая  возможноть  может  состоять  в  том,  что  ваш  принтер  не  полностью  совместим  со  стандартом  IEEE  и  вам  требуется  его  замена.

Q-76: Пользователи не могут печатать в NT 4, но я как администратор могу

 Следующий  совет  был  взят  из  сайта  HP  страница  поддержки,  так  что  используйте  его  на  свой  риск.
 Windows  NT  4.0  имеет  возможность  управлять  доступом  к  десткому  диску  с  помощью  NTFS.  Данная  возможность  не  доступна,  если  в  качестве  файловой  системы  используется  FAT.  Когда  стандартные  разрешения  изменябтся  для  блокировки  системы,  пользователь  может  иметь  сложности  с  доступом  к  принтеру.  Обычно  системный  администратор  может  печатать  на  принтер  без  проблем.  но  когда  пользователь  входит  в  систему  и  пытается  печатать,  то  появляется  сообщение  об  ошибке.  Это  происходит  потому  что  пользователь  не  имеет  достаточных  прав  для  доступа  к  файлам  для  выполнения  операция  печати.  Системный  администратор  жолжет  изменить  права  пользователя.
 Ниже  описываются  необходимые  шаги  по  смене  системных  установок
 
 1.  Выбрать  Start,  Settings,  затем  Printers.
 2.  В  папке  Printers,  правый  щелчок  по  соответствующей  иконке  принтера
 3.  Проверить,  что  свойство  Default  printer  отмечено  и  выбрать  пункт  Properties.
 4.  Выбрать  закладку  Securities,  и  затем  Permissions  в  окне  Permissions.
 5.  Установить  следующие  права.
     a.  Administrators--Full  Control
     b.  CREATOR  OWNER--Manage  Documents
     c.  Everyone--Manage  Documents
     d.  Power  Users--Manage  Documents

Q-77: Печать на HP5P, только первая страница

 Если  при  установке  верхнего  отступа  в  4mm,  происходит  печать  только  первой  страницы,  то  можно  попробовать  сменить  драйвер  на  HP6,  это  происходит  потому,  что  родной  драйвер  не  в  состоянии  обрабатывать  такой  отступ.

Q-78: Заголовок отчета обрезается в Windows Print Manager.

 Это  ошибка  не  QuickReport,  а  ошибка  вVCL.  Если  вы  посмотрите  исходные  тексты,  то  увидите,  что  мы  определяем  ReportTitle  как  string.  Затем  это  передается  в  свойство  TQRPrinter.Title,  которое  также  определено  как  .  Свойство  TPrinter.Title  затем  используется  в  TPrinter.BeginDoc  где  оно  присваивается  CTitle,  которое  является  массивом  в  32  байта.

Q-79: Обрезание строк при печати в TEXT режиме

 Вопрос:  Мы  пробуем  печатать  отчет  в  текстовом  режиме  (TEXT  mode)  на  матричный  принтер.  При  использовании  дравера  "Generic/Text  Only  printer"  это  работает,  но  печатает  только  первые  80  символов  каждой  строки.  Как  можно  печатать  все  символы?
 
 Это  нормальное  поведение  для  "Generic/Text  Only  printer  driver".  он  обрезает  символы  по  ширине  строки.  Можно  попробовать  указать  использование  бумаги  более  широкого  размера,  например  Ledger,  возможно  тогда  удастся  напечатать  все  символы  строки.

Q-80: Как предотвратить выброс бумаги при печати листа или по окончанию задания?

 Так  как  используется  печать  через  драйвер  печати  Windows  (TPrinter  иd  TQRPrinter),  то  отсутствует  возможность  запретить  выброс  бумаги  по  окнчанию  печати  листа  или  задания.  Данное  поведение  было  сделано  MS,  по  вполне  хорошим  причинам.  Система  должна  обеспечивать  печать  паралельных  заданий  и  поэтому  каждое  задание  начинает  печать  на  новой  странице.

Q-81: Почему в просмотре очереди печати я не вижу заголовок задания?

 А  вы  назначили  свойство  ReportTitle  отчета?    Это  свойство  используется  для  передачи  заголовка  в  задание  на  печать.

Q-82: У меня установлен шрифтArial, а печатается шрифтом Courier

 Ghjdthm  cdjqcndj  Font.Pitch.  Если  вы  выбрали  шрифт  Arial,  а  свойство  установлено  в  fpFixed,  то  Windows  пытается  подставить  наиболее  подходящий  шрифт.

Q-83: Печатается только первая страница, хотя в просмотре все страницы

 Проверьте  свойства  PrinterSettings.FirstPage  и  PrinterSettings.LastPage,  убедитесь,  что  они  установлены  в  0.  При  печати  дмапазона  страниц  из  просмотра  во  время  design  time  эти  два  поля  могут  быть  установлены  в  те  значения  которые  вы  выбрали  в  диалоге  установок  принтера.
 
 От  А.П.  -  препаршивейшая  ошибка,  как  то  пришлось  потратить  много  времени  на  ее  поиск,  а  все  дело  оказалось  в  том  что  диалог  печати  меняет  эти  свойства  в  отчете,  попробуй  догадайся.  :-)

Q-84: Как печатать несколько копий отчета, не генерируя его снова и снова?

 Вы  должны  установить  свойство  PrinterSettings.Copies  в  нужное  значение.  Следует  заметить,  что  не  все  принтеры  поддерживают  данное  свойство.
 
 Другим  методом  получения  нескольких  копий  отчета  является  использование  метода  prepare.
 
 Вместо:
 
     with  TfrmQR.Create(Application)  do
     begin
         QuickRep1.Print;
         free;
     end;
 
 Делайте  так:
 
     with  TfrmQR.Create(Application)  do
     begin
         QuickRep1.Prepare;
         QuickRep1.QRPrinter.Print;    {  print  first  copy  }
         QuickRep1.QRPrinter.Print;    {  print  second  copy  }
         QuickRep1.QRPrinter.Free;
         QuickRep1.QRPrinter  :=  nil;
         free;
     end;
 
 Данный  метод  генерирует  отчет  во  внутренний  metafile  и  затем  дважды  посылает  его  на  принтер.

Q-85: Ошибка printer overrun error при печати на лазерный принтер

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

Q-86: При печати на лазерном принтере некоторые секция печатаются черными

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

Q-87: Что такое TQRLoopBand

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

Q-88: Мои пользователи не видят кнопок на тулбаре во время просмотра

 Какая  у  вас  версия  comctl32.dll?  Preview  использует  TToolbar  и  если  он  не  показывает  рисунки  из  imagelist,  то  это  означает,  что  у  вас  старая  верси.  TToolbar  был  откомпилирован  для  версии  4.72.  У  вас  есть  несколько  возможностей.  Вы  можете  обновить  comctl32.dll,  иои  Вы  можете  перекомпилировать  QR  со  старой  версией  comctl32.dll  (не  рекомендуется),  модифицируйте  стандартный  диалог  для  просмотра,  что  бы  он  не  использовал  TToolbar,  или  используйте  свой  собственный  диалог  для  просмотра,  который  также  должен  не  использовать  TToolbarl.  Мы  имеем  пример  построения  собственного  диалога  для  просмотра,  который  вы  можете  загрузить  с  нашего  спйта,  в  QR3  Вы  можете  сменить  просмотр  на  глобальной  основе.  На  нашей  странице  загрузки  также  есть  пример  MDI  демо,  котрый  показывает  как  это  сделать.
 Delphi  4  требется  (и  инсталируется  версия  4.72)    Вы  можете  загрузить  ее  напрямую  с  микрософтовского  сайта,  URL  следующий  http://msdn.microsoft.com/developer/downloads/files/40comupd.htm.  Если  Вы  получите  при  этом  сообщение  что  ссылка  недействительна,  то  Вы  можете  загрузить  ее  с  ftp://ftp.microsoft.com/softlib/mslfiles/40comupd.exe
 Если  Вы  используете  NT  4,  проверьте,  что  Вы  уже  установили  SP  4  или  старше,  прежде  чем  инсталлировать.

Q-89: Ошибка "Undeclared identifier TQRDetailLink"

 Класс  TQRDetailLink  это  объект  из  QuickReport.  QuickReport  2  имел  частичную  поддержку  данного  контрола  и  это  интрепритировалось  как  синоним  TQRSubDetail.  QuickReport  3  больше  не  имеет  такой  поддержки.  Вы  можете  сменить  TQRDetailLink  на  TQRSubDetail,  и  ваш  отчет  ьудет  вести  себя  подобно  отчету  в  QR2.  Компонент  TQRDBCalc  из  QR1  также  будет  иметь  подобную  ошибку,  его  можно  заменить  компонентом  TQRExpr.

Q-90: Ошибка "Undeclared identifier; 'TQREvaluator'"

 Мы  переместили  классы  Expression  в  новый  модуль  -  qrexpr.  Вы  должны  добавить  этот  модуль  в  Uses  и  перекомпилировать  отчет.

Q-91: Ошибка "can't find the class "TQREvElementFunction"

 Добавьте  qrexpr  в  uses.

Q-92: Не компилируется ReportForm.ExportToFilter

 Не  компилируется  ReportForm.ExportToFilter(TQRHTMLExportFilter.Create(AttachmentFile));
 
 Мы  сменили  имя.  Следующий  код  должен  работать
 
 ReportForm.ExportToFilter(TQRHTMLDocumentFilter.Create('c:\report.htm'));

Q-93: Что такое TQuickAbstractRep?

 Это  наследник  TCustomQuickRep  базовый  класс,  который  не  использует  TDataset.  Если  ваше  приложение  не  использует  базы  данных,  то  это  позволит  уменьшить  назмер  кода.

Q-94: Почему события использую TCustomQuickRep вместо TQuickRep?

 Это  базовый  класс  от  которого  наследуются  остальные.  Данное  изменение  сделано  для  того  сто  бы  упростить  использование  различных  компонентQuickReport.

Q-95: Куда пропало OnGenerateToPrinter?

 Данная  возможность  еще  не  закончена  и  поэтому  запрещена  до  момента  исправления.

Q-96: Что за секция TQRStringsBand?

 Эта  секция  имеет  свойство  items  для  состроения  списка  строк.  Ее  имя  появляется  в  построителе  выражений  и  может  быть  назначено  компонете  TQRExpr.  При  печати  секция  печатается  столько  раз,  сколько  есть  строк  в  свойстве  items.

Q-97: Как использовать фильтры экспорта?

 Просто  киньте  их  на  форму  в  вашем  проекте  и  Вы  увидите  их  в  диалоге  просмотра.

Q-98: Что за свойство 'LinkBand'?

 Это  свойство  позволяет  связать  две  секции,  что  бы  они  не  разрывались  при  переносе  на  другой  лист.  Следующая  секция  так  же  может  привязать  к  себе  третью  и  так  далее.  Это  позволяет  иметь  серию  секций  на  одном  листе  без  переноса  на  другой.  На  нашем  сайте  на  странице  зан=грузки  есть  демонстрационный  проект  QR3LSD4.ZIP,  котрый  показывает  как  связать  несколько  секций.

Q-99: Как отпечатаь текстовый файл в QR3?

 Qr3  имеет  несколько  функций  для  облегчения  данной  задачи.
 
 #1  Создайте  отчет  с  использованием  TQuickAbstractRep  вместо  TQuickRep.  Компонет  TQuickAbstractRep  не  использует  не  использует  компонент  доступа  к  базам  данных  и  позволяет  уменьшить  размер  исполняемого  файла.
 
 #2  Добавьте  компонент  TQRStringsBand  в  отчет.  Это  секция  имеет  свойство  items  для  построения  списка  строк.
 
 #3  Добавьте  компонент  TQRExpr  на  секцию.  Установите  следующие  свойства:
     Autosize  -  False
     AutoStretch  -  True
     Expression  -  с  именем  секции  (например  'QRStringsBand1')
     Width  -    ширина  секции  (модно  установить  в  runtime)
 
 #4  Перед  вызовом  Print  или  Preview,  загрузите  текстовый  файл  в  свойство  items  компоненты  TQRStringsBand  например  так:
     QRStringsBand1.Items.LoadFromFile(SomeFileName)
 
 #5  Вызовите  метод  preview  или  print.

Q-100: Как скопровать текст из TRichEdit в QuickReport RichText

 Q.    How  can  I  copy  the  text  from  a  TRichEdit  component  to  the  QuickReport  RichText  component?
 A.    You  would  use  the  lines  property  to  copy  the  data.    Example:  QRRichText1.Lines  :=  frm.RichEdit1.Lines;
 ------------------

Q-101: access violation при использовании в subquery

 Эта  проблема  появляется  когда  TQuery's  не  имеет  persistent  полей.  Добавление  постоянных  полей  устраняет  ошибку.  Если  Вы  не  можете  делать  это,  то  вставьте  в  TQRDBRichText.Print  метод  в  qrctrls.pas:
 
 procedure  TQRDBRichText.Print(OfsX,  OfsY  :  integer);
 begin
    Field  :=  FDataSet.FindField(FDataField);   {  Add  this  line  }
    if  assigned(Field)  then
      if  (Field  is  TMemoField)  or
         (Field  is  TBlobField)  then
        Lines.Assign(Field);
    inherited  Print(OfsX,OfsY);
 end;

Q-102: Мое RTF поле не переносится на другую страницу.

 У  Микрософта  имеется  много  ошибок  в  реализации  RichTextl.  Насколько  возможно  мы  постарались  их  обойти.  В  данный  момент  мы  еще  работает  над  данной  проблемой.

Q-103: В моем RTF поле не печатается последняя строка

 Это  известная  проблема  с  MS  RichText.  Имеются  два  метода  для  преодоления.  Первый  это  добавить  одну  пустую  строку.  Второй  -  это  в  событии  OnGenerateToPrint  установить  qrprinter  в  nil.    Это  заставит  отчет  перерисоваться  повторно.
 Пример:
 
 procedure  Tfrmqr.QuickRep1BeforePrint(Sender:  TQuickRep;  var  PrintReport:  boolean);
 begin
     QuickRep1.qrprinter.OnGenerateToPrinter  :=  nil;
 end;

Q-104: QRDBRichText не расширяется корректно

 Если  в  дизайн  тайм  высота  QRDBRichText  больше  чем  высота  других  полей,  то  возможно  неверное  расширение.  Если  вы  установите  высоту  в  малое  щначение,  например  в  10  и  разрешите  autostretch,  то  возможно  это  поможет.

Q-105: QRRichText/QRDBRichTex не показывают и не печатают встроенные bitmap образы.

 TRichEdit  и  TDBRichEdit  не  поддерживают  встроеные  объекты  и  поскольку  наши  RTF  компоненты  основаны  на  Borland  RTF  компонентах,  то  тоже  ограничение  распространяются  и  на  нас.
 Мы  имеем  несколько  компонент  для  QuickReport  3,  которые  основаны  на  RichEdit  2  копнонентах  третьих  сторон.  Смотрите  примечание  об  QR  3  на  нашем  сайте,  http://www.qusoft.com/relnotesqr3.htm  

Q-106: Я использую QRPrinter объект и не могу сохранить в текстовый файл

 Сохранение  в  текстовый  файл  возможно  с  помощью  фильтров  экспорта  и  работает  только  для  отчетов.  При  использовании  объекта  QRPrinter  напрямую,  единственная  возможность  это  сохранение  только  в  .QRP  файл.

Q-107: Какой формат используется при сохранении и выборе клавиши save в просмотре?

 При  сохранении  используется  подмножество  формата  metafile,  который  пригоден  только  для  QuickReport.

Q-108: Нам нужен метод для установки East-European charset по умолчанию для всех компонент отчета.

 Установите  свойство  отчета  Font.Charset  в  ту  кодировку  которую  вы  желаете  использовать  и  свойство  ParentFont  всех  компонент  в  TRUE  всех  секций,  до  помещения  на  них  компонент.

Q-109: Измение размера шрифта отражается на высоту компонента только в сторону увеличения.

 Вопрос:  Измение  размера  шрифта  отражается  на  высоту  компонента  только  в  сторону  увеличения.  При  изменении  в  меньшую  сторону  высота  не  корректируется.  Почему  и  как  получить  нужное  поведение?
 
 Мы  ловим  сообщение  CM_FONTCHANGED  для  TQRCustomLabel  компонент.  Когда  Вы  изменяете  размер  шрифта,  то  вызывается  процедура  CMFontChanged.  Эта  процедура  сообщает  компоненту  переформатировать  текст  и  изменить  размер  если  необходимо.  Когда  Вы  изменяете  размер  в  меньшую  сторону  высота  компонента  не  изменяется.  Для  принуждения  компонента  к  изменениб  высоты  Вы  должны  установить  высоту  компонента  в  0  до  смены  размра  шрифта.

Q-110: Событие OnPrint не вызывается для пустых TQRDBText полей

 Это  ограничение  компоненты  TQRDBText.  В  место  TQRDBText  используйте  компонент  TQRExpr  и  в  обработчике  OnPrint  проверяйте  поле  с  помощью  свойства  IsNull.

Q-111: Мой компонент печатает многострочный текст как одну строку ограниченную правой границей.

 Проверьте,  что  вы  установили  autosize  в  FALSE  и  AutoStretch  и  WordWrap  в  TRUE.

Q-112: событие OnPrint никогда не вызывается для моего TQRLabel компонента.

 Не  является  ли  свойство  caption  пустым?  Код  проверяет  свойство  caption  и  если  оно  ничего  не  содержит,  то  событие  OnPrint  не  генерируется.  Если  вам  обязательно  нужно  данное  событие,  то  Вы  обязаны  присвоить  какое  либо  значение  свойству  Caption.

Q-113: Мой RTF текст выглядит иначе, чем в MS Word

 QuickReport's  RichText  использует  Delphs  RichEdit  компонент,  котрый  обернут  вокруг  Microsoft  RichEdit.  И  возможно,  что  данный  орган  не  в  состоянии  обработать  ваш  файл.  Почти  все  проблемы  в  RTF  связаны  с  ошибками  в  Микрософтовском  RichEdit.  

Q-114: Я не могу заставить работать свойство Mask с моими телефонными адресам (это текстовое поле).

 Свойство  Mask  применимо  только  к  цифровым  полям  и  игнорируется  для  текстовых  полей.  Используйте  обработчик  события  OnPrint  и  форматируйте  поле  нужным  образом.
 Пример:
 
 procedure  TfrmReport.QRDBTextPhonePrint(sender:  TObject;  var  Value:  string);
 begin
     Value  :=  '('  +  copy(Value,1,3)  +  ')  '  +  copy(Value,4,3)  +  '-'  +  copy(Value,7,4);
 end;

Q-115: Если отчет содержит путстые поля, то они не включаются в колонки, что нарушает форматирование.

 Используйте  QRExpr  компонент,  который  позволяет  иметь  пустые  поля  и  в  выражении  используйте  функцию  IF()  для  включения  пробелов  в  нулевые  поля,  как  показано  в  следующем  примере.
 
 IF(tbSample.Extra<>'',  tbSample.Extra,  '  ')

Q-116: Я не могу заставить работать свойство Mask для моих цифр.

 Проверьте,  что  Вы  используете  именно  цифровые  поля,  свойство  mask  игнорируется  для  текстовых  полей.

Q-117: Есть ли свойство для QRDBText при перенсе на новую страницу, не разделять поле"

 Мы  не  имеем  поддежки  висячих  строк  (Window/orphan(,  но  Вы  можете  сделать  это  с  минимумом  кода.
 Имеется  функция,  называемая  AvailableSpace,  которая  возвращает  количество  оставшего  на  странице  места.  Вы  можете  сравнивать  его  со  значением  Size.Length  секции  и  вызывать  метод  NewPage  если  места  недостаточно  для  размещения  текста.  AvailableSpace  расположена  в  защищенной  секции  (protected)  так,  что  Вы  не  можете  вызвать  функцию  напрямую.  Если  используете  хак,  то  Вы  сможете  добраться  до  функции  с  помощью  приведения.  Во  первых  добавьте    следующее  объявление  в  декларацию  формы.
 
     TMyQuickRep  =  class(TQuickRep)
     end;
 
 Для  использования  напишите  следующий  текст.
 
 procedure  Tfrm.DetailBand1BeforePrint(Sender:  TQRCustomBand;  var  PrintBand:  Boolean);
 begin
     if  TMyQuickRep(QuickRep1).AvailableSpace  >=  round(Sender.Size.Length)  then
         Sender.ParentReport.NewColumn;
 end;

Q-118: Как насчет "LeftAndRightJustify"

 Это  не  является  частью  QuickReport.  В  будущих  версиях  мы  сделаем  процедуру  FormatLines  виртуальной,  что  позволит  сделать  это  с  помощью  других  компонент.

Q-119: Как контролировать межстрочный интервал?

 Мы  не  поддерживем  это.  В  будущих  версиях  не  исключена  такая  возможность,  но  это  пока  не  входит  в  наш  список  неотложных  задач.

Q-120: Я пытаюсь использовать маску 999\-999\-9999 для телефонных номеров, но результат остается 5144559400

 Для  форматирования  editmask  используется  компонент  TMaskedEdit.  Компонент  QRExpr  использует  для  форматирования  FormatFloat()  и  FormatDateTime  функции.  Пожалуйста  проверь  документацию  по  этим  функциям.  Для  форматирования  номеров  по  американскому  стандарту  маска    должна  быть  следующей  '(000)  000-000'

Q-121: Я имею два компонента со свойством AutoStretch на одной секции, но это не работает.

 Более  одного  расширяемого  компонента  на  секции  не  поддерживается,  это  ограничение  снято  в  версии  3.0.

Q-122: Если я использую символы табуляции (ctrl-tab в редакторе) для моих TQrMemo полей, то отчет печатет и

 Символы  табуляции  не  поддержаны  в  TQRMemo,  TQRLabel,  TQRExpr,  TQRDBtext  конмпонентах.  Единственный  компонент,  который  может  корректно  их  отражать,  это  RichText.

Q-123: AutoSize

 Q.    Is  it  possible  to  change  the  Autosize  property  of  the  QRImage  and  the  Autostretch  property  of  the  QRRichtext  at  runtime  ?
 A.    Yes,  you  can  change  most  of  the  properties  at  runtime  in  the  BeforePrint  and  AfterPrint  events  of  the  report  and  of  the  band  that  the  controls  are  on.
 ------------------

Q-124: Как определить установленные принтеры?

 uses
     printers;
 
 with  TPrinter.Create  do
 begin
     Memo1.Lines.AddStrings(Printers);
     Free;
 end;

Q-125: Как pаспечать досовский текстовый файл с упpавляющими кодами?

 uses
       Printers;
 
 {  declare  the  "PASSTHROUGH"  structure  }
 type  TPrnBuffRec  =  record
     BuffLength  :  word;
     Buffer  :  array  [0..255]  of  char;
 end;
 
 
 procedure  TForm1.Button1Click(Sender:  TObject);
 var
     Buff  :  TPrnBuffRec;
     TestInt  :  integer;
     s  :  string;
 begin
 
 {  Test  to  see  if  the  "PASSTHROUGH"  escape  is  supported  }
     TestInt  :=  PASSTHROUGH;
     if  Escape(Printer.Handle,
                         QUERYESCSUPPORT,
                         sizeof(TestInt),
                         @TestInt,
                         nil)  >  0  then  begin
 
     {  Start  the  printout  }
         Printer.BeginDoc;
 
     {  Make  a  string  to  passthrough  }
         s  :=  #13#10'  A  Test  String  ';
 
     {  Copy  the  string  to  the  buffer  }
         StrPCopy(Buff.Buffer,  s);
 
     {  Set  the  buffer  length  }
         Buff.BuffLength  :=  StrLen(Buff.Buffer);
 
     {  Make  the  escape}
         Escape(Printer.Canvas.Handle,
                       PASSTHROUGH,
                       0,
                       @Buff,
                       nil);
 
     {  End  the  printout  }
         Printer.EndDoc;
     end;
 end;

I-126: Информация о программе

 FAQ  создан  с  помощью  FAQ  Maker  ver.  1.1
 от  Анатолия  Подгорецкого
 
 Доступен  на  http:/www.podgoretsky.com  или  http://podgoretsky.pri.ee
 
 Альтернативный  источник  FAQ  центр  ,  более  быстрый  хостинг,    хранятся  всевозможные  FAQ,  не  только  из  иерархии  FIDO7.RU.DELPHI.*