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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2008, 11:42   #1
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию Открытие окна при событии FormCreate.

Здравствуйте, уважаемые программисты!
Сейчас постараюсь изложить суть своей проблемы: у меня программа работающая с БД, при запуске открывается около минуты и поэтому я хочу сделать форму показываущую загрузку программы, ну знаете как в играх или в каких-лобо программах. Если я правильно мыслю, то, что бы это сделать я: создаю форму(пишу там загрузка программы и т.д.)->подклучаю к главной форме(на котором вся БД)->и по событии FormCreate пишу:
form1.Show;
form2.close;
Да и еще, посколько форму загрузки я создал после своей главной формы, то что бы установить приоритет, т.е. сделать, что бы окно загрузки отображалось в первую очередь, я из пункта меню делаю: проект->опции->и в выпадающем списке выбираю эту окно загрузки.

Но такой вариант не катит! Ошибка заключается в том, что сам этот код нельзя писать по событии FormCreate.
Подскажите, пожалуйста, как мне правильно реализовать свою задачу?
фЁдОр вне форума Ответить с цитированием
Старый 04.02.2008, 11:49   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

http://programmersforum.ru/showthrea...F2%E0%E2%EA%E0
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 04.02.2008, 18:58   #3
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

AlDelta, спасибо за ссылку! Буду теперь разбираться.

Все перебрал по ссылкам, десятки раз перечитывал, почти весь день убил на это, но к сожалению так и не смог разобраться, что к чему. Эх... ладно на сегодня, пожалуй хватит. Завтра снова в бой, но должен же я сделать эту заставку, а казалоль такая простая вещь.

Последний раз редактировалось zetrix; 04.02.2008 в 21:36.
фЁдОр вне форума Ответить с цитированием
Старый 04.02.2008, 19:48   #4
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Цитата:
Сообщение от фЁдОр Посмотреть сообщение
но должен же я сделать эту заставку, а казалоль такая простая вещь.
В принципе, всё не так уж и сложно. Допустим, имеется главная форма (TMainForm) и форма-заставка (TSplashForm). Нужно убрать форму-заставку из списка автосоздаваемых (в опциях проекта), а в исходниках проекта записать нечто следующее:
Код:
program MyProject;

uses
  Windows, Forms, SysUtils,
  SplashFormUnit in 'SplashFormUnit.pas' {SplashForm},
  MainFormUnit in 'MainFormUnit.pas' {MainForm};

{$R *.res}

begin
  // Создание и запуск формы-заставки
  SplashForm := TSplashForm.Create(Application);
  SplashForm.Visible := True;
  SplashForm.BringToFront;
  Application.ProcessMessages;

  // Создание главной формы
  Application.CreateForm(TMainForm, MainForm);
  Application.Run;
end.
Здесь SplashForm - это переменная, которая автоматически создается для класса формы TSplashForm и находится в модуле SplashFormUnit (т.е. SplashForm: TSplashForm)

В главной форме, в обработчике OnCreate можно форму-заставку удалить. А еще лучше это сделать в обработчике OnShow, т.е. непосредственно перед появлением главной формы на экране, когда вся инициализация уже гарантированно закончилась. Например:
Код:
// Удаление формы-заставки
SplashForm.Visible := False;
SplashForm.Free;
Jeni вне форума Ответить с цитированием
Старый 05.02.2008, 10:16   #5
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Все ребят, спасибо большое, все получилось!
фЁдОр вне форума Ответить с цитированием
Старый 05.02.2008, 10:46   #6
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Все ребят, получилось . Спасибо большое за оказанную помощь!
Если кому не составит труда, то объясните, пожалуйста, я правда даже не знаю как правильно назвать этот раздел, где содержится информация об используемых формах. Для чего используется этот раздел, ну понятно, что я его использовал для создания заставки, но ведь это не основное его назначение? Что это за зверь такой?
Что б не быть голословным и пояснить, что я имею ввиду привожу код этого раздела:
Код HTML:
program BDDiska;

uses
  Forms,
  FormDisk in 'FormDisk.pas' {Form1},
  PoiskTowaraUnit2 in 'PoiskTowaraUnit2.pas' {Form2},
  spravka_o_razrabotchike in 'spravka_o_razrabotchike.pas' {Form3},
  zayavka_na_sotrudnichestvo in 'zayavka_na_sotrudnichestvo.pas' {Form4},
  karta_stavrop in 'karta_stavrop.pas' {Form5},
  zagruzka in 'zagruzka.pas' {Form6};

{$R *.res}

begin
  Application.Initialize;
  Form6:=TForm6.Create(Application);
  form6.Visible:=true;
  form6.BringToFront;
  Application.ProcessMessages;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.Run;
end.
Понимаю, что некоторым людям вопрос покажется глупым, но не дошел я еще до этой ясности, поэтому прошу Вас просвятить меня.

И еще для полного понимания Jeni или кто знает, поясните, пожалуйста, вот эту строчку кода:
form6.BringToFront; //
form6 - эта форма заставки.
фЁдОр вне форума Ответить с цитированием
Старый 05.02.2008, 11:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Эта строчка помешает окно на перед чтоб его увидеть можно было.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.02.2008, 22:59   #8
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Я не совсем понял, что именно требуется пояснить, но попробую (так, как я понял вопрос).

Цитата:
Сообщение от фЁдОр Посмотреть сообщение
не знаю как правильно назвать этот раздел, где содержится информация об используемых формах. Для чего используется этот раздел, ну понятно, что я его использовал для создания заставки, но ведь это не основное его назначение? Что это за зверь такой?
Этот самый "раздел" и есть, с формальной точки зрения, сама программа. Об этом говорит первая строка program BDDiska; Всё остальное - это лишь подключаемые модули. Правда этот файл создается средой разработки автоматически и менять там что-то вручную требуется редко, поэтому может создаваться впечатление, будто программа - это модуль с главной формой, но это не так - главная форма просто запускается автоматически.

Цитата:
Сообщение от фЁдОр Посмотреть сообщение
uses
Forms,
FormDisk in 'FormDisk.pas' {Form1},
PoiskTowaraUnit2 in 'PoiskTowaraUnit2.pas' {Form2},
spravka_o_razrabotchike in 'spravka_o_razrabotchike.pas' {Form3},
zayavka_na_sotrudnichestvo in 'zayavka_na_sotrudnichestvo.pas' {Form4},
karta_stavrop in 'karta_stavrop.pas' {Form5},
zagruzka in 'zagruzka.pas' {Form6};
Это список подключаемых модулей. Строка имя_модуля in файл_модуля означает, что данный модуль входит в состав проекта как составная часть. В фигурных скобках указывается имя формы (или фрейма), но это просто комментарий. Порядок расположения модулей обычно не имеет значения, но иногда это может быть важно, если в модулях в секциях initialization/finalization выполняются какие-то действия, особенно с общими глобальными переменными - раньше "срабатывают" модули, записанные первыми (для finalization - наоборот).

Цитата:
Сообщение от фЁдОр Посмотреть сообщение
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm5, Form5);
Application.Run;
end.
Строка Application.Initialize не имеет особого значения для обычных программ, важна только для тех, которые используют автоматизацию OLE и прочие майкрософтовские примочки. Но и вреда от нее нет.
Application.CreateForm(TFormX, FormX); - последовательное создание форм. Форма, которая таким образом создается первой и является главной.
Application.Run; - собственно запуск программы. По большому счету запускается процедура обработки сообщений - циклически просматривает очередь сообщений для данной программы. Если сообщение есть - вызывается некоторый обработчик сообщения (в итоге эти сообщения воспринимаются компонентами как события). Если сообщений нет - цикл повторяется. И так до выхода из программы. Это, конечно, упрощенная модель.

form6.BringToFront; - необязательная строка, но без нее форма-заставка может оказаться иногда закрыта другими окнами.

Application.ProcessMessages; - тоже необязательно, но очень желательно, т.к. прорисовка окон (и вообще, любых компонентов) имеет очень низкий приоритет. В результате, если, например, главная форма в момент создания выполняет ресурсоемкие операции, то заставка, хотя формально и запустится, но может просто не прорисоваться на экране.
Jeni вне форума Ответить с цитированием
Старый 06.02.2008, 00:27   #9
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

[QUOTE=фЁдОр;72445]
program BDDiska;

uses
Forms,
FormDisk in 'FormDisk.pas' {Form1},
PoiskTowaraUnit2 in 'PoiskTowaraUnit2.pas' {Form2},
spravka_o_razrabotchike in 'spravka_o_razrabotchike.pas' {Form3},
zayavka_na_sotrudnichestvo in 'zayavka_na_sotrudnichestvo.pas' {Form4},
karta_stavrop in 'karta_stavrop.pas' {Form5},
zagruzka in 'zagruzka.pas' {Form6};

{$R *.res}

begin
Application.Initialize;
Form6:=TForm6.Create(Application);
form6.Visible:=true;
form6.BringToFront;
Application.ProcessMessages;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.CreateForm(TForm3, Form3);
Application.CreateForm(TForm4, Form4);
Application.CreateForm(TForm5, Form5);
Application.Run;
end.
[QUOTE]

Вообщето правильнее формы динамически создавать и удалять из памяти когда нужно, может здесь такой случай что всё сразу надо создать .
Alter вне форума Ответить с цитированием
Старый 06.02.2008, 19:37   #10
фЁдОр
Форумчанин
 
Аватар для фЁдОр
 
Регистрация: 06.09.2007
Сообщений: 908
По умолчанию

Спасибо, ребят, большое, что просветили меня! Правда интересно стало, что формы можно создавать и удалять динамически, с целью экономии памяти, но это, пожалуй, для следующей темы. Правда, чуть позже.
фЁдОр вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помощь в событии onkeydown Titan123 Общие вопросы Delphi 2 11.08.2008 17:26
Открытие нового окна, при нажатии на кнопку(Delphi). sergey31 Помощь студентам 2 24.05.2008 14:48
открытие окна в Delphi R11 Помощь студентам 3 14.02.2008 16:23
Программа отлично работает при событии Button1Click, и отказывается работать в FormCreate xTANATOSx Общие вопросы Delphi 3 19.09.2007 08:02
открытие окна в delphi dima00 Общие вопросы Delphi 14 27.06.2007 23:25