Главная страница
    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.02 c
2-1148642335
novice06
2006-05-26 15:18
2006.06.11
ка кзаписать структуру в нетепизированный файл?


15-1146754608
Yegorchic
2006-05-04 18:56
2006.06.11
Узнать ширину и высоту картинки по её размеру


9-1131295547
Friendship
2005-11-06 19:45
2006.06.11
Помогите пожалуйста разрешить одну проблему


2-1148676060
Mr tray
2006-05-27 00:41
2006.06.11
определить, были ли вызваны reset или rewrite


15-1148043039
Nikolga
2006-05-19 16:50
2006.06.11
Ищем программиста Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский