Главная страница
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.054 c
1-1146834500
VEZ
2006-05-05 17:08
2006.06.11
TImage и гиперссылки


2-1148635212
Ega23
2006-05-26 13:20
2006.06.11
Разовый экспорт данных в Excel


15-1147325557
Случайный прохожий
2006-05-11 09:32
2006.06.11
Простая задачка


2-1148801707
Вася
2006-05-28 11:35
2006.06.11
день недели


2-1148642335
novice06
2006-05-26 15:18
2006.06.11
ка кзаписать структуру в нетепизированный файл?