Форум: "Начинающим";
Текущий архив: 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