В компоненте Crossview переменные не работают

отредактировано 20:28 Раздел: FastReport 4.0
Помогите, пожалуйста! В компоненте CrossView переменные не работают.
Причем, не выводится ни системная переменная, ни значение поля, ни собственные параметры!
В обработку события OnGetValue даже не попадаю при отладке, когда переменные в заголовках CrossView!

Как мне динамические значения в заголовки CrossView подставлять?
Заголовки требуется собственными переменными заполнять, которые начинаются на [LANG_

fr_crossview.png

Комментарии

  • отредактировано 20:28
    Если так все и должно быть, подскажите хотя бы, пожалуйста,
    как из события OnEndDoc достучаться до заголовков CrossView и заменить переменные на нужные значения?!
  • отредактировано 20:28
    А в каком событии компонента TfrxReport в Delphi мне написать этот код,
    чтобы при предварительном просмотре уже было нужное значение?

    TfrxCrossView(frxReport1.FindObject('Cross1')).CornerMemos[3].Text:='123456';
  • отредактировано 20:28
    Вот процедура, которая пытается заменить переменные в DBCrossView:
    procedure TfmChildRep.CrossViewLang;
    var
      i, ii, iPos1, iPos2: integer;
      sPar: string;
    begin
      if frxReport.ComponentCount > 0 then
        for i := 0 to frxReport.ComponentCount - 1 do
          if frxReport.Components[i].ClassType = TfrxDBCrossView then
            with frxReport.Components[i] as TfrxDBCrossView do
            begin
              if Corner <> nil then
                if Corner.Count > 0 then
                  for ii := 0 to Corner.Count - 1 do
                  begin
                    sPar := CornerMemos[ii].Text;
                    iPos1 := Pos('[', sPar);
                    iPos2 := Pos(']', sPar);
                    if (iPos1 > 0) and (iPos2 > 0) and (iPos2 > iPos1) then
                    begin
                      sPar := Copy(sPar, iPos1 + 1, iPos2 - iPos1 - 1);
                      if fmMain.IsRepParamLang(sPar) then
                        TfrxMemoView(CornerMemos[ii]).Text := GetParValueLang(sPar); // <---- Здесь Access Violation. Свойство Text в дизайнере отчета не вижу!
                    end;
                  end;
            end;
    end;
    

    Вызываю процедуру в Delphi в событии OnEndDoc для компонента TfrxReport
    Access Violation вылетает на строке где пробую заменить свойство Text для TfrxMemoView.
    Посмотрел в дизайнере отчета - свойства Text не видно вообще... Как можно заменить?
  • gpigpi
    отредактировано 20:28
    Менять нужно перед началом формирования отчёта (ShowReport, PrepareReport)
    При вызове OnEndDoc отчёт уже полностью сформирован. Тогда нужно менять TfrxReport.PreviewPages
  • отредактировано 20:28
    Если вызываю свою процедуру перед ShowReport, тогда TfrxDBCrossView.Corner = NIL ((((
  • отредактировано 20:28
    А если пойти во второму пути и менять PreviewPages, как обойти циклом компоненты на странице просмотра отчета, чтобы найти CrossView?
    У меня frxReport.PreviewPages.Page.ComponentCount = 0 в событии OnEndDoc
  • gpigpi
    отредактировано 20:28
    написал:
    Если вызываю свою процедуру перед ShowReport, тогда TfrxDBCrossView.Corner = NIL ((((
    Используйте
    for j := 0 to 3 + cross.RowLevels - 1 do
    написал:
    А если пойти во второму пути и менять PreviewPages, как обойти циклом компоненты на странице просмотра отчета, чтобы найти CrossView?
    В превью кросса нет. Есть набор TfrxMemoVew
  • отредактировано September 2013
    Ураааа! Спасибо большое!!! Получилось!

    Почему в цикле по CornerMemos[] прибавляется 3 да еще и к RowLevels?
         for j := 0 to 3 + cross.RowLevels - 1 do
            sPar := cross.CornerMemos[j].Text;
    

    Как мне также заменить итоги:
         // Заголовки
         for j := 0 to 3 + cross.RowLevels - 1 do
           cross.CornerMemos[j].Text := ReplaceCrossParam(cross.CornerMemos[j].Text);
    
         // Итоги строки
         for j := 0 to ??? do // <--------------
           cross.RowTotalMemos[j].Text := ReplaceCrossParam(cross.RowTotalMemos[j].Text);
    
         // Итоги колонки
         for j := 0 to ??? - 1 do // <--------------
           cross.ColumnTotalMemos[j].Text := ReplaceCrossParam(cross.ColumnTotalMemos[j].Text);
    
  • отредактировано 20:28
    Спасибо большое! Все получилось!
    Вопрос можно закрывать.

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

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