powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport - скрыть объект в уже сформированном отчете
14 сообщений из 14, страница 1 из 1
FastReport - скрыть объект в уже сформированном отчете
    #39779062
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В отчете имеется Мемо, которое необходимо спрятать, если переданное значение равно 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
FastReport - скрыть объект в уже сформированном отчете
    #39779079
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
procedure MasterDataBeforePrint(Sender: TfrxComponent);
begin
  Memo_Date.Visible := Get('date') <> '01.01.1900';
end;
...
Рейтинг: 0 / 0
FastReport - скрыть объект в уже сформированном отчете
    #39779085
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bzums,

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

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



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

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

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

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

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

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

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


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

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

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

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

Большое всем спасибо!
...
Рейтинг: 0 / 0
FastReport - скрыть объект в уже сформированном отчете
    #39779528
gpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
FastReport - скрыть объект в уже сформированном отчете
    #39779542
bzums
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

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

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

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

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

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


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