//---------------------------------------------------------------------------
#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::Button2Click(TObject *Sender)
{
ModalResult = mrCancel;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Form1->IBDatabase1->Params->Add(String("user_name=") + Edit1->Text);
Form1->IBDatabase1->Params->Add(String("password=") + Edit2->Text);
try {
Form1->IBDatabase1->Connected = true;
Form1->IBTable1->Active = true;
}
catch(EIBInterBaseError &e) {
Application->MessageBox(e.Message.c_str(), "Error", MB_OK|MB_ICONERROR);
return;
}
ModalResult=mrOk;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
USERES("Project1.res");
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Form2 = new TForm2(Application);
if(Form2->ShowModal() == mrCancel)
{
PostQuitMessage(0);
}
delete Form2;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
Как правильно сделать форму аутентификации?
Просто мне интересно, как это сделать грамотно, чтоб при отказе от аутентификации не проскакивало окно главной формы в момент завершения.
Кто нибудь писал базы данных на билдере?
Цитата:
Originally posted by Zenhipster
Как правильно сделать форму аутентификации в приложении работающем с базой данных? (Как логиниться в базу я знаю.) Т.е. при запуске программы должна появляться форма аутентификации. Если аутентификация прошла успешно, появляется главная форма приложения. Если мы отказались от аутентификации - происходит завершение программы.
Просто мне интересно, как это сделать грамотно, чтоб при отказе от аутентификации не проскакивало окно главной формы в момент завершения.
Кто нибудь писал базы данных на билдере?
Как правильно сделать форму аутентификации в приложении работающем с базой данных? (Как логиниться в базу я знаю.) Т.е. при запуске программы должна появляться форма аутентификации. Если аутентификация прошла успешно, появляется главная форма приложения. Если мы отказались от аутентификации - происходит завершение программы.
Просто мне интересно, как это сделать грамотно, чтоб при отказе от аутентификации не проскакивало окно главной формы в момент завершения.
Кто нибудь писал базы данных на билдере?
При открытии главной формы, если юзер незалогинился открываем форму аутентификации в модальном режиме. Если он закрывает форму не введя пароль: нажимает отмена, давит по кресту, не важно, обрабатываем событие OnClose и делаем Application->Terminate();
Цитата:
Originally posted by Zenhipster
Кто нибудь писал базы данных на билдере?
Кто нибудь писал базы данных на билдере?
писАл,пишу и буду писАть.
Да именно так и я сделал.
Цитата:
Originally posted by Zenhipster
Как правильно сделать форму аутентификации в приложении работающем с базой данных? (Как логиниться в базу я знаю.) Т.е. при запуске программы должна появляться форма аутентификации. Если аутентификация прошла успешно, появляется главная форма приложения. Если мы отказались от аутентификации - происходит завершение программы.
Просто мне интересно, как это сделать грамотно, чтоб при отказе от аутентификации не проскакивало окно главной формы в момент завершения.
Кто нибудь писал базы данных на билдере?
Как правильно сделать форму аутентификации в приложении работающем с базой данных? (Как логиниться в базу я знаю.) Т.е. при запуске программы должна появляться форма аутентификации. Если аутентификация прошла успешно, появляется главная форма приложения. Если мы отказались от аутентификации - происходит завершение программы.
Просто мне интересно, как это сделать грамотно, чтоб при отказе от аутентификации не проскакивало окно главной формы в момент завершения.
Кто нибудь писал базы данных на билдере?
Такой вариант. Вроде работает. Ваше мнение?
Код:
Цитата:
Originally posted by GIZMO
Такой вариант. Вроде работает. Ваше мнение?
Такой вариант. Вроде работает. Ваше мнение?
Действительно работает, только я позволил себе сделать незначительные изменения. У вас было:
Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Form2 = new TForm2(Application);
if(Form2->ShowModal() == mrCancel)
{
PostQuitMessage(0);
}
delete Form2;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Form2 = new TForm2(Application);
if(Form2->ShowModal() == mrCancel)
{
PostQuitMessage(0);
}
delete Form2;
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
Что бы избежать проскакивания главной формы в момент нажатия "отмена" я сделал следующее (в упрощенном виде):
Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Form2 = new TForm2(Application);
int iRes = Form2->ShowModal();
delete Form2;
if(iRes == mrCancel)
Application->Terminate();
else
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Form2 = new TForm2(Application);
int iRes = Form2->ShowModal();
delete Form2;
if(iRes == mrCancel)
Application->Terminate();
else
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
Всем спасибо за помощь.
Цитата:
Originally posted by Zenhipster
Действительно работает, только я позволил себе сделать незначительные изменения. У вас было:
Что бы избежать проскакивания главной формы в момент нажатия "отмена" я сделал следующее (в упрощенном виде):
Всем спасибо за помощь.
Действительно работает, только я позволил себе сделать незначительные изменения. У вас было:
Что бы избежать проскакивания главной формы в момент нажатия "отмена" я сделал следующее (в упрощенном виде):
Код:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
...
Application->Terminate();
...
{
try
{
...
Application->Terminate();
...
Всем спасибо за помощь.
1. Пожайлуста, самому скоро понадобится.
2. О вкусах,
Цитата:
Originally quote by BCB Help System
Ends application execution.
void __fastcall Terminate(void);
Description
Terminate calls the Windows API PostQuitMessage function to perform an orderly shutdown of the application. Terminate is not immediate.
Terminate is called automatically on a WM_QUIT message and when the main form closes.
Ends application execution.
void __fastcall Terminate(void);
Description
Terminate calls the Windows API PostQuitMessage function to perform an orderly shutdown of the application. Terminate is not immediate.
Terminate is called automatically on a WM_QUIT message and when the main form closes.
не спорят.
Цитата:
Originally posted by GIZMO
1. Пожайлуста, самому скоро понадобится.
2. О вкусах,
не спорят.
1. Пожайлуста, самому скоро понадобится.
2. О вкусах,
не спорят.
Да не, там не во вкусах было дело =) Application->Terminate() использовать, или PostQuitMessage(0) - пофиг.
Просто мне показалось, что в этом куске
Код:
if(Form2->ShowModal() == mrCancel)
{
PostQuitMessage(0);
}
delete Form2;
Application->Run();
{
PostQuitMessage(0);
}
delete Form2;
Application->Run();
Application->Run(); - выполнится в независимости от того вернул Form2->ShowModal() значение mrCancel, или нет. Поэтому явно прописал "else".