Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2012, 14:31   #1
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию Не открывается главная форма

Доброго времени суток. Замысел следующий, что бы при запуске приложения появлялась форма Form1, где пользователь вводил бы данные подключения к БД, после нажатия на кнопку подключить появлялось окно Form2 из которого можно было бы открывать дочернюю форму, Form3.
Я попробовал так

Project1

Код:
program Project1;
 
uses
  Forms,
  Controls,
  Dialogs,
  SysUtils,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {DataModule4: TDataModule};
 
{$R *.res}
var
Form1:TForm1;
begin
  Application.Initialize;
    DataModule4 := TDataModule4.Create(Application);
  Form1 := TForm1.Create(Application);
  Form1.ShowModal;
  if (Form1.ShowModal = mrOK) then
  begin
 
    if DataModule4.ADOConnection1.Connected then
    begin
 
      Form1.Free;
  Application.CreateForm(TForm2, Form2);
      end;
  if not DataModule4.ADOConnection1.Connected then
    MessageDlg('Нет подключения к БД', mtError, [mbOK], -1);
    end;
  Application.Run;
end.
Form1

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
uses Unit4;
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
      Edit1.Text := ExtractFilePath(Application.ExeName) + 'db_auth.mdb';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
      DataModule4.ADOConnection1.Connected := False;
  if FileExists(Edit1.Text) then
  begin
    DataModule4.ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
    Edit1.Text + ';Persist Security Info=False';
    DataModule4.ADOConnection1.Connected := True;
  end;
end;
 
end.
Form2

Код:
unit Unit2;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
uses Unit4, Unit3;
 
{$R *.dfm}
 
procedure TForm2.Button1Click(Sender: TObject);
begin
    Form3 := TForm3.Create(Self);
    Form3.Show;
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
Close;
end;
 
end.
Form3

Код:
unit Unit3;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;
 
type
  TForm3 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form3: TForm3;
 
implementation
 
{$R *.dfm}
 
procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;
 
end.
DataModule

Код:
unit Unit4;
 
interface
 
uses
  SysUtils, Classes, DB, ADODB;
 
type
  TDataModule4 = class(TDataModule)
    ADOConnection1: TADOConnection;
    procedure DataModuleCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  DataModule4: TDataModule4;
 
implementation
 
{$R *.dfm}
 
procedure TDataModule4.DataModuleCreate(Sender: TObject);
begin
    ADOConnection1.Connected := False;
end;
 
end.
Где Form1-окно подключения к БД, Form2- главная форма, Form3-дочерняя форма.

Окно подключения выводится первой, но при нажатие на кнопку данная форма не пропадает и главная форма так же не появляется. Что делать?
sasha198407 вне форума Ответить с цитированием
Старый 24.02.2012, 14:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но при нажатие на кнопку данная форма не пропадает
Это скорее всего потому что у тебя кнопка на форме подключения не определена как результативная.
modalResult для нее нужно указать правильный, или так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
      DataModule4.ADOConnection1.Connected := False;
  if FileExists(Edit1.Text) then
  begin
    DataModule4.ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +
    Edit1.Text + ';Persist Security Info=False';
    try DataModule4.ADOConnection1.Connected := True;    modalresult:=mrOk;
    except modalresult:=mrNo; end;
  end else   modalresult:=mrNo;
end;
Установка результата клика для модального диалога должна закрыть его, вернув значение отработки формы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.02.2012, 14:58   #3
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Спасибо, заработало, только срабатывает после второго нажатия на кнопку и главная форма появляется на заднем плане
sasha198407 вне форума Ответить с цитированием
Старый 24.02.2012, 14:59   #4
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Цитата:
Код:
 Application.Initialize;
    DataModule4 := TDataModule4.Create(Application);
  Form1 := TForm1.Create(Application);
  Form1.ShowModal;
А зачем так сложно? Повесь модальную форму для подключения к БД на событие OnShow для главной формы. И все.
_SERGEYX_ вне форума Ответить с цитированием
Старый 24.02.2012, 15:04   #5
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Оу извеняюсь.
Form1.ShowModal;
это я сюда по ошибке влепил (пытался понять почему не работает).

Почему так, да не знаю где-то на форуме прочитал, как вариант. Сейчас попробую с onShow, может выйдет. И последний вопрос, а как проверить была ли нажата кнопка(Button)?

Последний раз редактировалось Stilet; 24.02.2012 в 17:04.
sasha198407 вне форума Ответить с цитированием
Старый 24.02.2012, 15:45   #6
sasha198407
Пользователь
 
Регистрация: 05.05.2009
Сообщений: 40
По умолчанию

Всё разобрался. Большое спасибо за помощь, всё работает.
sasha198407 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Главная форма cashmail Общие вопросы Delphi 15 17.10.2011 13:58
Главная форма. aleksandr278 Общие вопросы Delphi 17 23.03.2010 13:28
Главная форма Михаил Юрьевич Общие вопросы Delphi 3 03.02.2008 21:42
Главная форма как у Delphi NecroSlider Общие вопросы Delphi 5 19.01.2008 12:49
Первая форма приложения не главная Avron Общие вопросы Delphi 4 28.09.2007 12:02