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