Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.20;
Скачать: CL | DM;

Вниз

Долгая загрузка   Найти похожие ветки 

 
Alibaba ©   (2004-01-10 16:32) [0]

Привет всем!
С прошедшими Вас праздниками!

Такой вопрос.
Программа при запуске выполняет довольно большой обьем вычислений, загрузок, проверок и т.д.
При этом главное окно программы криво прорисовывается.
Когда программа все сделала - окно нормальное.

Как мне сделать что-бы при запуске программы выводилось небольшое дополнительное окно с надписью "Загрузка..." при этом выполнялись все действия.
Когда все действия завершены - необходимо что-бы дополнительное окно закрылось, а главное открылось.

Вот.


 
DDA ©   (2004-01-10 16:47) [1]

добавь вторую форму , напиши на ней "Загрузка"
первую сделай невидимой


 
Andy BitOff ©   (2004-01-10 16:53) [2]

Смотри проект Delphi\Demos\Db\MastApp\mastapp.dpr
В часности юниты Mastapp и Splash


 
Kettle of delphi   (2004-01-10 17:06) [3]

По-моему, плохой совет. Такой подход ничего не даст, если обе формы будут выполняться в одном потоке (форма вначале нарисуется, но с перерисовкой будут тормоза). А судя по твоему вопросу, так оно и будет.

Даю другой совет. Не факт, что хороший:
Раскидай по загрузочному коду оператор

Application.ProcessMessages;

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

Например:

procedure1;
Application.ProcessMessages;

procedure2;
Application.ProcessMessages;

for i := 1 to 20000000 do
begin
procedure3;
if (i)mod(500)=0 then Application.ProcessMessages;
end;

Загрузка станет еще дольше, зато окошки будут корректно рисоваться.


 
Alibaba ©   (2004-01-10 17:12) [4]

>Kettle of delphi (10.01.04 17:06) [3]

Мне не надо что-бы окошки корректно рисовались во время загрузки.
Мне надо что-бы главная форма вообще отсутствовала/была невидимой во время загрузки. Видимой была только дополнительная форма с надписью "Загрузка...". А когда все загрузочные процедуры выполнятся - дополнительная форма - Hide, главная форма - Visible:=True.

Так делает сама Дельфя во время загрузки.


 
Andy BitOff ©   (2004-01-10 17:22) [5]

Так я тебе именно про это и написал


 
Юрий Федоров ©   (2004-01-10 17:34) [6]

да, точно, в дпр ее добавляем
и будет счатье.
создаем с параметром nil
разрушаем с помощью release


 
Kettle of delphi   (2004-01-10 17:35) [7]

Alibaba, твои рассуждения представляются мне непоследовательными. Потому что ты пишешь:

>Как мне сделать что-бы при запуске программы выводилось
>небольшое дополнительное окно с надписью "Загрузка..." при этом
>выполнялись все действия.

И далее:

>Мне не надо что-бы окошки корректно рисовались во время загрузки.
>Мне надо что-бы главная форма вообще отсутствовала/была
>невидимой во время загрузки. Видимой была только дополнительная
>форма с надписью "Загрузка...".

В связи с этим, возникает вопрос: А НА ЧЕМ ТЫ БУДЕШЬ ВЫВОДИТЬ ТЕКСТ "Загрузка..."???

У меня есть подозрение, что выводить ты его будешь все же, на окошке. А окошко (форму) надо перерисовывать.

=================
1) Рисуешь пустую форму, внутри нее, например с помощью объекта TLabel, текст "Загрузка...";
2) Для главной формы ставишь свойство visible в состояние false;
3) Для формы с надписью "Загрузка..." ставишь свойство visible в состояние true;
4) Всюду, где есть продолжительные вычисления, ведущиеся в основном потоке, стравишь оператор Application.ProcessMessages;
5) Когда заканчивается инициализация (т.е., твои предварительные долгие вычисления), для главной формы ставишь ее свойство visible в положение true, для формы с надписью "Загрузка..." ставишь ее свойство visible в положение false.

Пункт 4 нужен вот для чего: если ты запустишь только свое приложение, все будет замечательно. Пользователь увидит надпись "Загрузка..." и сразу поймет, в чем дело :)

НО! Если у пользователя работает еще несколько оконных приложений и одно из них случайно окажется поверх ТВОЕЙ формы с надписью "Загрузка...", а потом вновь откроет ТВОЮ форму, то Windows попросит твое приложение перерисовать слово "Загрузка...". А твое приложение не сможет ответить, т.к. будет занято непрерывным изначальным расчетом. Будет некрасиво.
Оператор Application.ProcessMessages, о котором и говорится в пункте 4, поможет корректно выйти из этой ситуации.


 
WithOut Any ... ©   (2004-01-10 18:11) [8]

Andy BitOff © (10.01.04 16:53) [2]
Ответил слишком исчерпывающе, чтобы продолжать обсуждение


 
olookin ©   (2004-01-10 18:17) [9]

не проще ли все вычисления поставить на OnShow главной формы проекта? Тогда по умолчанию эта форма не появится до завершения вычислений.



Страницы: 1 вся ветка

Текущий архив: 2004.01.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
14-63346
Stas
2003-12-30 09:06
2004.01.20
C НОВЫМ ГОДОМ !!!


4-63457
Jampir
2003-11-16 20:32
2004.01.20
получение цвета точки рабочего стола


7-63425
zoltan
2003-11-02 19:38
2004.01.20
ТРЕЙ


14-63310
быдло
2003-12-22 16:42
2004.01.20
дельфи - не очинь удачное средство разроботки программ


1-63152
Intell
2004-01-06 16:47
2004.01.20
Как убить любой процесс?