Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
3-62976
GIL
2003-12-24 12:03
2004.01.20
Alias


7-63409
Eldar
2003-10-26 18:13
2004.01.20
Отключит и выключит мышку и клавиатуру


1-63243
Iceburger
2004-01-09 09:47
2004.01.20
MDI-приложения


14-63370
Вася Добрый
2003-12-29 12:18
2004.01.20
Как сделать UDF


1-63169
andruxin
2004-01-10 19:36
2004.01.20
как определить над каким компонентом(имя) была нажата кнопка на м





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский