Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi 7.0

Ответить
Настройки темы
Delphi - Delphi 7.0

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Цель - создание окошка содержащее картинку и отображающее процесс запуска программы (как это делается при старте PhotoShop'а).
Имеем - форму frmSplashScreen (не автосоздаваемую) с размещенным на ней экземпляром TImage (imgSplash) и загруженной в него картинкой. На форме имеется также экземпляр TLable (lInfo) куда будем писать информацию о выполняемой работе на этапе загрузки программы (можно было бы выводить прямо на канву, но пусть так будет). Вся работа по инициализации выполняется в обработчике события OnCreate главной формы frmMain (которое до поры, до времени невидимо - Visible:=False), откуда на различных этапах по идее в frmSplashScreen.lInfo.Caption записываются различные строки отражающие идущую работу.
Реализация -

файл проекта Project.dpr:
Код: Выделить весь код
Begin
  Application.Initialize;
  With TfrmSplashScreen.Create(nil) do
   Try
     Application.Title := 'Title';
     Show;
     Update;
     Application.CreateForm(TfrmMain, frmMain);
   Finally
    Free;
   End;
  frmMain.Visible:=True;
  Application.Run;
End.
часть обработчика события OnCreate главной формы frmMain:
Код: Выделить весь код
frmSplashScreen.lInfo.Caption:='Инициализация регистров...';
frmSplashScreen.lInfo.Refresh;
 InitRegisters(Regs);
frmSplashScreen.lInfo.Caption:='Инициализация файлов проекта...';
frmSplashScreen.lInfo.Refresh;
 InitFile;
Проблема - программа генирирует исключение EAccessViolation при первом обращении к форме frmSplashScreen, то есть на строке
Код: Выделить весь код
frmSplashScreen.lInfo.Caption:='Инициализация регистров...';
При проходе в режиме отладки в окне Watch переменная frmSplashScreen имеет значение nil. Это странно в то время как на этапе создания главной формы frmSplashScreen еще не уничтожена. Это следует из того, что frmSplashScreen видна все то время, пока в обработчике события OnCreate главной формы идет подготовительная работа.
Итого - SplashScreen реализован, но не до конца - нельзя записывать в него уточняющую информацию об этапах инициализиции.

Вопрос - что подскажите, господа?

[s]Исправлено: Prisoner, 6:41 8-10-2003[/s]

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 05:38, 08-10-2003

 

Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


У меня есть альтернативный вариант показа сплэш скрина:
Делаешь новую форму, размещаешь на ней все, что угодно, и при запуске программы на событие главной формы OnShow делаешь вот так
SplashScreen.ShowModal;
У тебя показивается сплэш форма, а главная форма не показывается пока не закроется сплэш.....
А дальше делаешь все как ты делал.
Изюминка этого метода - простота!!!!
Не надо лазить по  Project.dpr  и нет никакого гемороя!!!!
Сам так всегда делаю.....
Если будут проблемы пиши....

Отправлено: 11:13, 08-10-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Spiderman
Хм... а порядок создания форм какой в таком случае? Или форма Splash создается там же в OnShow? Оки попробую, в самом деле просто...

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 13:35, 08-10-2003 | #3


Пользователь


Сообщения: 61
Благодарности: 0

Профиль | Отправить PM | Цитировать


Порядок создания форм не имеет значения!!!!
Дело вот в чем, сначала ведь все формы создаются, а потом показиваються, так ведь?
Вот, у тебя формы создадуться, а потом наступит евент OnShow, вот он и покажет твой сплеш!

Отправлено: 13:35, 09-10-2003 | #4


Новый участник


Сообщения: 44
Благодарности: 0

Профиль | Отправить PM | Цитировать


Естественно у тебя буде вылетать Access vialation, сам подумай, ведь ты свой splash создаешь локально и естественно твоя frmMain о нем ничего не знает, поэтому нужно этот splash перевести в зону видимости frmMain, например введи "переменную" типа TForm в frmMain, далее после создания splasha присвой его этой переменной и далее работай в frmMain с этим объектом как со splash.

Отправлено: 05:32, 10-10-2003 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Delphi 7.0

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Delphi | UpperCase на Delphi 7 Cognolio Программирование и базы данных 3 26-01-2006 15:42
Delphi - Delphi Surround Программирование и базы данных 11 10-01-2004 22:13
Delphi - Delphi Zx Программирование и базы данных 3 27-08-2003 10:19
Delphi - Delphi Roman Go Программирование и базы данных 9 25-12-2002 15:48
Delphi - Delphi Roman Go Программирование и базы данных 11 11-12-2002 14:43




 
Переход