Как управлять показом DialogPage?

отредактировано 17:18 Раздел: FastReport 3.0
Не получается показывать/не показывать DialogPage по условию...
Даже на тупое:
 DialogPage.ModalResult := mrCancel;
определенное в DialogPage.OnActivate (OnShow) форма все равно показывается...
Что-то не так делаю?

Комментарии

  • отредактировано 17:18
    Она будет показываться пока на ней есть элементы типа TButton.
    Попробуй их снести или сделать невидимыми.
  • отредактировано 17:18
    Хм..
    Снести - это как ?
    А сделать невидимыми - не помогает! Буттоны невидимы, а форма показывается.
    А вообще - где бы почитать о таком сокровенном? ProgrammerManual явно скрывает все самое интересное...
  • отредактировано 17:18
    А форме
    Visible:=False;
    
    не судьба?
  • отредактировано 17:18
    2Markus:
    А вы сами пробовали? У меня ни фига не действует!

    Вообще, можно много гадать и экспериментировать.. Странно только, почему нельзя узнать об этом достоверно.
    И еще:
    Вот что интересно: никто не делает отчеты, к-рые могут работать как StandAlone с выбором параметров на DialogPage, так и вызываемыми из формы приложения с заполненными параметрами?
  • отредактировано 17:18
    SPaull написал:
    2Markus:
    А вы сами пробовали? У меня ни фига не действует!

    Вообще, можно много гадать и экспериментировать.. Странно только, почему нельзя узнать об этом достоверно.
    И еще:
    Вот что интересно: никто не делает отчеты, к-рые могут работать как StandAlone с выбором параметров на DialogPage, так и вызываемыми из формы приложения с заполненными параметрами?
    Я делаю. В обработчике OnStartReport пишу DialogPag1.Visible := False и все работает.

    С уважением, Забурдаев Юрий.
  • отредактировано 17:18
    SPaull написал:
    2Markus:
    А вы сами пробовали? У меня ни фига не действует!
    ;)
    А как ты думаешь?

    P.S. Вправкой рук и прочих частей не занимаюсь.
  • отредактировано 17:18
    To YuraZ:
    Не нашел хозяина события OnStartReport ;)

    To Markus:
    Можно еще раз - в событии Form1OnActivate пишу:

    Form1.Visible := False;

    Результат нулевой! Т.е. форма выскакивает на экран.

    Если же пишу:

    TfrxDialogPage(Sender).Visible := False;

    то форма, мелькнув, исчезает, но отчет не выводится! Т.е. окно Preview серое без отчета и конкретно неактивное (закрывается только нажатием Esc, кнопка Close не доступна).
    Дополнительное указание:

    Form1.ModalResult := mrOK;

    ничего не меняет (указывал это и в Show и в Activate и до и перед Visible:=False)

    Что не так делаю ?
  • отредактировано 17:18
    в событии Form1OnActivate уже поздо

    OnStartReport обработчик у самого отчета в списке объектов frxReport1:TfrxReport или как ты его там обозвал.

    в крайнем случае напиши
    в коде скрипта между последними
    begin
    Form1.Visible := False;
    ....
    end.
    
  • отредактировано 17:18
    2All:
    Нашел OnStartReport! Работает! Работает и в гл. блоке begin...end.
    Огромное спасибо всем откликнувшимся!
    Блин, а все же - где-то ведь описаны такие вещи? Ведь попервоначалу голову свернешь наощупь! Теперь вот думаю - а вдруг овзможно и из DialogPage1 вызывать DialogPage2 и возвращаться обартно? Чем черт не шутит...
  • отредактировано 17:18
    SPaull написал:
    Нашел OnStartReport! Работает! Работает и в гл. блоке begin...end.
    ...
    Теперь вот думаю - а вдруг овзможно... Чем черт не шутит...
    А еще на нем игры пишут ;)
  • отредактировано January 2005
    2Stranger:

    Смешно...

    А если серьезно, то:
    Я с большим пониманием прочел ветку о том, как группа товарищей просит не удалять DialogPage после Previw, а возвращаться туда обратно. В самом деле - настроили параметры, посмотрели отчет, ну почему бы тут же не посмотреть его еще раз с др. параметрами? И ведь автор (вроде) согласился...
    А теперь продолжим мысль: как лучше настраивать эти самые параметры? ComboBox? LookUpComboBox? Ну очень неудобно! У меня на форме лежит ListBox, к-рый заполняется выборкой по условию в поле ввода. А уж из него значения из выбранной строки передаются обратно в поля ввода. И все равно некрасиво!
    Почему бы не сделать доп. форму (формы), к-рые вызываются из основной и в них обрабатывать условие и возвращать обратно выбранное значение?
    Короче, все то, что так легко реализуется в Delphi?
    Я, разумеется, понимаю, что это генератор отчетов, а не среда разработки пользовательского интерфейса. Но уж больно подкупает заявленная возможность создания StandAlone отчетов, а там без параметров никак.

    И, если можно, вопрос: а Вы как реализуете выбор параметров на DialogPage?
    (только не надо про ComboBox!)
  • отредактировано 17:18
    Позволю себе вернуться к теме - что-то тяжело выходит для начинающего - не судите строго ;)
    Итак, в скрипте имею:
    var
      SkipDialogPage: Boolean;
    ...
    begin
      if SkipDialogPage then
        Form1.Visible := False;
    end.
    
    Переменная SkipDialogPage нигде в скрипте не инициализируется явно.
    Отчет отрабатывает с показом Form1. Все ОК.
    Теперь из своего приложения пишу:
      Report.Script.Variables['SkipDialogPage'] := True;
      Report.ShowReport;
    
    и получаю в ответ ошибку:

    Identifier redeclared: 'SkipDialogPage'

    Так... Иду в дизайнер отчета и убираю объявление var SkipDialogPage.
    Теперь в run-time отчет выводится без показа Form1. Тоже вроде бы ОК.
    Зато при запуске отчета из дизайнера ловлю:

    Undeclared identifier : 'SkipDialogPage'

    Блин! Еще раз читаю ProgrammerManual (стр. 36):

    Работа со скриптовыми переменными очень проста...
    frxReport.Script.Variables := 'test';
    При этом если переменная не существовала, она создается, иначе ей просто присваивается значение...

    И все!
    Понимаю, что все д.б. просто, а вот не догоняю... ;)
  • отредактировано 17:18
    SPaull написал:
    2Stranger:

    Смешно...
    Ну смейся, а крестики-нолики я на нем видел ;)
    SPaull написал:
    И, если можно, вопрос: а Вы как реализуете выбор параметров на DialogPage?
    (только не надо про ComboBox!)
    А написание собственных компонентов с вываливанием чего угодно уже запретили? ;)
  • отредактировано 17:18
    2Stranger:
    OK, лирикой обменялись, про собств. компоненты понял...
    А вот на простой практический вопрос новичка (наверняка ведь ответ прост) ответить было уже лень ? (я не в претензии, просто обидно...)
  • отредактировано 17:18
    Объяви переменную в списке переменных отчета
    тогда сможешь обратиться через
    Report.Script.Variables['SkipDialogPage'] := True;
    
    возможно что исправляя ошибки автор как всегда немного отошёл от того что написано в документации.

  • отредактировано January 2005
    2Markus:
    Я снова в непонятках:
    1)Если я объявляю SkipDialogPage в списке переменных отчета со значением 0 и в скрипте отчета пишу:
     if <SkipDialogPage> then
       Form1.Visible := False;
    
    то обращение из внешней (дельфийской) прогр. вида:
    Report.Script.Variables['SkipDialogPage'] := 1;
    Report.ShowReport
    
    приводит к показу Form1. Т.е. значение 1 не присваивается переменной отчета, а (очевидно?) создается некая скриптовая переменная???
    А вот вызов вида:
    Report.Variables['SkipDialogPage'] := 1;
    Report.ShowReport
    
    работает, как и хотелось. Вроде бы неконец-то все ОК... Да не тут-то было!
    2)Шаблоны отчетов храню в BLOB полях таблицы. С изумлением обнаружил, что введенные в дизайнере переменные отчета не сохраняются в нем при следующем открытии дизайнера! Совсем обалдев, стал проверять: если сохраняю шаблон отчета в файле, то переменные отчета сохраняются, а если в BLOB - то ни фига! Скрипт сохраняется, макет страницы, диалоговая форма тоже, а переменные очищаются! Ума не приложу почему.
    Просто беда какая-то...
    А, отцы?
  • отредактировано 17:18
    SPaull написал:
    2)Шаблоны отчетов храню в BLOB полях таблицы. С изумлением обнаружил, что введенные в дизайнере переменные отчета не сохраняются в нем при следующем открытии дизайнера! Совсем обалдев, стал проверять: если сохраняю шаблон отчета в файле, то переменные отчета сохраняются, а если в BLOB - то ни фига! Скрипт сохраняется, макет страницы, диалоговая форма тоже, а переменные очищаются! Ума не приложу почему.
    Просто беда какая-то...
    А, отцы?
    Отец пропал куда-то, не отвечает. ;)

    Не знаю у меня все нормально сохраняется. Поищи FAQ на форуме, там было описано как в блоб сохранять, ну или могу свою реализацию бросить.
  • отредактировано 17:18
    Забавно, именно из FAQ по FR3 я и взял реализацию работы с BLOB (by Konst).
    А можно посмотреть др. вариант?
  • отредактировано 17:18
    А ты обратил внимание что в FAQ в процедуре загрузки идет
    Report.Variables.Assign(FVariablesFr);
    
    т.е. список переменных отчета перекрывается списком из дельфи. Насколько я помню Konst имеет набор переменных для всех отчетов и перекрывает им то что есть в отчёте.
    Выхода 2:
    1. Убрать эту строку и как мне кажется будет тебе счастье.
    2. Делать со списком то что делает Konst, а именно наполнять его руками из дельфи.
  • отредактировано 17:18
    2Markus:
    Yes! Я действительно, забыл про эту фичу Konst'a. Теперь сохраняются.
    Осталось просто любопытство; так все-такм, можно-ли снаружи переопределять скриптовые переменные?
  • bmubmu
    отредактировано 17:18
    С переменными скрипта все как-то мутно.
    Если перед заполнением переменны отчета вызвать frxReport.PrepareScript, то вроде ошибки пропадают, но и переменные не присваиваются.

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

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

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