Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];

Вниз

Динамическое создание фреймов. 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
2-1148399979
SedAche
2006-05-23 19:59
2006.06.11
ListBox


8-1136730983
Antonio
2006-01-08 17:36
2006.06.11
точки на плоскости


9-1131291682
Novouralsk
2005-11-06 18:41
2006.06.11
Экспортёр для 3d Max


2-1148639361
Туч
2006-05-26 14:29
2006.06.11
какой выбрать драйвер/сервер для базы данных


2-1148416743
Helen
2006-05-24 00:39
2006.06.11
Кнопка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский