Re: ShowModal не работает
От: Аноним  
Дата: 13.05.03 13:43
Оценка: -1
Здравствуйте, SKYNET, Вы писали:

SKY> Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.

SKY>
SKY>procedure TForm1.FormShow(Sender: TObject);
SKY>begin
SKY>  Application.CreateForm(TForm2, Form2);
SKY>  Form2.ShowModal;
SKY>end;
 
SKY>procedure TForm2.Button1Click(Sender: TObject);
SKY>begin
SKY>   Form2.Close;
SKY>end;
SKY>


Читаем Help по Application.CreateForm:

Creates a new form.

Delphi syntax:

procedure CreateForm(FormClass: TFormClass; var Reference);

Description

Call CreateForm to dynamically create a form at runtime. Developers do not need to add code for creating most forms, because typically one or more calls to CreateForm are added automatically to the project's source when using the form designer.

CreateForm creates a new form of the type specified by the FormClass parameter and assigns it to the variable given by the Reference parameter. The owner of the new form is the Application object.

Note: By default, the form created by the first call to CreateForm in a project becomes the application’s main form.

Ну а Вы создаете Form2 в обработчике .onCreate, т.е. ДО создания Form1!
ShowModal не работает
От: SKYNET  
Дата: 13.05.03 08:05
Оценка:
Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.
procedure TForm1.FormShow(Sender: TObject);
begin
  Application.CreateForm(TForm2, Form2);
  Form2.ShowModal;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
begin
   Form2.Close;
end;
Re: ShowModal не работает
От: LG Россия  
Дата: 13.05.03 08:23
Оценка:
Здравствуйте, SKYNET, Вы писали:

SKY> Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.

SKY>
SKY>procedure TForm1.FormShow(Sender: TObject);
SKY>begin
SKY>  Application.CreateForm(TForm2, Form2);
SKY>  Form2.ShowModal;
SKY>end;
 
SKY>procedure TForm2.Button1Click(Sender: TObject);
SKY>begin
SKY>   Form2.Close;
SKY>end;
SKY>


Посмотри порядок создания форм в своем проекте. (dpr)
Без всяких там прикольных подписей.
Re[2]: ShowModal не работает
От: SKYNET  
Дата: 13.05.03 09:46
Оценка:
Здравствуйте, LG, Вы писали:

LG>Посмотри порядок создания форм в своем проекте. (dpr)


В autocreate стоит только форма1.


program Project1;

{%ToDo 'Project1.todo'}

uses
  Forms,
  windows,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end;
Re: ShowModal не работает
От: Clickmaker Россия http://relaxander.webest.net/
Дата: 13.05.03 09:50
Оценка:
Здравствуйте, SKYNET, Вы писали:

SKY> Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.

SKY>
SKY>procedure TForm1.FormShow(Sender: TObject);
SKY>begin
SKY>  Application.CreateForm(TForm2, Form2);
SKY>  Form2.ShowModal;
SKY>end;
 
SKY>procedure TForm2.Button1Click(Sender: TObject);
SKY>begin
SKY>   Form2.Close;
SKY>end;
SKY>


А это принципиально, что форма 2 создается в OnShow формы 1? А если в OnCreate попробовать?
Re[2]: ShowModal не работает
От: sercher Украина  
Дата: 13.05.03 10:22
Оценка:
В модальной форме никакого Close() не надо. ModalResult = 0; пиши
Re[3]: ShowModal не работает
От: SKYNET  
Дата: 13.05.03 10:47
Оценка:
Здравствуйте, sercher, Вы писали:


S>В модальной форме никакого Close() не надо. ModalResult = 0; пиши


Попробывал — форма2 не закрываеться
Re[2]: ShowModal не работает
От: SKYNET  
Дата: 13.05.03 10:49
Оценка:
Здравствуйте, Clickmaker, Вы писали:

C>Здравствуйте, SKYNET, Вы писали:


SKY> Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.

SKY>
SKY>procedure TForm1.FormShow(Sender: TObject);
SKY>begin
SKY>  Application.CreateForm(TForm2, Form2);
SKY>  Form2.ShowModal;
SKY>end;
 
SKY>procedure TForm2.Button1Click(Sender: TObject);
SKY>begin
SKY>   Form2.Close;
SKY>end;
SKY>


C>А это принципиально, что форма 2 создается в OnShow формы 1? А если в OnCreate попробовать?


Нет, это не принципиально, но в OnCreate эфект тот же.
Re: ShowModal не работает
От: ivankohut Украина  
Дата: 13.05.03 11:08
Оценка:
Здравствуйте, SKYNET, Вы писали:

SKY> Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.

SKY>
SKY>procedure TForm1.FormShow(Sender: TObject);
SKY>begin
SKY>  Application.CreateForm(TForm2, Form2);
SKY>  Form2.ShowModal;
SKY>end;
 
SKY>procedure TForm2.Button1Click(Sender: TObject);
SKY>begin
SKY>   Form2.Close;
SKY>end;
SKY>


понятное дело. Все работает как ты и написал Ведь когда ты показываеш первую форму, исполняэтся Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
поетому еще раз и показывается троя вторая форма
Проверь порядок создания форм, и то какие из них на AutoCreate
А то в таком случае как ті написал утечка памяти будет.
С уважением, Kohut Ivan.
Re: ShowModal не работает
От: mrhru Россия  
Дата: 13.05.03 11:10
Оценка:
Здравствуйте, SKYNET, Вы писали:

SKY> Я столкнулся с такой проблемой: есть две формы Form1 и Form2. Если создать новое приложение — всё работает (форма2 создаёться а по нажатии на Button1 формы2 она закрываеться и появляеться форма1). А если Я делаю тоже самое в моей программе, то форма2 создаёться, по нажатии на Button1 форма2 закрываеться, создаёться форма1, а вот сверху опять появляеться форма2 и если нажать на Button1, то закрываеться всё приложение. Я даже удалял ВСЁ из моей программы — результат тот же.

SKY>
SKY>procedure TForm1.FormShow(Sender: TObject);
SKY>begin
SKY>  Application.CreateForm(TForm2, Form2);
SKY>  Form2.ShowModal;
SKY>end;
SKY> 
SKY>procedure TForm2.Button1Click(Sender: TObject);
SKY>begin
SKY>   Form2.Close;
SKY>end;
SKY>


Если при закрытии формы2 закрывается всё приложение, то по (пока) непонятным причинам Application считает эту форму главной. Можно попробовать так:
procedure TForm1.FormShow(Sender: TObject);
begin
  // явно указываем владельца
  Form2 := TForm2.Create(Self);

  Form2.ShowModal;
end;


А чтобы не было сооблазна создавать Form2 где нибудь ещё , удалить заодно и строку в модуле Form2.pas
var
  Form2 : TForm2;


procedure TForm1.FormShow(Sender: TObject);
var Form2 : TForm2; // определяем локально
begin
  // явно указываем владельца
  Form2 := TForm2.Create(Self);

  Form2.ShowModal;
end;
Re[2]: ShowModal не работает
От: SKYNET  
Дата: 13.05.03 11:49
Оценка:
Здравствуйте, mrhru, Вы писали:

Спасибо, помогло, даже ничего не удаляя, но всё же почему в новом приложение рабатает, а в моём необходимо указывать владельца?
Re[2]: ShowModal не работает
От: LG Россия  
Дата: 13.05.03 11:58
Оценка:
Здравствуйте, mrhru, Вы писали:

M>Если при закрытии формы2 закрывается всё приложение, то по (пока) непонятным причинам Application считает эту форму главной.


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