Ошибка с frPreview
Народ, кто может помочь с сабжем?
Версия FR 2.51
Проблема вот в чем:
проект написан на динамических bpl.
Есть форма, в которой frPreview и frReport.
frReport.Preview соответственно указывает на frPreview.
Создаю форму и вывожу отчет. Все ок.
Закрываю форму и делаю ей free.
И тут начинаются баги...
При скролинге мышки (MouseUp, MouseDown) на любой форме вылетает
Access violation ... in module 'FR7.bpl'
Версия FR 2.51
Проблема вот в чем:
проект написан на динамических bpl.
Есть форма, в которой frPreview и frReport.
frReport.Preview соответственно указывает на frPreview.
Создаю форму и вывожу отчет. Все ок.
Закрываю форму и делаю ей free.
И тут начинаются баги...
При скролинге мышки (MouseUp, MouseDown) на любой форме вылетает
Access violation ... in module 'FR7.bpl'
Комментарии
две бпл...
в одной на 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.
это вкратце, что у меня есть
И в главной форме создаются и уничтожаются...
и именно на нем, когда кручу колесо мыши вылетают ошибки
Рабочую...
2 NeKum:
Ты сам можешь сказать, вот на кой ты придумал такой мудрёный винегрет из датамодуля + несколько окон просмотра ? Скорее всего нет )
Теперь по существу вопроса:
Ошибки твои сыпятся из-за того, что перехваченные эвенты формы MouseDown и MouseUp ведут либо в никуда, либо работают с объектами которых уже нет.
Бери в руки модуль FR_View и смотри реализацию процедуры Затем делай выводы ...
Датасет мне необходим для установки соединения с базой (SyBase ASE, OpenClient) и компонента отчетника там лежит. Чтоб с любой бпл мог достучаться до него.
По моему это правильно. Если есть другие методы разбить проект на отдельные модули (чтоб код не повторялся и размер был минимальным) - с удовольствием бы рассмотрел их.
А с FR_View вопрос уже отпал.
Использую FastReport 3
Опять же куча вопросов с frxPreview, но уже другие
Почему источники данных нельзя сделать прямо в FRF ??? ОБновлять нужно будет только один FRF ...