powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport: дублирование пунктов меню
25 сообщений из 25, страница 1 из 1
FastReport: дублирование пунктов меню
    #39744836
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сменил в D2007 FR 4.14 на 6.1.1

После первого запуска приложение компильнулось нормально, но при попытке экспорта ругнулась с AV. Удалил и заново положил те же визуальные компоненты на форму. После чего в меню экспорта Items с этими компоненты стали дублироваться по 2-3 раза. Глянул в dfm - там вроде все пристойно
кусочек
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
object GZipCompr: TfrxGZipCompressor
    Left = 248
    Top = 40
  end
  object frxPDFExport1: TfrxPDFExport
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    EmbeddedFonts = True
    OpenAfterExport = True
    PrintOptimized = True
    Outline = False
    Background = True
    HTMLTags = True
    Quality = 95
    Transparency = False
    ProtectionFlags = []
    HideToolbar = False
    HideMenubar = False
    HideWindowUI = False
    FitWindow = True
    CenterWindow = False
    PrintScaling = True
    PdfA = True
    Left = 176
    Top = 40
  end
  object frxRTFExport1: TfrxRTFExport
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    PictureType = gpJPG
    OpenAfterExport = True
    Wysiwyg = True
    SuppressPageHeadersFooters = False
    HeaderFooterMode = hfText
    AutoSize = True
    Left = 144
    Top = 40
  end
  object frxODTExport1: TfrxODTExport
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    PictureType = gpJPG
    ExportPageBreaks = False
    OpenAfterExport = True
    Background = True
    EmptyLines = False
    SingleSheet = False
    Language = 'ru'
    SuppressPageHeadersFooters = False
    Left = 112
    Top = 40
  end
  object frxHTMLExport1: TfrxHTMLExport
    FileName = '.html'
    UseFileCache = True
    ShowProgress = True
    OverwritePrompt = True
    DataOnly = False
    OpenAfterExport = True
    FixedWidth = True
    Background = True
    Centered = False
    EmptyLines = False
    Print = False
    PictureType = gpJPG
    Left = 208
    Top = 40
  end
  object RepTitul: TfrxReport
    Version = '6.1.1'
    DotMatrixReport = False
    IniFile = '\Software\Fast Reports'
    PreviewOptions.Buttons = [pbPrint, pbExport, pbZoom, pbNavigator]
    PreviewOptions.Zoom = 1.000000000000000000
    PrintOptions.Printer = #1055#1086' '#1091#1084#1086#1083#1095#1072#1085#1080#1102
    PrintOptions.PrintOnSheet = 0
    ReportOptions.CreateDate = 43443.111541597200000000
    ReportOptions.LastChange = 43443.111541597200000000
    ScriptLanguage = 'PascalScript'
    ScriptText.Strings = (
      'begin'
      ''
      'end.')
    Left = 16
    Top = 48
    Datasets = <>
    Variables = <>
    Style = <>
    object Data: TfrxDataPage
      Height = 1000.000000000000000000
      Width = 1000.000000000000000000
    end
    object Page1: TfrxReportPage
      PaperWidth = 210.000000000000000000
      PaperHeight = 297.000000000000000000
      PaperSize = 9
      LeftMargin = 10.000000000000000000
      RightMargin = 10.000000000000000000
      TopMargin = 10.000000000000000000
      BottomMargin = 10.000000000000000000
      Frame.Typ = []
    end
  end


Где еще можно копнуть?
=================
Док.

Win7 Ultim x64/Deb 9.3(GNOME, MATE; gtk2) i386:
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744841
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

в исходниках дизайнера найди место, где формируется меню вариантов экспорта. Оттуда крути - что за источник данных используется и как он формируется.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744891
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это дважды создаются фильтры экпорта
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744892
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где копнуть ? Поставить бряку в Create фильтра
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744906
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просто ребилд не помогает что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744908
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744921
gpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или создаётся несколько экземпляров формы/датамодуля с фильтрами экспорта. В этом случае можно перенести фильтры экспорта на главную форму
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39744923
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док,

Фильтры которые кладутся на форму регистрируются в глобальном списке.
Где-то дублируется создание фильтра.

А вот с AV непонятная проблема, если будет повторятся приложите стек вызовов.
В целом конвертация должна быть минимальной - переоткрытие и пересохранение форм с компонентами отчета.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745127
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_Фильтры которые кладутся на форму регистрируются в глобальном списке.
Где-то дублируется создание фильтра.
у меня тоже сложилось такое же впечатление.

В предыдущей версии,когда у меня на 3-4 формах лежало по 1 объекту TfrxReport, и никто ни с кем не конфликтовал. Теперь же кол-во дублируемых пунктов меню пропорционально кол-ву объектов frxReport.

_Den_Z_А вот с AV непонятная проблема, если будет повторятся приложите стек вызовов.
AV (с сообщением об обращении к адресу 000000, очевидно, к несуществующему объекту ) вылезает при вызове только некоторых пунктов (см. скрин).

Видимо, придется немного переделать логику работы.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745162
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Док]_Den_Z_В предыдущей версии,когда у меня на 3-4 формах лежало по 1 объекту TfrxReport, и никто ни с кем не конфликтовал. Теперь же кол-во дублируемых пунктов меню пропорционально кол-ву объектов frxReport.
Пропорционально количеству ФИЛЬТРОВ, а не отчётов
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745314
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док,

Как написал DimaBr , кол-во фильтров растет пропорционально созданию экземпляров этих фильтров.
Если часть из них не работает (половина), то могут предположить разве что такой вариант:

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


Если есть исходники, можно поставить точку останова в TfrxCustomExportFilter.Create на frxExportFilters.Register(Self);
По стеку можно определить откуда идет создание.
Возможно пытается загрузить dfm с ошибками и валится на его загрузке, но почему тогда пропускает это исключение сказать не могу.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745340
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrПропорционально количеству ФИЛЬТРОВ, а не отчётов
монопенисуально. Все равно пришлось делать единый обработчик для всех отчетов через костыль. Потому что в нынешней версии приходится держать один отчет и по одному виду фильтра на все приложение.

_Den_Z_Если есть исходники
Спасибо. Как появятся сорцы в паблике на Rio, попробую на нем поэкспериментировать. D2007 стоит в виртуалке, периодические лаги при кодинге не совсем располагают к экспериментам :)
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745377
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
32.
constructor TfrxCustomExportFilter.Create(AOwner: TComponent);
begin
  inherited;
  if not FNoRegister then
    frxExportFilters.Register(Self);
  FShowDialog := True;
  FUseFileCache := True;
  FDefaultPath := '';
  FShowProgress := True;
  FSlaveExport := False;
  FOverwritePrompt := False;
  FFiles := nil;
end;

procedure TfrxPreviewForm.Init;
var
  i, j, k: Integer;
  m, e: TMenuItem;
begin
  ...
  for i := 0 to frxExportFilters.Count - 1 do // перебираем все зарегистрированные фильтры
  begin
    if frxExportFilters[i].Filter = frxDotMatrixExport then
      continue;
    if pbExport in Report.PreviewOptions.Buttons then
      if TfrxCustomExportFilter(frxExportFilters[i].Filter).ClassName <> 'TfrxMailExport' then
      begin
        m := TMenuItem.Create(ExportPopup);
        ExportPopup.Items.Add(m);
        m.Caption := TfrxCustomExportFilter(frxExportFilters[i].Filter).GetDescription + '...';
        m.Tag := i;
        m.O
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745382
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть на каждый созданный Фильтр создаётся пункт меню (кроме TfrxMailExport)
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745390
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrТо есть на каждый созданный Фильтр создаётся пункт меню (кроме TfrxMailExport)
Спасибо за основательные разъяснения, для меня очень познавательно. Но я ведь не спорю, причины проблемы выяснил и исправил :)

Единственно, если там есть какой-то баг (это я про AV), надо выложить тестовый проект. А его я смогу сделать, как только сорцы под D10.3 появятся (D2007 на чистую ОСь ставить нет никакого желания)
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745398
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже давно пришел к выводу, что держать более одного компонента TfrxReport на приложение - это аэпрямой путь к глюкам, сбоям и подобным дупликациям.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745421
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйЯ уже давно пришел к выводу, что держать более одного компонента TfrxReport на приложение - это аэпрямой путь к глюкам, сбоям и подобным дупликациям.
Глупость полная
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745443
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Любезный,

Никаких проблем это не должно создавать.
Только стоит учитывать, что если это интравебовски дата модуль, который создается из потока, то отчет лучше создавать из кода.
По умолчанию для реализации делфийской компонентной модели (когда компоненты разбросаны по разным формам) используются глобальные списки для компонентов экспорта и датасетов. Через код все это отключается.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745499
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_Через код все это отключается.
как, например?

зы. ко всем: на сайте FR есть user's manual. А есть аналогичный developer's manual? Или о назначении свойств придется по исходникам догадываться?
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745592
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> зы. ко всем: на сайте FR есть user's manual.
Док> А есть аналогичный developer's manual?

Раньше точно был. И в комплект доки входил отдельным PDF-ом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745593
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доккак, например?

зы. ко всем: на сайте FR есть user's manual. А есть аналогичный developer's manual? Или о назначении свойств придется по исходникам догадываться?

Можно воспользоваться старым , там эти св-ва есть. "1.22 Multithreading Page 22"
Для 6ки Девелопер и Программер сейчас переписываются.

Если коротко:

Report.EngineOptions.UseGlobalDataSetList := False - отключает использование глобальных датасетов этим экземпляром TfrxReport.
Но придется добавлять датасет вручную : Report.EnabledDataSets.Add(frxDataSet).

Report.EngineOptions.EnableThreadSafe := True; отключает всякие ProcessMessage которые используются для синхронизации в главном потоке.

Чтобы фильтры не регистрировались их нужно создавать из кода TfrxPDFExport.CreateNoRegister, тогда правда его придется ручками регистрировать для просмотра в frxExportFilters.Register(Filter) (но в потоках оно не нужно, там Report.Export(Filter)).

Для потоков лучше использовать последний 6.2.X. Там даже у превью убрал глобальный инстанс рендера текста. Осталось принтеры почистить, чтобы еще совместимость не убить старым пользователям.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745631
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_> Можно воспользоваться старым

Я не понял, релиз сорцов выходит отдельно от доки что ли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745634
_Den_Z_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамЯ не понял, релиз сорцов выходит отдельно от доки что ли?


Дока есть и была выложена с релизом. Сейчас занимаемся обновлением, т.к. после релиза были изменения.
Отсутствие некоторых мануалов на странице на сайте это ошибка на сайте, поправим.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745647
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Den_Z_Можно воспользоваться старым , там эти св-ва есть. "1.22 Multithreading Page 22"
Для 6ки Девелопер и Программер сейчас переписываются.

Спасибо, даже русский вариант отыскался методом тыка :)

Но, коль, существенные изменения произошли в 6-ке, с интересом жду релиза доков по ней.

Пока вышел из положения тем, что сделал 1 глобальный отчет с фильтрами для всех форм. А загрузку шаблонов и заполнение некоторых свойств (InitialDir, FileName и проч.) сделал локально в формах.
...
Рейтинг: 0 / 0
FastReport: дублирование пунктов меню
    #39745673
gpi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокКак появятся сорцы в паблике на Rio, попробую на нем поэкспериментировать.
Поддержка 10.3 есть, начиная с FR VCL 6.2.10
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FastReport: дублирование пунктов меню
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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