Главная страница
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.029 c
1-63093
Zheks
2004-01-07 19:14
2004.01.20
Поочерёдная запись в файл двумя разними программами.


11-63048
Юрий
2003-05-04 18:43
2004.01.20
TKolRichEdit и TKolListBox


4-63453
Lexich
2003-11-14 18:58
2004.01.20
Нужно прочитать трек с музыкального CD используя WinAPI


1-63223
korvet
2004-01-08 09:35
2004.01.20
Печать номера страници в модуле PRINTERS


3-62978
GIL
2003-12-24 11:09
2004.01.20
Значения по умолчанию