Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2010, 13:13   #1
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
Восклицание Не привязанный прогресс при запуске приложения

Нужна заставка (splash), которая будет висеть на экране до запуска основного окна приложения. Меня не устраивает вариант, когда splash просто висит заданное кол-во времени. Должно быть что-то вроде:

Код:
begin
  Application.Initialize;
  fmProgress := TfmProgress.Create(Application);
  fmProgress.Show;
  fmProgress.Update;

  Application.CreateForm(TForm1, Form1);
  ...
  fmProgress.Free;
  Application.Run;

Хочу, чтобы там бегал прогресс бар. Он не должен отображать реальный прогресс. Чтобы сделать его таким, как например при старте Windows, нужно:

Код:
const
PBS_MARQUEE = $08;
PBM_SETMARQUEE = WM_USER + 10;
....
SetWindowLong(ProgressBar1.Handle, GWL_STYLE,
GetWindowLong(ProgressBar1.Handle, GWL_STYLE) Or PBS_MARQUEE);
{ Включить }
SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 1, FSpeed);
...
{ Выключить }
SendMessage(ProgressBar1.Handle, PBM_SETMARQUEE, 0, 0);
Я так понимаю, что для этого нужно работать с TThread. Но опыта работы с потоками нету, собственные попытки не привели к желаемому результату. Прошу помочь. Спасибо.
altcore вне форума Ответить с цитированием
Старый 14.07.2010, 13:27   #2
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

а реальный прогресс чего должен отображаться - загрузки библиотек VCL?
которые как раз и занимают большинство времени?

так-же при загрузке VCL - ProcessMessages не везде (точнее нигде) прописано,
будет притормаживать.

ЗЫ: пробовали уже - ничего путнего не получилось.....
если только симулировать процесс загрузки.
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 14.07.2010, 16:10   #3
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

Должна просто бегать полоска прогресса... В моей программе неудобно делать реальный прогресс чего-либо, а приложение запускается 3-5 секунд. Я хочу, чтобы пользователь знал, что приложение работает и до появления главной формы видел окно с бегающей полоской.
altcore вне форума Ответить с цитированием
Старый 14.07.2010, 16:14   #4
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

предлагаю сделать анимированый гиф, который будет бесконечно крутится

и кстати обновлять его можно периодически при загрузке

ну и сам TThread и сложен и прост....

http://www.delphimaster.ru/articles/thread/index.html
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 14.07.2010, 17:15   #5
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

Дело в том, что код в моей процедуре, схожей с DoWork по вашей ссылке, почему-то начинает выполнятся только после запуска приложения.

и спасибо за интерес к моей проблеме..
altcore вне форума Ответить с цитированием
Старый 14.07.2010, 17:16   #6
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от altcore Посмотреть сообщение
Дело в том, что код в моей процедуре, схожей с DoWork по вашей ссылке, почему-то начинает выполнятся только после запуска приложения.

и спасибо за интерес к моей проблеме..
продемонстрируйте код
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Старый 14.07.2010, 17:23   #7
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

Ну вот набросок:
Код:
procedure TfmProgress.KillProgress;
begin
  NewThread.DoTerminate;
end;

procedure TNewThread.Execute;
var
  i: integer;
begin
  while not Terminated do
    Synchronize(DoWork);
end;

procedure TNewThread.DoWork;
begin
 // здесь любой код
end;

procedure TfmProgress.FormShow(Sender: TObject);
begin
  NewThread := TNewThread.Create(true);
  NewThread.FreeOnTerminate := true;
  NewThread.Priority := tpLower;
  NewThread.Resume;
end;
вызов формы как в посте №1
altcore вне форума Ответить с цитированием
Старый 14.07.2010, 20:14   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Спешу вас огорчит уважаемый, боюсь что Synchronize(DoWork); код указанной функции DoWork будет выполнен в одном и том же потоке, а именно в главном потоке где собственно и исполняется GUI приложения. Мои вам советы
1. читаем туториалы по работе и создании многопоточных приложений в Delphi да и вообще в Windows (WinAPI).
2. чтобы удостоверится, открываем интернет и читаем внимательно назначение функции TThread.Synchronize()
BOBAH13 вне форума Ответить с цитированием
Старый 16.07.2010, 10:52   #9
altcore
Пользователь
 
Регистрация: 31.03.2010
Сообщений: 38
По умолчанию

А если я вам скажу, что прогресс начинает прокручивается, когда основное приложение запустилось?
altcore вне форума Ответить с цитированием
Старый 16.07.2010, 10:59   #10
Korben5E
Форумчанин
 
Аватар для Korben5E
 
Регистрация: 13.07.2010
Сообщений: 346
По умолчанию

Цитата:
Сообщение от altcore Посмотреть сообщение
А если я вам скажу, что прогресс начинает прокручивается, когда основное приложение запустилось?
да... именно это и сказали

...код указанной функции DoWork будет выполнен в одном и том же потоке, а именно в главном потоке где собственно и исполняется GUI приложения....

я очень давно не занимался и код у себя не нашел... сейчас не помню...(с памятью проблемы )

может BOBAH13 подробно объяснит в чем дело?
Non est culpa vin, sed culpa bibentis
Korben5E вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при запуске приложения -=pasha=- Общие вопросы Delphi 10 07.07.2010 13:46
Ошибка при запуске СиСи+ Общие вопросы C/C++ 4 17.06.2010 08:24
Ошибка при запуске wowan.mix Помощь студентам 1 16.05.2010 13:06
Проверка при запуске Nice42ru Помощь студентам 10 02.01.2010 18:52
"Ошибка приложения" при запуске мидлета hotman Общие вопросы по Java, Java SE, Kotlin 0 04.09.2008 15:16