Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   *.exe и timer (http://forum.oszone.net/showthread.php?t=48827)

Millenium 02-05-2005 02:00 320887

*.exe и timer
 
можноли зделать следуюшае:
когда нажемаеш кнопку *.exe открывается и через 5 секунд закрывается( Form1 не должно закрыватся).Язык Dephi

XCodeR 02-05-2005 09:29 320918

1.Метод ламера:
Берем с вкладки System компоненту TTimer
В её единственном событии пишем что-то типа(пишу на C)

ShellExecute(...);
Timer1->Enabled=false;

Свойсвто Enabled ставим в false;

При нажатии на кнопку:
Enabled таймера в true.
Усе.

2. Метод не ламера - рой в сторону SetTimer(если мне память не изменяет)...



Bagle 02-05-2005 15:43 320970

что то не вижу Timer oткрывает exe. Событию я сам знаю, просто не знаю как из ехе файла зделать Splash Screen. вот такой вопрос

Savant 02-05-2005 23:20 321046

Bagle
Гугль в помощь - http://www.google.ru/search?hl=ru&q=...een+delphi&lr=

Bagle 03-05-2005 15:33 321241

aqa,spasibo uje chitayu :)

pva 04-05-2005 13:46 321556

Показать форму с картинкой, закрыть её на сообщение от таймера и показать рабочую форму (show) в этом сообщении.

Millenium 05-05-2005 01:44 321780

ne poluchayetsya tak,viletayet oshibka
esli mojete skinte isxodnik
samphantom73@yahoo.com

Savant 05-05-2005 01:46 321781

Millenium
Когда и какая? Будем разбираться

Millenium 05-05-2005 02:19 321787

Код:

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]. Транслитом желательно не писать

Savant 05-05-2005 12:40 321886

Millenium
Приведенный выше код вполне корректен и должен работать. Единственное что, возможно, Вы забыли подключить модуль Windows
Код:

uses
  Forms,
  ... // Здесь перечисление доступных форм
  Windows;

Кстати говоря, использование Sleep() не особо удачный вариант для одного потока, так как работа программы приостанавливается на это же время. Вечерком может положу тут более интересное решение.

Millenium 05-05-2005 19:17 321951

Вечерком может положу тут более интересное решение.

былбы очень признателен,а то мучаюсь тут.

Savant 05-05-2005 22:08 321989

Ну вот собственно этот 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 кб)


Время: 10:06.

Время: 10:06.
© OSzone.net 2001-