Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Убить первую форму


Автор: MoLeX 28.10.2008, 13:26
Привет еще раз)

Есть проект содержащий две формы (допустим Form1 и Form2), на форме1 есть кнопка по нажатию на которую происходит вызов формы2
Код

void __fastcall TForm1::sButton1Click(TObject *Sender)
{
        Form2 -> Show();        
}


Но мне уже не нужна первая форма. Вопрос как ее убить? скрыть - не выход

Автор: mrbrooks 28.10.2008, 13:36
Цитата(MoLeX @  28.10.2008,  13:26 Найти цитируемый пост)
Но мне уже не нужна первая форма. Вопрос как ее убить? скрыть - не выход 

если она главная - то никак.
 в такой ситуации проще сначала создать временную форму перед появлением основной - к примеру ввод пароля и т.п - и уже по результату - загружать основную - уничтожая временную.

Автор: MoLeX 28.10.2008, 13:37
а подробнее
 smile 

Автор: Dem_max 28.10.2008, 13:42
Это на подобии Splash Scren-a

Автор: mrbrooks 28.10.2008, 13:47
MoLeX, в событие OnShow() основной формы

Код

if (InputBox("Введите пароль","Пароль?","").AnsiCompare("123")) Close();


Добавлено через 53 секунды
Цитата(Dem_max @  28.10.2008,  13:42 Найти цитируемый пост)
то на подобии Splash Scren-a 

оно самое  smile  окно приветствия.

Добавлено через 1 минуту и 49 секунд
В депозитарии Бормана есть форма для ввода пассворда. 

Автор: MoLeX 28.10.2008, 13:51
хм. это замечательно но как оно мне пригодится пока не могу понять

Автор: mrbrooks 28.10.2008, 13:52
Цитата(MoLeX @  28.10.2008,  13:51 Найти цитируемый пост)
хм. это замечательно но как оно мне пригодится пока не могу понять 

по аналогии создаешь динамически форму.

Автор: MoLeX 28.10.2008, 14:17
пришло решение. делаю два exe файла, первый просто запускает когда необходимо второй... 

Автор: vikaz 28.10.2008, 14:22
Мда вот ты замутил!

Автор: mrbrooks 28.10.2008, 14:37
[/code]
Цитата(MoLeX @  28.10.2008,  14:17 Найти цитируемый пост)
пришло решение. делаю два exe файла, первый просто запускает когда необходимо второй... 


жесть  smile 

Цитата(vikaz @  28.10.2008,  14:22 Найти цитируемый пост)
Мда вот ты замутил! 

 smile 

1. Делаешь форму как обычно через File->New->Form. Приводишь ее к тому виду которому хочешь. С кнопками и т.п.
2. Project->Option->Forms перемещаешь ее из Auto-Create forms в Available forms
3. В событие созданной временной формы OnClose() пишешь
Код

Form1->Show();

4.Project->ViewSource
В этом файле инклюдишь свой хидар с временной формой
Код

#include "tmp_form.h"
......
  Application->Initialize();                               //эта строка создана до тебя
  Form2 = new TForm2(Application); //твоя форма-заставка
  Form2->Show(); 
  Form2->Update(); 
  Application->CreateForm(TForm1, &Form1); //эта строка создана до тебя
  Application->ShowMainForm = false;
  Application->Run;                                         //эта строка создана до тебя





Автор: Great Cornholio 28.10.2008, 14:55
в Project->options->Forms можно выбрать Main Form

Автор: mrbrooks 28.10.2008, 15:01
Цитата(Great Cornholio @  28.10.2008,  14:55 Найти цитируемый пост)
в Project->options->Forms можно выбрать Main Form 

и что дальше. продолжи мысль.

Автор: Great Cornholio 28.10.2008, 15:04
и пусть, main form будет 2-я, только при появлении она себя скроет, а покажет 1ю

Автор: mrbrooks 28.10.2008, 15:08
Цитата(Great Cornholio @  28.10.2008,  15:04 Найти цитируемый пост)
и пусть, main form будет 2-я, только при появлении она себя скроет, а покажет 1ю 

ты попробуй сначало это сделать. а потом советуй.

Добавлено через 4 минуты и 3 секунды
тем более
Цитата(MoLeX @  28.10.2008,  13:26 Найти цитируемый пост)
Вопрос как ее убить? скрыть - не выход 


Автор: Great Cornholio 28.10.2008, 15:43
Блин, и вправду, он главную форму создаёт всегда 1ой

Автор: SVN74 30.10.2008, 00:47
Предлагаю свой вариант с эффектом прозрачности форм. 
  Сначала запускается вторая форма, затем кнопкой она уничтожается и запускает первую форму с "проявлением"
===========================================
Код

1. Основной файл:

 #include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}
=======================================================
2. Файл главной формы:

#include <vcl.h>
#pragma hdrstop

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

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
 TForm2 *F = new TForm2(Application);
 F->Show();
 this->Transparent(0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Transparent(int Transparency)
{
long ExtStyle = GetWindowLong(this->Handle, GWL_EXSTYLE);
SetWindowLong(this->Handle, GWL_EXSTYLE, ExtStyle | WS_EX_LAYERED);
SetLayeredWindowAttributes(this->Handle, 0 , (255 * Transparency) / 100,LWA_ALPHA);
}
===================================================================
3. Файл второй формы (с кнопкой):
 
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
  Close();
  for(int i=0;i<105;i+=5) Form1->Transparent(i);

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

Автор: MoLeX 30.10.2008, 06:52
SVN74, будь добр воспользуйся кнопкой Код для оформления

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)