Несколько секунд отображается пустое изображение - PullRequest
2 голосов
/ 01 февраля 2011

В моем приложении у меня есть заставка при подключении к базе данных и другой инициализации. Он отлично работает, чтобы показать изображение-заставку, но там нет пробела. Таким образом,

  1. Заставка загружается и показывается за доли секунды.
  2. Заставка стала пустой 2-3 секунды.
  3. Всплеск изображение отображается снова несколько секунд.
  4. Всплеск закрыт.

Есть ли умная вещь, чтобы просто показать изображение как можно быстрее и удалить пустое изображение?

Код в DPR-файле:

Application.Initialize;

SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
// Tried Splash.Update here but no difference.

SplashForm.SetPos(15);
// Init code
SplashForm.SetPos(30);

// More Init code
SplashForm.SetPos(100);

SplashForm.Close;

Application.Run;

И блок заставки:

procedure TSplashForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TSplashForm.FormCreate(Sender: TObject);
begin
  pbLoading.Properties.Text := 'Loading ' + TClientConfig.Instance.AppTitle + '...';
end;

procedure TSplashForm.SetPos(aPos: Integer);
begin
  pbLoading.Position := aPos;
  UpDate;
end;

С уважением Roland

Ответы [ 3 ]

9 голосов
/ 01 февраля 2011

Ваша SplashForm должна получить сообщение WM_PAINT, чтобы показать себя, и этого не произойдет, если не работает насос сообщений.

Положите Application.ProcessMessages после SplashForm.Show.

0 голосов
/ 01 февраля 2011

Мне кажется, я понимаю это сейчас.Мое приложение использует Bold, и загрузка модели занимает несколько секунд.Именно в это время всплеск остается пустым.Мне удалось немного сократить это время, но я не хочу загромождать внутреннее содержимое Bolds SetFromModel с помощью Application.ProcessMessages.

Я думаю, что все в порядке.Но спасибо за ваши комментарии.это указывает мне правильное направление.

/ Роланд

0 голосов
/ 01 февраля 2011

Возможно, это не так очевидно, но ваш код отображает заставку, а затем сразу же закрывает ее. Что произойдет, если вы закомментируете строку с надписью SplashForm.Close?

...