Ошибка при закрытии чилдовского MDI окна
От: Хэлкар  
Дата: 05.04.03 13:03
Оценка:
У меня такая проблема. Есть программа с MDI формой. В чилдовской форме есть класс.
Child.cpp
//---------------------------------------------------------------------------

void __fastcall TFDoc::FormCreate(TObject *Sender)
{
Net=new cNet();
Image1->Repaint();
}
//---------------------------------------------------------------------------


void __fastcall TFDoc::FormCloseQuery(TObject *Sender, bool &CanClose)
{
int res = Application->MessageBoxA("Сохранить документ?","Сохранение", MB_YESNOCANCEL + MB_ICONQUESTION);
if(res == IDCANCEL){CanClose = false;}
if(res == IDYES){}
if(res == IDNO){}
}

//---------------------------------------------------------------------------

void __fastcall TFDoc::FormDestroy(TObject *Sender)
{
delete Net;
}
//---------------------------------------------------------------------------

void __fastcall TFDoc::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;        
}
//---------------------------------------------------------------------------

Child.h
class cNet
{
private:

        int  comp_n, coords[50][2];

public:

        cNet();
        ~cNet();
        int Num();
        int Test(int x, int y);
        void Add(int x, int y);

};
//---------------------------------------------------------------------------
cNet::cNet()
{
int i;
comp_n=0;
for(i=1; i<=50; i++){coords[i][0]=0;coords[i][1]=0;};
};
//---------------------------------------------------------------------------
cNet::~cNet()
{
};
//---------------------------------------------------------------------------


class TFDoc : public TForm
{
__published:    // IDE-managed Components
    TOpenDialog *OpenDialog1;
    TSaveDialog *SaveDialog1;
    TMainMenu *MainMenu1;
    TMenuItem *MFile;
    TMenuItem *MOpen;
    TMenuItem *MSave;
        TImage *Image1;
        TImageList *ImageList1;
        TToolBar *ToolBar1;
        TToolButton *ToolButton1;
        TToolButton *ToolButton2;
        TMenuItem *N1;
        TEdit *Edit1;
        TEdit *Edit2;
    void __fastcall MOpenClick(TObject *Sender);
    void __fastcall MSaveClick(TObject *Sender);
        void __fastcall Image1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y);
        void __fastcall Image1DblClick(TObject *Sender);
        void __fastcall FormCreate(TObject *Sender);
        void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
        void __fastcall Image1Click(TObject *Sender);
        void __fastcall N1Click(TObject *Sender);
        void __fastcall FormDestroy(TObject *Sender);
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:    // User declarations
public:        // User declarations
    __fastcall TFDoc(TComponent* Owner);
        cNet* Net;
        
};
//---------------------------------------------------------------------------
extern PACKAGE TFDoc *FDoc;
//---------------------------------------------------------------------------
#endif

MDIForm.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "UMDI.h"
#include "UDoc.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFMDI *FMDI;
//---------------------------------------------------------------------------
__fastcall TFMDI::TFMDI(TComponent* Owner)
    : TForm(Owner)
{
}

//---------------------------------------------------------------------------

void __fastcall TFMDI::MVertClick(TObject *Sender)
{
 TileMode = tbVertical;
 Tile();
}
//---------------------------------------------------------------------------
void __fastcall TFMDI::MIconsClick(TObject *Sender)
{
 ArrangeIcons();
}
//---------------------------------------------------------------------------
void __fastcall TFMDI::MNewClick(TObject *Sender)
{
 TFDoc* TF = new TFDoc(this);
 TF->Caption = "Документ " + IntToStr(MDIChildCount);
}
//---------------------------------------------------------------------------

Но при закрытие child окна появляется ошибка (что-то про Debugger Access). Что мне делать, где я ошибся?
З.Е. Писано на Биледере.

06.04.03 03:27: Перенесено из 'C/C++'
Re: Ошибка при закрытии чилдовского MDI окна
От: BlackBox Россия ---
Дата: 05.04.03 17:18
Оценка:
Здравствуйте, Хэлкар, Вы писали:

Х>У меня такая проблема. Есть программа с MDI формой. В чилдовской форме есть класс.

[skip]
Х>Но при закрытие child окна появляется ошибка (что-то про Debugger Access). Что мне делать, где я ошибся?
1. Какая ошибка? Напиши по подробнее.
2. Я попробовал создать новый MDI-проект, как у тебя только без класса cNet — у меня все в порядке, никаких ошибок.
Попробуй коментарить лишний код, пока ошибка перестанет появляться, а потом уже в нем и разбирайся.
3. Пользуйтесь тегом [ccode], пожалуйста.
Х>З.Е. Писано на Биледере.
Может в форум по Билдеру и следовало запостить сообщение?
Re[2]: Ошибка при закрытии чилдовского MDI окна
От: Хэлкар  
Дата: 05.04.03 20:00
Оценка:
Здравствуйте, BlackBox, Вы писали:

BB>Здравствуйте, Хэлкар, Вы писали:


BB>1. Какая ошибка? Напиши по подробнее.


Debugger Access — что-то про память, я не очень разбираюсь.
BB>2. Я попробовал создать новый MDI-проект, как у тебя только без класса cNet — у меня все в порядке, никаких ошибок.

Так в этом все и дело — без класса все работает отлично.

BB>Попробуй коментарить лишний код, пока ошибка перестанет появляться, а потом уже в нем и разбирайся.


Да нет там ничего лишнего, вообще нет.

BB>3. Пользуйтесь тегом [ccode], пожалуйста.


Хорошо учту.

Х>>З.Е. Писано на Биледере.

BB> Может в форум по Билдеру и следовало запостить сообщение?

Может быть.
Re[3]: Ошибка при закрытии чилдовского MDI окна
От: BlackBox Россия ---
Дата: 06.04.03 15:04
Оценка: 3 (1)
Здравствуйте, Хэлкар, Вы писали:

BB>>1. Какая ошибка? Напиши по подробнее.


Х>Debugger Access — что-то про память, я не очень разбираюсь.

BB>>2. Я попробовал создать новый MDI-проект, как у тебя только без класса cNet — у меня все в порядке, никаких ошибок.

Х>Так в этом все и дело — без класса все работает отлично.


Ниже я выделил жирным как должно быть. Если в массиве 50 элементов, то они адресуются от 0 до 49...
class cNet
{
private:
        int  comp_n, coords[50][2];
public:
        cNet();
        ~cNet();
        int Num();
        int Test(int x, int y);
        void Add(int x, int y);
};
//---------------------------------------------------------------------------
cNet::cNet()
{
  int i;
  comp_n=0;
  for(i=0; i<50; i++){coords[i][0]=0;coords[i][1]=0;};
};
//---------------------------------------------------------------------------
cNet::~cNet()
{
};
//---------------------------------------------------------------------------
Re[4]: Ошибка при закрытии чилдовского MDI окна
От: Хэлкар  
Дата: 06.04.03 19:04
Оценка:
BlackBox, большое, просто огромное вам спасибо! Я 5 дней мучился, не увидел! Щас исправил — все заработало! Спасибо!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.