Предложение поправки в FAQ

отредактировано 15:32 Раздел: FastReport 3.0
Доброе время суток!!!

У меня возник вопрос : "Отчет выглядит нормально (по русски). На принтер же выводятся иероглифы! "
Нашёл ответы в FAQ, даже три способы решения, но не один не сработал (№3 не пробовал, так как "...это не наш метод..."). В конце концов всё получилось, но как ? ......
Способ №1.
В свойствах Memo открываем ветку "Font" и в поле "Charset" меняем значение "DEFAULT_CHARSET" на "RUSSIAN_CHARSET". И так каждому Memo.
Долго, но работает.
Способ №2. (родился из Способа №1 и способа №2 в нынешнем FAQ)
procedure TForm1.frxReport1BeforePrint(
  Sender: TfrxReportComponent);
var
  i: Integer;
begin
  for i:=0 to frxReport1.ComponentCount - 1 do
  begin
    if frxReport1.Components[i].ClassType = TfrxMemoView then
    begin
      (frxReport1.Components[i] as TfrxMemoView).Font.Charset:=RUSSIAN_CHARSET;
    end;
  end;
end;

Комментарии

  • LexLex
    отредактировано 15:32
    лучше так
     if frxReport1.Components[i] is TfrxMemoView then
    
  • отредактировано 15:32
    Ок
  • отредактировано 15:32
    Я тут вот что подумал :
    событие BeforePrint вызывается для каждого элемента выводимого на печать. А это значит что каждый раз ComponentCount будет расти и процедура быдет обрабатывать уже обработанные memo + ещё одно. В процедуру передаётся Sender и если написать :
    if Sender is TFrxMemoView then
    begin
      (Sender as TFrxMemoView).Font.Charset:=RUSSIAN_CHARSET;
    end;
    
    , то избавляемся от ComponentCount и получаем "универсальность" процедуры, т.к. нет ссылок на имена.
  • отредактировано 15:32
    Собственно так и было!
    karachun, почему не работало?
  • отредактировано 15:32
    Да, да я понял!!!!!

    было :
    TFrxReport.OnBeforePrint(Sender):
       If Sender is TFrxMemoView then             
          TFrMemoView(Sender).Font.Charser=RUSSIAN_CHARSET
    
    я предложил
    if Sender is TFrxMemoView then
      begin
        (Sender as TFrxMemoView).Font.Charset:=RUSSIAN_CHARSET;
      end;
    

    всё дело было в название ClassType, а именно у Вас TFrMemoView а у меня TFr<span style='color:blue'>x</span>MemoView
    Заисключением этого вопрос снимаю.
  • отредактировано 15:32
    karachun написал:
    Способ №1.
    В свойствах Memo открываем ветку "Font" и в поле "Charset" меняем значение "DEFAULT_CHARSET" на "RUSSIAN_CHARSET". И так каждому Memo.
    Долго, но работает.

    [/code]
    Есть такой мастер поиск и замена он делает все что тебе нужно..
    смотри он раньше с фибами шел.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.