Показать полную графическую версию : *.exe и timer
Millenium
02-05-2005, 02:00
можноли зделать следуюшае:
когда нажемаеш кнопку *.exe открывается и через 5 секунд закрывается( Form1 не должно закрыватся).Язык Dephi
1.Метод ламера:
Берем с вкладки System компоненту TTimer
В её единственном событии пишем что-то типа(пишу на C)
ShellExecute(...);
Timer1->Enabled=false;
Свойсвто Enabled ставим в false;
При нажатии на кнопку:
Enabled таймера в true.
Усе.
2. Метод не ламера - рой в сторону SetTimer(если мне память не изменяет)...
что то не вижу Timer oткрывает exe. Событию я сам знаю, просто не знаю как из ехе файла зделать Splash Screen. вот такой вопрос
Bagle
Гугль в помощь - http://www.google.ru/search?hl=ru&q=Splash+screen+delphi&lr=
aqa,spasibo uje chitayu :)
Показать форму с картинкой, закрыть её на сообщение от таймера и показать рабочую форму (show) в этом сообщении.
Millenium
05-05-2005, 01:44
ne poluchayetsya tak,viletayet oshibka
esli mojete skinte isxodnik
samphantom73@yahoo.com
Millenium
Когда и какая? Будем разбираться
Millenium
05-05-2005, 02:19
begin
SplashScreen := TSplashScreen.Create(Application);
try
SplashScreen.Show;
Application.Initialize;
SplashScreen.Update;
Sleep(1000); // Or a delay command.
Application.CreateForm(TForm1, Form1);
SplashScreen.Hide;
finally
SplashScreen.Free;
end;
Application.Run;
end.
vot na inete nashol koe chto,no ne pashet toje.verneye ya ne ponel chto takoye Sleep(1000) (eto navernika kak bi timer).kak eto ponyat?
Для выделения кода есть тэг [code] (http://forum.oszone.net/misc.php?do=bbcode#code). Транслитом желательно не писать
Millenium
Приведенный выше код вполне корректен и должен работать. Единственное что, возможно, Вы забыли подключить модуль Windows
uses
Forms,
... // Здесь перечисление доступных форм
Windows;
Кстати говоря, использование Sleep() не особо удачный вариант для одного потока, так как работа программы приостанавливается на это же время. Вечерком может положу тут более интересное решение.
Millenium
05-05-2005, 19:17
Вечерком может положу тут более интересное решение.
былбы очень признателен,а то мучаюсь тут.
Ну вот собственно этот example, как обещал...
Решил особо не заморачиваться и сделать всё попроще.
Основные моменты:
1. Создаем новый поток, который и будет убирать в нужное время splash screen. Указываем ему приоритет как Idle, чтобы не мешал основному процессу загрузки. Этот поток будет ждать, пока не будет создана главная форма и затем через 250 мс закроет заставку.
procedure TMyThread.Execute;
begin
Form1 := nil;
while Form1 = nil do ;
Sleep(250);
Synchronize(SplashScreen.Hide);
Synchronize(SplashScreen.Free);
end;
2. На самой форме заставки размещаем картинку и TLabel, хотя можно и другие комбинации. В TLabel можно выводить какую-либо информацию о процессе загрузки приложения.
...
myThread := TMyThread.Create(False);
SplashScreen := TSplashScreen.Create(Application);
SplashScreen.Show;
SplashScreen.Label1.Caption := '> Loading.... Please wait';
SplashScreen.Update;
...
3. Т.к. заставки используются обычно только при долгой загрузке программы, то я включил специальный код для задержки исполнения программы на 2-3 с.
var
i: Integer;
a: Extended;
...
// имитация "тяжелой" загрузки
a:= 1.0;
for i:=1 to 9999999 do a:=sin(a) * cos(i * 1.0);
...
Естественно, в реальной программе вместо этого кода будут операции по загрузке конфигурации и инициализации модулей или что-то подобное. После выполнения этих операций создается главная форма и запускается основной цикл сообщений. Вспомним, что созданный дополнительный поток следит за состоянием главной формы и закроет форму с заставкой через 250 мс.
...
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
В общем-то и всё :)
Исходник и откомпилированный exe тут - http://www.webfile.ru/290232 (205 кб)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.