Ошибка с frPreview

отредактировано 05:26 Раздел: FastReport 2.xx VCL
Народ, кто может помочь с сабжем?
Версия FR 2.51
Проблема вот в чем:
проект написан на динамических bpl.
Есть форма, в которой frPreview и frReport.
frReport.Preview соответственно указывает на frPreview.
Создаю форму и вывожу отчет. Все ок.
Закрываю форму и делаю ей free.
И тут начинаются баги...
При скролинге мышки (MouseUp, MouseDown) на любой форме вылетает
Access violation ... in module 'FR7.bpl'

Комментарии

  • отредактировано December 2004
    Давай-ка по поподробнее информацию об ошибке. Что по шагам можно было воспроизвести твою ошибку у себя на компьютере.
  • отредактировано 05:26
    По шагам...
    две бпл...
    в одной на TDMRep = class(TDataModule) расположен TfrReport, TfrDesigner

    в блоке
    initialization
    DMRep := TDMRep.Create(Application);

    finalization
    DMRep.Free;

    вторая бпл:

    requires
    lbvrep; // это первая бпл

    форма
    в блоке
    initialization
    RegisterClass(TFromPrev);
    finalization
    UnregisterClass(TFromPrev);

    форма с PageControl, с двумя закладками.
    На одной грид, на второй frPreview
    на событии PageControl.onChange
    var
    OldPrev : TfrPreview;
    begin
    if PageControl1.ActivePageIndex = 1 then
    begin
    ViewHeader.Open;
    ViewBody.Open;

    OldPrev := DMRep.frReport.Preview;
    DMRep.frReport.Preview := frPreview1;
    DMRep.frReport.LoadFromFile('prnakl.frf');
    DMRep.frReport.ShowReport;
    DMRep.frReport.Preview := OldPrev;
    ViewHeader.Close;
    ViewBody.Close;

    end;

    просмотрев в frPreview форму уничтожаем (вернее создаем другую форму из другой бпл, предварительно уничтожив первую)...


    function TLBV.CreateForm(ClassName : String) : TForm;
    var
    frmClass: TFormClass;
    Form : TForm;
    begin
    try
    frmClass := TFormClass(GetClass(ClassName));

    if Assigned(OldForm) then //OldForm : TForm; - предыдущая форма
    begin
    if OldForm is frmClass then
    begin
    Form := OldForm;
    Form.WindowState := wsMaximized;
    Form.Show;
    end
    else
    begin
    OldForm.Close;
    OldForm.Free;
    OldForm := Nil;
    end;
    end;

    if not Assigned(Form) then
    begin
    Form := frmClass.Create(Application);
    Form.Parent := Control;
    Form.WindowState := wsMaximized;
    Form.Show;
    OldForm := Form;
    end;
    //Form.Show;

    except
    MessageBox(Application.Handle, PChar(Format('Ошибка создания класса %s', [ClassName])),
    'Ошибка',
    MB_APPLMODAL+MB_ICONERROR+MB_OK);
    end;
    result := Form;
    end;

    после создания формы на скролинге мыши вылетает ошибка в FR7.bpl.

    это вкратце, что у меня есть
  • отредактировано 05:26
    Забыл указать, что эти бпл подгружаются в главную форму...
    И в главной форме создаются и уничтожаются...
  • отредактировано 05:26
    И еще одно уточнение. На главной форме есть TreeView (что-то вроде меню)
    и именно на нем, когда кручу колесо мыши вылетают ошибки
  • отредактировано December 2004
    Пока что рекомендую тебе поставить версию FR посвежее...
  • отредактировано 05:26
    Ну дык где ж ее взять то...
    Рабочую... ;)
  • отредактировано 05:26
    Я никогда не понимал (и наверное никогда не пойму) любителей раскидывать свой проект на разные BPL, которые потом они пытаются собрать ОПЯТЬ воедино ;) )

    2 NeKum:

    Ты сам можешь сказать, вот на кой ты придумал такой мудрёный винегрет из датамодуля + несколько окон просмотра ? Скорее всего нет ;) )

    Теперь по существу вопроса:
    Ошибки твои сыпятся из-за того, что перехваченные эвенты формы MouseDown и MouseUp ведут либо в никуда, либо работают с объектами которых уже нет.
    Бери в руки модуль FR_View и смотри реализацию процедуры
    procedure TfrPreview.Connect(Doc: Pointer);
    
    Затем делай выводы ...
  • отредактировано 05:26
    Венегрет из bpl необходим для нормального обновления по у клиента. Пихать все в один exe и чесать затылок, когда он будет весить 4 метра, а то и более - не есть гуд. Длл тоже не пойдет. Опять же размер... А собирать в одно их никто и не собирается...
    Датасет мне необходим для установки соединения с базой (SyBase ASE, OpenClient) и компонента отчетника там лежит. Чтоб с любой бпл мог достучаться до него.
    По моему это правильно. Если есть другие методы разбить проект на отдельные модули (чтоб код не повторялся и размер был минимальным) - с удовольствием бы рассмотрел их.
    А с FR_View вопрос уже отпал.
    Использую FastReport 3
    Опять же куча вопросов с frxPreview, но уже другие


  • отредактировано 05:26
    написал:
    Датасет мне необходим для установки соединения с базой (SyBase ASE, OpenClient) и компонента отчетника там лежит.

    Почему источники данных нельзя сделать прямо в FRF ??? ОБновлять нужно будет только один FRF ...

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

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