2011-02-01 2 views
2

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

  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

ответ

9

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

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

+3

Фактическое обновление() будет делать то же самое синхронно. цикл сообщений уже существует в этой точке, но поток VCL не имеет возможности рисовать уже недействительное окно. –

+0

Спасибо. Звучит правильно, но это не имеет никакого значения. Кажется, что что-то занимает много времени и очищает splashimage. –

+0

ProcessMessages() не ждет. HandleMessage() делает –

0

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

+0

Я немного упростил код. Существует вызов DatamoduleCreate за кодом init. Это загружает модель и занимает некоторое время. Я хочу закрыть всплеск, когда это будет завершено. –

+0

@Roland Бит кода, который вы вытащили, был решающим моментом, который позволил бы нам решить проблему! –

0

Думаю, я понимаю это сейчас. Мое приложение использует Жирный шрифт, и для загрузки модели требуется несколько секунд. В это время брызги пустые. Мне удалось немного уменьшить это время, но я не хочу загромождать внутренности Bolds SetFromModel с Application.ProcessMessages.

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

/Roland

Смежные вопросы