C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
События
full_lamer
Отправлено: 07.05.2004, 15:06


Машинист паровоза

Группа: Участник
Сообщений: 225



У меня еще вопрос: как объявить глобальную переменную, которая будет видна во всем проекте? Суть проблемы вот в чем: одна форма что-то натворила и закрылась, а та котороая ее вызвала должна отриагировать на ее действие уже после закрытия... При чем:
form2_.cpp:
CODE

...
//TForm2 *Form2;
...

form2_.h:
[CODE]
...
//extern PACKAGE TForm2 *Form2;
...
[CODE]
olegenty
Отправлено: 07.05.2004, 15:15


Ветеран

Группа: Модератор
Сообщений: 2412



у меня для этих целей есть специальный самописный компонент, который лежит на главной форме. минус: хедер главной формы должен быть включен во все те, что пользуются сей инфой.

другой вариант: иметь отдельную пару файлов *.h, *.cpp для глобальных переменных. вполне нормальное решение, главное не забыть проинициировать переменные.
full_lamer
Отправлено: 07.05.2004, 15:29


Машинист паровоза

Группа: Участник
Сообщений: 225



я тоже использую глобальные переменные в .h файлах но думал есть более профрешение...
Gedeon
Отправлено: 11.05.2004, 08:41


Ветеран

Группа: Модератор
Сообщений: 1742



Как насчет обьявить переменную вне класса главной формы и обращаться к ней через extern? Тада и хидэры включать не надо.
olegenty
Отправлено: 11.05.2004, 09:44


Ветеран

Группа: Модератор
Сообщений: 2412



надо. хедер главной формы всё равно ж включать будешь )).
Gedeon
Отправлено: 11.05.2004, 10:53


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (olegenty @ 11/05/2004, 10:46)
надо. хедер главной формы всё равно ж включать будешь )).

Не обязательно, если это не нужно для других целей.
Вот код 2 формы
Form1.h
CODE

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
   TButton *Button1;
   TLabel *Label1;
   void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public:  // User declarations
   __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

Form1.cpp
CODE

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int ExPerem = 0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form2->ShowModal();
   Label1->Caption = ExPerem;
}
//---------------------------------------------------------------------------

Form2.h
CODE

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published: // IDE-managed Components
   TButton *Button1;
   void __fastcall Button1Click(TObject *Sender);
private: // User declarations

public:  // User declarations
   __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

Form2.cpp
CODE

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)
{
   extern int ExPerem;
   ExPerem = 5;
}
//---------------------------------------------------------------------------

Главная форма — Form1 вызывает Form2, в котрой при нажатии на кнопку меняется значение ExPerem на 5, после закрытия формы Form2 значение переменной в Form1 изменено. Хидер главной формы в Form2 включать не надо.
full_lamer
Отправлено: 11.05.2004, 10:58


Машинист паровоза

Группа: Участник
Сообщений: 225



Вполне логично... Спасибо!
olegenty
Отправлено: 11.05.2004, 11:21


Ветеран

Группа: Модератор
Сообщений: 2412



да я как только ответил, уже сообразил, что не надо. но сам всё же для этого имею
1. отдельный компонент, чтобы в дизайн-тайме кое-что выставлять, для пущего удобства
2. отделную пару *.h и *.cpp с глобами, когда это бывает надо.
Gedeon
Отправлено: 11.05.2004, 11:27


Ветеран

Группа: Модератор
Сообщений: 1742



Ну тут на мой вззгляд все зависит от обьема общих данных и их типа, вообще все зависит ИМХО от каждого конкретного случая.

Вернуться в Вопросы программирования в C++Builder