Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с формами.C++Builder 2007

41K
10 декабря 2008 года
fe120
10 / / 09.12.2008
Доброго времени суток.
Суть в следующем.

В проекте 3 формы.
Работа приложения начинается следующим образом:

 
Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        Application->Initialize();
        SetApplicationMainFormOnTaskBar(Application, true);
        Application->CreateForm(__classid(TForm2), &Form2);
        Application->Run();
    }


На событие TForm2::FormCreate стоит следующее:

 
Код:
void __fastcall TForm2::FormCreate(TObject *Sender)
{
TForm1 *Form1 = new TForm1(this);
         Form1->ShowModal();

}


Суть кода выше, при создании Form2 - основной, вызывается создается Form1, Form2 же остается не созданной\не нарисованной.

Проблема в том что Form2, создается после закрытия(нажатию на X) Form1, необходимо же что бы Form1 создавался\прорисовывался при нажатии какого либо Button на Form2.

Как выкручиваться?
Заранее спасибо.

З.Ы. Правилен ли принцип работы с формами? Таким ли образом создаются многооконныеприложения?
1
10 декабря 2008 года
kot_
7.3K / / 20.01.2000
Ну так и создавайте форму по клику на кнопке - зачем вы ее в FormCreate запихнули?
В примерах к ВСВ работа с формами расмотрена вполне нормально, смотрите туда и делайте так как там показано.
И не забудьте убрать вторую форму из создаваемых автоматически.
41K
10 декабря 2008 года
fe120
10 / / 09.12.2008
При открытии Form2 Form1 необходимо закрыть и удалить из памяти...
а если это делать, путем Form1->close(), то Form1, будучи первой созданной, а в следствии - основной закрывает вместе с собой все приложение...

Судя по всему я некорректно поставил вопрос.

Требуется что то вроде аутентификации в Form1, если аутентификация пройдена успешно, создается Form2 основная.

Здесь в сущности и реализовывал.
убрав всяческие проверки.
 
Код:
void __fastcall TForm2::FormCreate(TObject *Sender)
{
TForm1 *Form1 = new TForm1(this);
         Form1->ShowModal();
}
1
10 декабря 2008 года
kot_
7.3K / / 20.01.2000
Цитата: fe120
При открытии Form2 Form1 необходимо закрыть и удалить из памяти...
а если это делать, путем Form1->close(), то Form1, будучи первой созданной, а в следствии - основной закрывает вместе с собой все приложение...

Судя по всему я некорректно поставил вопрос.

Требуется что то вроде аутентификации в Form1, если аутентификация пройдена успешно, создается Form2 основная.

Здесь в сущности и реализовывал.
убрав всяческие проверки.
....



Тема обсуждалась тысяча и один раз.
Помещаете в конструктор формы код создания вашей формы логина - проверяете что ввели - и дальше либо закрываете приложение, либо продолжаете работу, либо выводите форму еще раз.

Код:
__fastcall TForm2::TForm2(TComponent* Owner): TForm(Owner)
{
try{
Form1 = new TForm1(this);//у вас уже существует глобальный указатель
// зачем еще один?
         if(Form1->ShowModal()!= mrOk){
              ShowMessage("Постороннним в... ");
              Application->Terminate();
             }
    String name = Form1->Edit1->Text;
    String pass = Form1->Edit2->Text;
   if(name != pass){
    //Тут выполняешь то что необходимо.
   }
}
catch(...){

}
finally{
 delete Form1;
Form1=NULL:
}          
}

примерно так
1
10 декабря 2008 года
kot_
7.3K / / 20.01.2000
И в настройках в качестве основной формы приложния укажите Form2. И Form1 уберите из автоматически создаваемых. Еще раз повторяю.
41K
10 декабря 2008 года
fe120
10 / / 09.12.2008
Спасибо.
Для тех кому может пригодиться все написанное выше.
Не забудьте поставить на кнопку подключения\авторизации и т.п., в properties кнопки поставить mrOk в поле ModalResult
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог