Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Запуск Form4 один раз и всё


Автор: Janger 19.6.2013, 15:06
Мне нужно, что бы Form4 вывелась всего один раз. При первом запуске программы, и что бы больше она вообще не появлялась нигде...
Т.е. как получается, пользователь запускает программа, появляется Form4, пользователь вводит там определённые данные, и нажимает "Далее", и переходит на Form1.
всё, Form4 мне вообще больше не нужно будет...
Подскажите пожалуйста, как это можно сделать?

Автор: kami 19.6.2013, 15:29
Цитата(Janger @  19.6.2013,  15:06 Найти цитируемый пост)
появляется Form4, пользователь вводит там определённые данные, и нажимает "Далее"

Эти данные где-то же сохраняются, ведь так?
Что мешает перед показом формы проверить наличие этих данных, и если их есть - то не показывать лишнее?

Автор: Poseidon 19.6.2013, 16:09
Код

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' {Form4};

{$R *.res}

begin
  Application.Initialize;

  Form4:= TForm4.Create(nil);
  Form4.ShowModal;
  Form4.Free;

  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

Автор: northener 19.6.2013, 17:56
В дополнение к предыдущему сообщению.
Форму TForm4 при этом стоит удалить из списка автосоздаваемых форм.

Автор: Данкинг 19.6.2013, 19:13
Кроме kami никто вопроса ТС не понял...

Автор: northener 19.6.2013, 19:30
Цитата(Данкинг @  19.6.2013,  19:13 Найти цитируемый пост)
Кроме kami никто вопроса ТС не понял...

А я считаю, что только Poseidon и я вопрос ТС поняли smile
Имхо, речь об обычной проверке логин/пароль.

Автор: Poseidon 19.6.2013, 20:17
Цитата(northener @  19.6.2013,  17:56 Найти цитируемый пост)
Форму TForm4 при этом стоит удалить из списка автосоздаваемых форм.
При удалении строчки Application.CreateForm(TForm4, Form4); даже в ручную, форма сама удалиться из автосоздаваемых.

Автор: northener 19.6.2013, 20:50
Цитата(Poseidon @  19.6.2013,  20:17 Найти цитируемый пост)
При удалении строчки Application.CreateForm(TForm4, Form4); даже в ручную, форма сама удалится из автосоздаваемых.

Я говорил только что надо удалить. А как именно меня не волновало. 
А то ведь автор мог и так написать:
Код

program Project1;
uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' {Form4};
{$R *.res}
begin
  Application.Initialize;
  Form4:= TForm4.Create(nil);
  Form4.ShowModal;
  Form4.Free;
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

 smile 

Автор: Janger 19.6.2013, 20:55
Цитата(Poseidon @ 19.6.2013,  16:09)
Код

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {MainForm},
  Unit2 in 'Unit2.pas' {Form4};

{$R *.res}

begin
  Application.Initialize;

  Form4:= TForm4.Create(nil);
  Form4.ShowModal;
  Form4.Free;

  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.

Ну в принципе да, именно так всё и должно работать, вот только он всё равно выдаёт ошибку(((

Автор: northener 19.6.2013, 21:09
Цитата(Janger @  19.6.2013,  20:55 Найти цитируемый пост)
только он всё равно выдаёт ошибку

Секретную?

Автор: Janger 19.6.2013, 21:19
Цитата(northener @ 19.6.2013,  21:09)
Цитата(Janger @  19.6.2013,  20:55 Найти цитируемый пост)
только он всё равно выдаёт ошибку

Секретную?

Ааа..)) Всё я решил проблему, я ещё Form5 добавил...))
А теперь проблема вот в этом...
Смотрите, у меня открывается Form4. я в ней заполняю данные  и всё дело переходит в Form1,
но Form4 не закрывается, и когда я пишу код:
Код

Form4.Close;

Дабы эта форма закрылась, то происходит такая вешь, что закрывается и Form4 и Form1, да и вообще программа завершает своё скупое существование)))

Автор: northener 19.6.2013, 21:34
Цитата(Janger @  19.6.2013,  21:19 Найти цитируемый пост)
Дабы эта форма закрылась, то происходит такая вешь, что закрывается и Form4 и Form1, да и вообще программа завершает своё скупое существование

Значит сделал совсем не так как предложил Poseidon. И Form4 осталась главной формой приложения. :(
Короче - код в студию.

Автор: Данкинг 19.6.2013, 21:46
northener, как я понял, требуется, чтобы форма запускалась только один раз при первом запуске программы на данном компе.

Автор: northener 19.6.2013, 21:55
Цитата(Данкинг @  19.6.2013,  21:46 Найти цитируемый пост)
northener, как я понял, требуется, чтобы форма запускалась только один раз при первом запуске программы на данном компе. 

Может быть  и так. Но ТС всё равно при старте хочет показать некую форму ввода некоторых данных, которые должен ввести пользователь. Но как он не старается у него эта форма становится главной формой и просто закрыть он её не может.

Автор: Poseidon 19.6.2013, 22:17
Цитата(Данкинг @  19.6.2013,  21:46 Найти цитируемый пост)
требуется, чтобы форма запускалась только один раз при первом запуске программы на данном компе.
Неужели телепаты с отпуска вернулись? Я вот даже и не подумал о таком варианте smile

Цитата(Janger @  19.6.2013,  21:19 Найти цитируемый пост)
Смотрите, у меня открывается Form4. я в ней заполняю данные  и всё дело переходит в Form1,
но Form4 не закрывается, и когда я пишу код:
Как "переходит" и где "пишешь код"? Ничего вообще не понятно.

Цитата(northener @  19.6.2013,  20:50 Найти цитируемый пост)
Я говорил только что надо удалить. А как именно меня не волновало. 
Выкрутился  smile 

Автор: Janger 19.6.2013, 23:04
Код

  Application.Initialize;
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm1, Form1);
  Form5.Show;
  Form5.Update;
  while Form5.Timer1.Enabled do
  Application.ProcessMessages;
  Form5.Hide;
  Form5.Free;
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.Run;

В общем, это дело так у меня работает...

Автор: northener 19.6.2013, 23:36
Цитата(Janger @  19.6.2013,  23:04 Найти цитируемый пост)
В общем, это дело так у меня работает...

Вот это изврат, так изврат!
Аминь smile

Автор: Данкинг 19.6.2013, 23:54
Цитата(Poseidon @  19.6.2013,  23:17 Найти цитируемый пост)
Неужели телепаты с отпуска вернулись? Я вот даже и не подумал о таком варианте

Ну так после этой фразы:
Цитата(Janger @  19.6.2013,  16:06 Найти цитируемый пост)
При первом запуске программы

я так и понял, как понял. smile 


Автор: Poseidon 20.6.2013, 08:02
Janger, с таким вариантом у тебя пятая форма будет считаться главной. Я не пробовал, но неужели приложение не закрывается полностью при закрытии пятой формы?

Автор: Janger 20.6.2013, 08:14
Цитата(Poseidon @ 20.6.2013,  08:02)
Janger, с таким вариантом у тебя пятая форма будет считаться главной. Я не пробовал, но неужели приложение не закрывается полностью при закрытии пятой формы?

Неа...))) Всё работает неплохо..)))
В начале открывается ФОРМА5, потом открывается ФОРМА4, а только потом открывается ФОРМА1, только при этом ФОРМА4 не закрывается...((

Автор: Rennigth 20.6.2013, 08:43
Janger, Объясни что конкретно каждая форма у тебя делает... не, лучше объяни что дожна делать. 

п.с. Form1 зачем 2 раза создаешь?

п.с.с. что за изврат?
Код

  while Form5.Timer1.Enabled do
  Application.ProcessMessages;

Автор: northener 20.6.2013, 12:24
Цитата(Poseidon @  20.6.2013,  08:02 Найти цитируемый пост)
Janger, с таким вариантом у тебя пятая форма будет считаться главной. Я не пробовал, но неужели приложение не закрывается полностью при закрытии пятой формы? 

Сначала главной становится пятая, таки да. Но после её уничтожения главной становится форма, которая после этого создаётся вызовом Application.CreateForm, т.е четвёртая. Почему я и сказал что это изврат. smile

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