Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport - скрыть объект в уже сформированном отчете / 14 сообщений из 14, страница 1 из 1
25.02.2019, 23:27
    #39779062
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
В отчете имеется Мемо, которое необходимо спрятать, если переданное значение равно 01.01.1900.

Добавил в событие OnBeforePrint данного мемо код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure Memo_DateOnBeforePrint(Sender: TfrxComponent);
begin
  if (Get('date') = '01.01.1900') then begin
    Memo_Date.Visible := False;                                                            
  end else begin
    Memo_Date.Visible := True;    
  end;
end;


Все прекрасно работает, НО только если переформировать отчет.

Мне же необходимо сделать это в реальном времени и без переформирования отчета. Кинул кнопку на форму для теста и вот такой код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
procedure Click;
var p: TfrxPage;
    i: integer;
    s: string;
begin
  with frxPreview1 do begin
    P := PreviewPages.Page[PageNo - 1];
    if p = nil then exit;

    for i := 0 to p.AllObjects.Count - 1 do
      if TObject(p.AllObjects.Items[i]) is TfrxMemoView then
        with TfrxMemoView(p.AllObjects.Items[i]) do
         if Name = 'Memo_Date' then begin
           if SpecialMode then begin
             Text := '01.01.1900';
             Visible := False;
           end else begin
             Text := FormatDateTime('dd.mm.yyyy', currDate);
             Visible := True;
           end;
         end;

         TfrxMemoView(DatabaseF.frxReport1.FindObject('Memo_Date')).BeforePrint;
    try
      Lock;
      PreviewPages.ModifyPage(PageNo - 1, TfrxReportPage(p));
    finally
      Unlock;
    end;
  end;
end;


Не прячет почему-то.
В данном коде Visible не работает и BeforePrint тоже не вызывается.


Подскажите, в чем проблема.
Идеально бы вызвать метод BeforePrint данного мемо, чтобы не плодить один и тот де код.

Спасибо заранее всем откликнувшимся!
...
Рейтинг: 0 / 0
26.02.2019, 01:30
    #39779079
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
Код: pascal
1.
2.
3.
4.
procedure MasterDataBeforePrint(Sender: TfrxComponent);
begin
  Memo_Date.Visible := Get('date') <> '01.01.1900';
end;
...
Рейтинг: 0 / 0
26.02.2019, 03:00
    #39779085
_Den_Z_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzums,

Visible работает только во время формирования отчета, все объекты с Visible = False не попадают в построенный отчет.
В построенном отчете изменение этого св-ва никакого эффекта не даст.
Если у вас 5-ка или выше, то есть св-во Visibility которое позволяет скрывать объекты(для печати | просмотра | экспорта) даже в построенном отчете. Если версия младше, то удалять объект из построенного отчета(Free).

Эта строчка
Код: pascal
1.
TfrxMemoView(DatabaseF.frxReport1.FindObject('Memo_Date')).BeforePrint;



В вашем случае не имеет смысла, т.к. вызывает метод у объекта шаблона отчета (а вы изменяете построенный отчет).
...
Рейтинг: 0 / 0
26.02.2019, 10:26
    #39779171
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
_Den_Z_,

Большое спасибо за столь подробный ответ.
Учитывая, что по кнопке на форме надо прятать / опять показывать дату, то удаление Мемо (.Free) мне не подходит.
Учитывая, что и версия репорта у меня 4.9, то и второй вариант решения (.Visibility) мне тоже не подходит.

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

Сейчас мне видится решение в полном сбросе (очистке) отчета, если меняется режим (с датой или без).
Переформировывать его - не совсем красивое решение наверное.

П.С. И подскажите еще раз при переформирование, обратил внимание, что если добавить SHowMessage в любое место скрипта, то оно срабатывает два раза. Это такая фича? Вызываю просто .Prepair и затем ShowPrepaired
Ну и также при печати моргает окно сформированного отчета (перерисовка?) ... Это мои кривые руки (возможно вполне) или тоже фича?

Большое спасибо.
...
Рейтинг: 0 / 0
26.02.2019, 10:28
    #39779172
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
DimaBr,
А у меня нет MasterData.
У меня простейший отчет - пять Мемо на странице. И все.

Спасибо!
...
Рейтинг: 0 / 0
26.02.2019, 11:12
    #39779200
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsDimaBr,
А у меня нет MasterData.
У меня простейший отчет - пять Мемо на странице. И все.


Страница - это репорт? Или какой-то бэнд? В любом случае у обоих есть событие OnBeforePrint.
...
Рейтинг: 0 / 0
26.02.2019, 11:26
    #39779210
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsDimaBr,
А у меня нет MasterData.
У меня простейший отчет - пять Мемо на странице. И все.

Спасибо!
Код: pascal
1.
2.
3.
4.
procedure PageBeforePrint(Sender: TfrxComponent);
begin
  Memo_Date.Visible := Get('date') <> '01.01.1900';
end;
...
Рейтинг: 0 / 0
26.02.2019, 11:30
    #39779213
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsП.С. И подскажите еще раз при переформирование, обратил внимание, что если добавить SHowMessage в любое место скрипта, то оно срабатывает два раза. Это такая фича? Вызываю просто .Prepair и затем ShowPrepaired
Да. Если отчёт двухпроходный
...
Рейтинг: 0 / 0
26.02.2019, 11:32
    #39779215
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsСейчас мне видится решение в полном сбросе (очистке) отчета, если меняется режим (с датой или без).
Переформировывать его - не совсем красивое решение наверное.
Зато самое простое
...
Рейтинг: 0 / 0
26.02.2019, 17:14
    #39779451
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
Я наверное все же попробую в виртуальной машине удалить репорт версии 4,9 и поставить репорт версии 5,5.
Надеюсь что все мои простенькие отчеты откроются без проблем (то есть формат останется прежним).
А кто чем редактирует шаблоны? Таким же инструментом как и я (не нашел в исходниках готового бинарника)?

Что значит два прохода отчета? Если у меня есть скрипт (да хоть OnBeforePrint), означает ли это, что мой отчет будет прогоняться два раза? Я сомневаюсь - у меня он простейший, но тем не менее два прогона есть.

И моргающий готовый отчет при печати (кстати, не смог победить это дело) это тоже нормально? Хотя теперь я в этом вижу и плюс - некий фоновый сигнал о печати.
Если это можно победить (похоже на перерисовку), то я бы возможно использовал это решение при переформировании отчета (с датой или без, и наоборот), если бы ничего не моргало, то это было бы равносильно .visibility для конечного пользователя.

Большое всем спасибо!
...
Рейтинг: 0 / 0
26.02.2019, 21:28
    #39779528
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsА кто чем редактирует шаблоны? Таким же инструментом как и я (не нашел в исходниках готового бинарника)?

Что значит два прохода отчета? Если у меня есть скрипт (да хоть OnBeforePrint), означает ли это, что мой отчет будет прогоняться два раза? Я сомневаюсь - у меня он простейший, но тем не менее два прогона есть.

И моргающий готовый отчет при печати (кстати, не смог победить это дело) это тоже нормально? Хотя теперь я в этом вижу и плюс - некий фоновый сигнал о печати.
Если это можно победить (похоже на перерисовку), то я бы возможно использовал это решение при переформировании отчета (с датой или без, и наоборот), если бы ничего не моргало, то это было бы равносильно .visibility для конечного пользователя.

Большое всем спасибо!
1. Двойной клик на TfrxReport в IDE или
Код: pascal
1.
2.
uses frxDesgn;
frxReport1.DesignReport;


2. TfrxReport.EngineOptions.DoublePass = True
3. Тестовый проект на support@fast-report.com
...
Рейтинг: 0 / 0
26.02.2019, 23:28
    #39779542
bzums
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
Спасибо!

Одно но - TfrxReport.EngineOptions.DoublePass у меня установлено в False.
Тем не менее, как уже говорил, если поставить вызов ShowMessage например Memo.OnBeforePrint, то вылезает дважды.
Я так понимаю, это не нормальное поведение.

Возможно следующее озвученная мной проблема (моргание), это есть не перерисовка, а повторное составление отчета. Моргание происходит при вызове frxPreview.Print.
Или начудил в связке frxReport - frxPreview, но теперь и не знаю как это искать, вернее как найти истину.

Всем спасибо!
Если у кого есть предположение откуда растут ноги у моих вопросов - сообщите пожалуйста.
...
Рейтинг: 0 / 0
27.02.2019, 06:53
    #39779584
Exteris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsЯ наверное все же попробую в виртуальной машине удалить репорт версии 4,9 и поставить репорт версии 5,5.
Надеюсь что все мои простенькие отчеты откроются без проблем (то есть формат останется прежним).
Спокойно перешел с 4-го репорта на 5-й. Более 50 отчетов, некоторые совсем непростые.
...
Рейтинг: 0 / 0
27.02.2019, 07:08
    #39779585
gpi
gpi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FastReport - скрыть объект в уже сформированном отчете
bzumsОдно но - TfrxReport.EngineOptions.DoublePass у меня установлено в False.
Тем не менее, как уже говорил, если поставить вызов ShowMessage например Memo.OnBeforePrint, то вылезает дважды.
Я так понимаю, это не нормальное поведение.

Возможно следующее озвученная мной проблема (моргание), это есть не перерисовка, а повторное составление отчета. Моргание происходит при вызове frxPreview.Print.
Или начудил в связке frxReport - frxPreview, но теперь и не знаю как это искать, вернее как найти истину.

1. Memo.OnBeforePrint будет вызываться столько раз, сколько раз выводится Memo
2. Попробуйте использовать frxPreview.Lock/Unlock
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport - скрыть объект в уже сформированном отчете / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]