Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.11;
Скачать: CL | DM;

Вниз

Динамическое создание фреймов. Acces Violation;   Найти похожие ветки 

 
_RusLAN ©   (2006-05-25 11:06) [0]

периодически выскакивает ошибка AV. Дебагером причину найти не могу - появляется после финального end
Думаю что я неправильно создаю/разрушаю фреймы.

Создаю так

procedure TfrmMain.ShowManualFrame(Number: integer);
var FrameExists: boolean;
begin
  FrameExists:= Assigned(CurrentFrame);

 if FrameExists then
   FrameExists := CurrentFrame is TframeManual;

 if not FrameExists then
 begin
   DestroyCurrentFrame();
   CurrentFrame := TframeManual.Create(nil);
   CurrentFrame.Parent := Self;
   CurrentFrame.Align := alClient;
 end;
 TframeManual(CurrentFrame).LoadHTMLManual(Number);
end;


Аналогичный фрейм

procedure TfrmMain.ShowEditTestFrame;
var FrameExists: boolean;
begin
  FrameExists:= Assigned(CurrentFrame);

 if FrameExists then
   FrameExists := CurrentFrame is TframeEditTest;

 if not FrameExists then
 begin
   DestroyCurrentFrame();
   CurrentFrame := TframeEditTest.Create(nil);
   CurrentFrame.Parent := Self;
   CurrentFrame.Align := alClient;
 end;
end;



procedure TfrmMain.DestroyCurrentFrame;
begin
if Assigned(CurrentFrame) then
 CurrentFrame.Free;
end;


 
Stakan ©   (2006-05-25 11:11) [1]

Попробуй в TfrmMain.DestroyCurrentFrame написать такой код
FreeAndNil(CurrentFrame);


 
_RusLAN ©   (2006-05-25 11:24) [2]

Stakan ©   (25.05.06 11:11) [1]
Написал. Не помогло.


 
Ega23 ©   (2006-05-25 11:34) [3]

На фрейме что лежит?


 
Kolan ©   (2006-05-25 11:47) [4]

Проверь с помощью MemProof.


 
_RusLAN ©   (2006-05-25 11:53) [5]

Ega23 ©   (25.05.06 11:34) [3]
TLabel, TButton, TStaticText и динамически создается  TStrings.

constructor TframeTesting.Create(AOwner: TComponent);
begin
 inherited;
 TestStrings := TStringList.Create();
 LoadTestToMemory("CommonTest.tst");
 CurrentQuestion := 0;
 ShowQuestion(CurrentQuestion);
end;

destructor TframeTesting.Destroy;
begin
 TestStrings.Free();
 inherited;
end;


Ошибка возникает когда нажать кнопку "Закрыть"

procedure TframeTesting.btnCloseClick(Sender: TObject);
begin
 frmMain.DestroyCurrentFrame();
end;


procedure TfrmMain.DestroyCurrentFrame;
begin
if Assigned(CurrentFrame) then
CurrentFrame.Free;
end;


Ошибка
---------------------------
Debugger Exception Notification
---------------------------
Project DelphiTest.exe raised exception class EAccessViolation with message "Access violation at address 004034F0 in module "DelphiTest.exe". Read of address BAADF00D". Process stopped. Use Step or Run to continue.
---------------------------
OK   Help  
---------------------------


 
Ega23 ©   (2006-05-25 12:01) [6]

ХА!
Батенька, да ты из обработчика метода фрейма пытаешься вызвать его деструктор. А такого не бывает.


 
_RusLAN ©   (2006-05-25 17:11) [7]

Ega23 ©   (25.05.06 12:01) [6]
Спасибо. Так делать больше не буду. Убрал кнопку Закрить.
Правда здесь ошибка не всегда выскакивает, в большинстве случаев фрейм разрушается нормально.
И иногда когда закрываю приложение  то бывае AV.

Скачал MemProof то он мне показал такую строку

if not FrameExists then
begin
  DestroyCurrentFrame();
  CurrentFrame := TframeEditTest.Create(nil);
  CurrentFrame.Parent := Self;
  CurrentFrame.Align := alClient;
end;

пока разбираюсь как им пользоваться



Страницы: 1 вся ветка

Текущий архив: 2006.06.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
15-1147757331
Ega23
2006-05-16 09:28
2006.06.11
С Днём Рождения! 16 мая


1-1146100720
vidiv
2006-04-27 05:18
2006.06.11
Как быстро экспортировать RichEdit в свой формат?


2-1148815472
Ntea-pot
2006-05-28 15:24
2006.06.11
описание класса


2-1148383693
sdram
2006-05-23 15:28
2006.06.11
Как работать с HTML страницой?


2-1148449496
pavel_guzhanov
2006-05-24 09:44
2006.06.11
FastReport 3 и Delphi7