Перейти к содержанию
Fire Monkey от А до Я
  • 0

Splash Form не отображается


skaplich

Вопрос

Всем привет. в VCL таких проблем не имел.

 

Delphi XE8

 

файл проекта

 

 

Application.Initialize;
frmSplash := TfrmSplash.Create(Application);
frmSplash.LabelMessage1.Text:='Загрузка программы';
frmSplash.LabelMessage2.Text:='';
frmSplash.Show;

 

if frmSplash.Visible then
begin
//MessageDlg('видимая', System.UITypes.TMsgDlgType.mtInformation, [system.UITypes.TMsgDlgBtn.mbOk], 0);
end;

 

Sleep(1000);

Application.CreateForm(TfrmDM, frmDM);

Application.CreateForm(TfrmMain, frmMain);

 

frmSplash.Hide;
Application.Run;

 

 

форма frmSplash невидима при закрузке, если комментарий стять со строки MessageDlg, то становиться видимой

 

вот такие чудеса

 

далее при создании главной формы будет код, если меняю текст в splash форме, то ничего не происходит

procedure TfrmMain.FormCreate(Sender: TObject);

 

 

if not FileExists(GetCurrentDir + '\base.db') then
begin
Application.ProcessMessages;
frmSplash.LabelMessage1.Text := 'Создание базы данных';
frmSplash.LabelMessage2.Text := 'Создание таблиц'; // на экране ничего не меняет

Sleep(3000); // чтобы увидеть

end;

 

Не меняет текст 

 

Application.ProcessMessages;

frmSplash.LabelMessage2.Repaint;

не помогает

 

 

Если начинаю работать 

 

Application.CreateForm(TfrmDM, frmDM);
Application.CreateForm(TfrmMain, frmMain);Application.CreateForm(TfrmDM, frmDM);

frmDm.FDConnection1.Params.Add('Database=' + GetCurrentDir + '\base.db');
frmDm.FDConnection1.Params.Add('DriverID=SQLite'); // тип БД

в файле проекта - валиться вообще AppCrash

а в TfrmMain.FormCreate - работает код

 

Нужна реально работающая Splash форма с возможностью изменения текста Label и чтобы это отображалось на экране.

Splash форма не убивается, а Hide, в дальнейшем можно использовать ее отображение ,когда программа работает какое-то время

 

Жду ответов.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

То, что вы сказали форме/любому другому контролу "появись/изменись" не дает моментального эффекта на мобильных платформах. Контрол становится в очередь на перерисовку и "в реале" изменится, емнип, на OnIdle приложения.

Вердикт - Sleep - не поможет, а processmrssages нужен после действий с контролом. Т.е. - вместо Sleep.

Ссылка на комментарий
  • 0

Добрый день!

 

Firemonkey имеет много отличий в работе от VCL. Одно из них связано с порядком создания форм. Когда в модуле проекта вы видите код:

 

Application.CreateForm(TfrmDM, frmDM);

 

То это не означает, что форма или модуль будут созданы в в момент исполнения этого вызова, вместо этого программа запомнит, что нужно создать такую форму TfrmDM и поместить указатель на нее в frmDM. Реальное создание форм произойдет при выполнении Application.Run. Поэтому, все обращения к "созданным" формам и модулям в модуле проекта приведет к ошибке.

Чем еще FM занимается до реального создания основной формы - одним разработчикам известно, и я бы поостерегся выполнять какие либо действия связанные с отрисовкой форм в модуле приложения.

Набросал пример, посмотрите, возможно такое решение вам подойдет.

SplashDemo.zip

Изменено пользователем Кривяков Виталий
Ссылка на комментарий
  • 0

Application.ProcessMessages;

 

после тоже не помогает, пробовал

 

 

Кривяков Виталий
спасибо, посмотрю, многое пояснили, а тоя  все думал, чего начинаю обращаться к типа созданным формам, а у меня ошибки валятся

FMX особая штука, на которую смотреть надо по-другому

и хоть и книжку читал, не помогло!

Ссылка на комментарий
  • 0

Пример глянул, суть понятна ,я так уже делал - именно в создании главной формы - это лучше всего.

Но все хотел вернуться и работать как в VCL.

На ошибках учаться.

Всех благодарю, далее сам буду копать.

Ссылка на комментарий
  • 0

сделал, все работает

 

frmSplash.LabelMessage1.Text := 'Создание базы данных';
frmSplash.LabelMessage2.Text := 'Создание таблиц';
frmSplash.LabelMessage1.Repaint;
frmSplash.LabelMessage2.Repaint;
Application.ProcessMessages;

 

при изменении текста на форме и все отображается теперь

всем спасибо, надо учитывать особенности FRX  и понимать, как он работает.

тема закрыта

Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...