Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pause [NT4, Win2k]


KIG_S ©   (2002-06-21 09:18:00) 

Вопрос конечно банальный но КАКсделать появление Splashокна с
паузой
. Тоесть появилось Splash окно и зависло на X секунд.


Александр   (2002-06-22 19:01:00) [1]

1. Создаете форму (например SplashForm).
2. Объявляете ее свободной (availableForms).
3. В Progect Source вставляете следующее (например):


program Splashin;
uses
Forms,
Main in "MAIN.PAS",
Splash in "SPLASH.PAS"
{$R *.RES}
begin
try
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
Application.CreateForm(TMainForm, MainForm);
SplashForm.Hide;
finally
SplashForm.Free;
end;
Application.Run;
end.

И форма SplashForm держится на экране пока выполняется Create в главной форме. Но иногда она появляется и пропадает очень быстро, поэтому нужно сделать задержку:
1. Добавляете на форму таймер с событием:


procedure TSplashForm.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
end;

2. Событие onCloseQuery для формы:


procedure TSplashForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := Not Timer1.Enabled;
end;

3. И перед SplashForm.Hide; ставите цикл:

repeat
Application.ProcessMessages;
until SplashForm.CloseQuery;

4. Все! Осталось установить на таймере период задержки 3-4 секунды.
5. На последок, у такой формы желательно убрать Caption:
SetWindowLong (Main.Handle,GWL_STYLE, GetWindowLong(Main.Handle, GWL_STYLE) AND NOT WS_CAPTION OR WS_SIZEBOX);


z-voxel   (2002-06-22 17:58:00) [2]

Поставь себе RxLibrary 2.75


Юрий Зотов   (2002-06-21 12:15:00) [3]

Sleep - это ОЧЕНЬ плохо. Потому что во время паузы окно Splash"а не будет перерисовываться - полная лажа получится, а не Splash.

А вот так будет нормально.

const
Pause := 2000; // миллисекунд
var
StartTick: DWORD;
...
StartTick := GetTickCount;
while StartTick + Pause < GetTickCount do
Application.ProcessMessages;

Надо только иметь в виду, что этот цикл даст 100%-ную загрузку процессора, поэтому его лучше использовать при коротких паузах. Если же пауза должна быть достаточно длинной, то Вам нужен цикл с вызовом MsgWaitForMultiplyObjects (c QS_PAINT) и вызовом Application.ProcessMessages, если результат не WAIT_TIMEOUT.


VDen   (2002-06-21 09:19:00) [4]

Перед уничтожением Splash sleep(X*1000)


Наверх

Титульная страница Поиск, карта сайта Написать письмо