Prisoner
08-10-2003, 05:38
Цель - создание окошка содержащее картинку и отображающее процесс запуска программы (как это делается при старте 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 реализован, но не до конца - нельзя записывать в него уточняющую информацию об этапах инициализиции.
Вопрос - что подскажите, господа?
Исправлено: Prisoner, 6:41 8-10-2003
Имеем - форму 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 реализован, но не до конца - нельзя записывать в него уточняющую информацию об этапах инициализиции.
Вопрос - что подскажите, господа?
Исправлено: Prisoner, 6:41 8-10-2003