#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TBitBtn *BitBtn1;
void __fastcall BitBtn1Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private: // User declarations
TOpenDialog *OpenDialog;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
OpenDialog = new TOpenDialog(NULL);
if(OpenDialog->Execute()){
ShowMessage(OpenDialog->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete OpenDialog;
Action = caFree;
}
Access Violation при OpenDialog->Execute()
З.Ы: в обработчиках опендиалога ничего не пишу, все пусто, все равно ошибка не пропадает...
З.Ы: в обработчиках опендиалога ничего не пишу, все пусто, все равно ошибка не пропадает...[/QUOTE]
Нифига не понятно. При закрытии чего? Диалога, программы? Пользуйся отладчиком - скорей всего, ты пытаешься обратится к невалидному указателю на какой нибудь объект.
Код:
class TForm1 : public TForm
{
__published:
//bla bla bla
private:
//bla bla bla
public:
TOpenDialog *OpenDialog;
};
{
__published:
//bla bla bla
private:
//bla bla bla
public:
TOpenDialog *OpenDialog;
};
Unit1.cpp
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OpenDialog = new TOpenDialog(NULL);
}
: TForm(Owner)
{
OpenDialog = new TOpenDialog(NULL);
}
Unit1.cpp
Код:
OpenDialog->Execute();
Если во время работы программы хоть раз вызываю [COLOR="Green"]OpenDialog[/COLOR] - во время закрытия проги выскакивает такой еррор (в Б6), а если скомпиленный ЕХЕшник то 3 раза выскакивает окно:
Приложение вызвало ошибку и будет закрыто.
Интересн тот факт что [COLOR="Green"]SaveDialog[/COLOR] работает нормально, проблема только с [COLOR="Green"]OpenDialog[/COLOR]-ом
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OpenDialog = new TOpenDialog(NULL);
}
: TForm(Owner)
{
OpenDialog = new TOpenDialog(NULL);
}
А слабо написать:
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OpenDialog = new TOpenDialog(this);
}
: TForm(Owner)
{
OpenDialog = new TOpenDialog(this);
}
Внимательно почитай в справке, что означает параметр Owner в конструкторе компонента.
Прикол в том что даже если я не руцями его создаю а просто кидаю на форму - таже ошибка!
Код:
воспроизвести твою ошибку не удалось. Размещение объявления в другой секции ничего не дало (да и не могло дать). Ошибка скорее всего в другом - гдето объект не создается но ты к нему пытаешься обратится или удалить.
Код:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
OpenDialog = new TOpenDialog(this);
}
: TForm(Owner)
{
OpenDialog = new TOpenDialog(this);
}
Внимательно почитай в справке, что означает параметр Owner в конструкторе компонента.[/QUOTE]
Я тоже подумал о этом - но в 6 версии ошибку все равно вызвать не удалось. Все отрабатывает нормально как в релизе так и в дебаг - указатель создается, создается объект и нормально удаляется. Причина не в диалоге - или...
А как можно удалить его и все что с ним связано в проекте, ато не охота создавать новый проект и переделывать все, много уж там работы :(
Первый признак наведенной ошибки. Где-то утечка памяти и повисшие указатели. Как говорится, ломается где-то, а попадает на OpenDialog.
А как можно удалить его и все что с ним связано в проекте, ато не охота создавать новый проект и переделывать все, много уж там работы :([/QUOTE]
Ctrl+F. Проверь функции которые вызываются при закрытии формы.
Большое спасибо тем кто откликнулся, ато я б дальше ломал се голову над ОпенДиалогом :)))
Угу. Так как проблема решена - тема закрыта.