Вопросы по пользовательскому интерфейсу

отредактировано 00:26 Раздел: FastReport 3.0
Всем доброго дня!
После перехода с FR2 на FR3 пользователи обратили внимание (я сам не заметил!!), что в дизайнере отчётов исчез русский язык! Я специально переустановил FR3 (может, я где-то не заметил вопроса о языке?), но нигде вопроса о языке интерфейса нет, запрашивается только язык setup'а. Так как же вернуть пользователям родной русский язык? И в хелпе про это ничего нет..
И второе: куда-то исчезли пользовательские Progress-сообщения. В Report'е стоит ShowProgress=True, но при этом при построении отчёта нет ничего (в FR2 было 'Формируется страница...' ) - при построении отчёта страниц в 400-500 на не очень быстрой машине создаётся полная иллюзия зависания программы, а при печати отчёта Progress-формочка есть, но опять-же на аглицком!
И где искать концы?

Комментарии

  • gpigpi
    отредактировано March 2006
    По поводу локализации - воспользуйтесь recompile.exe или в папке RES возьмите ресурсы и следуйте инструкции из install_res.txt
    Показ прогресса - TrfxReport.OldStyleProgress=True
  • отредактировано 00:26
    Спасибо!

    И ещё маленький вопросик: в FR2, чтобы отредактировать нужную страницу готового отчёта без загрузки всего отчёта в Preview, была замечательная функция EditPreparedReport ( <номер_страницы> ). Не что её заменили в FR3?
  • gpigpi
    отредактировано 00:26
    procedure EditPage(Report: TfrxReport; PageNo: Integer);
    var r: TfrxReport;
        p: TfrxReportPage;
        SourcePage: TfrxPage;
    begin
         SourcePage := Report.PreviewPages.Page[PageNo-1];
         r := TfrxReport.Create(nil);
         p := TfrxReportPage.Create(r);
         try
           p.AssignAll(SourcePage);
           if r.DesignPreviewPage then
             Report.PreviewPages.ModifyPage(PageNo-1, TfrxReportPage(r.Pages[0]));
         finally
           p.Free;
           r.Free;
         end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         frxReport1.PrepareReport();
         EditPage(frxReport1, 2);
         frxReport1.ShowPreparedReport;
    end;
    
  • отредактировано 00:26
    Спасибо!
  • отредактировано 00:26
    Чего-то я рано обрадовался...
    код из предложенного примера
    p.AssignAll ( SourcePage ) ;
    выдаёт exception 'Повторяющееся имя'!
    Я посмотрел SourcePage - и действительно - все строки данных отчёта, а у меня в простейшем случае в MasterData Band'е стоит только одна мемка (Memo3), имеют имя 'Memo3'! Таким образом, на странице действительно столько Memo3, сколько на ней строк данных. И AssignAll ругается справедливо.

    Да и после ругани r.DesignPreviewPage открывает пустую страницу, на ней нет даже мемок заголовка страницы (которые не дублируются) и первого вхождения Memo3, которое, по идее, тоже должно было попасть в 'p'.

    Вот такие пироги...
  • gpigpi
    отредактировано 00:26
    Это я пытался уменьшить размер кода, а пробовал на двухстраничном отчёте без бэндов, по одному мемо на страницу. Зря я выкинул RemoveBands. Тогда делайте, как и в frxPreview.pas
    procedure EditPage(Report: TfrxReport; PageNo: Integer);
    var r: TfrxReport;
        p: TfrxReportPage;
        SourcePage: TfrxPage;
     procedure RemoveBands;
      var
        i: Integer;
        l: TList;
        c: TfrxComponent;
      begin
        l := p.AllObjects;
    
        for i := 0 to l.Count - 1 do
        begin
          c := l[i];
          if c is TfrxView then
          begin
            TfrxView(c).DataField := '';
            TfrxView(c).DataSet := nil;
          end;
    
          if c.Parent <> p then
          begin
            c.Left := c.AbsLeft;
            c.Top := c.AbsTop;
            c.ParentFont := False;
            c.Parent := p;
            if (c is TfrxView) and (TfrxView(c).Align in [baBottom, baClient]) then
              TfrxView(c).Align := baNone;
          end;
        end;
    
        for i := 0 to l.Count - 1 do
        begin
          c := l[i];
          if c is TfrxBand then
            c.Free;
        end;
      end;
    begin
        SourcePage := Report.PreviewPages.Page[PageNo-1];
        p := TfrxReportPage.Create(nil);
        r := nil;
        try
          p.AssignAll(SourcePage);
          RemoveBands;
          r := TfrxReport.Create(nil);
          p.Parent := r;
          if r.DesignPreviewPage then
            Report.PreviewPages.ModifyPage(PageNo-1, TfrxReportPage(r.Pages[0]));
        finally
          p.Free;
          r.Free;
        end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
        frxReport1.PrepareReport();
        EditPage(frxReport1, 2);
        frxReport1.ShowPreparedReport;
    end;
    
  • отредактировано 00:26
    Подскажите пожалуйста, возможно ли в frxPreview изменить цвет фона с сlGray на другой? Уж больно в общий дизайн программы не вписывается. Так же очень наболевший вопрос о возможности поддержки многоязычности дизайнера (переключения языка интерфейса "на лету"). Можно ли это как-то реализовать? Спасибо.
  • gpigpi
    отредактировано 00:26
    написал:
    Подскажите пожалуйста, возможно ли в frxPreview изменить цвет фона с сlGray на другой?
    Придётся править frxPreview.pas
    constructor TfrxPreview.Create(AOwner: TComponent);
    begin
      inherited;
    
      FBackColor := clGray;
      FFrameColor := clBlack;
    
  • отредактировано 00:26
    Спасибо большое. Одно время я поизменял в исходниках в превью все упоминания clGray, которые смог найти. А вот о конструкторе почему-то не подумал. Вчера эту проблему решил установкой FR 3.21 ;)

    А что по поводу многоязычности?
  • gpigpi
    отредактировано 00:26
    написал:
    Вчера эту проблему решил установкой FR 3.21
    Эти свойства появились уже в последних билдах 3.20. Но к ним не добраться при использовании стандартного превью frxReport
    написал:
    А что по поводу многоязычности?
    Обсуждали как-то этот вопрос на руборде. Сказали, что динамическое изменение языка интерфейса невозможно
  • отредактировано 00:26
    Почему же невозможно? Делаем языковой файл утилитой mkall.bat (лежит в каталоге с языком) и подключаем язык динамически:

    uses frxRes;
    frxResources.LoadFromFile('english.frc');
  • gpigpi
    отредактировано 00:26
    Действительно, работает ;)
    Век учись, а дураком помрёшь ;)
  • отредактировано 00:26
    gpi написал:
    gpi написал:
    Подскажите пожалуйста, возможно ли в frxPreview изменить цвет фона с сlGray на другой?
    Придётся править frxPreview.pas
    constructor TfrxPreview.Create(AOwner: TComponent);
    begin
      inherited;
    
      FBackColor := clGray;
      FFrameColor := clBlack;
    
    Что за поля такие в TfrxPreview ?
    FBackColor := clGray;
    FFrameColor := clBlack;

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

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