Форум: "Основная";
Текущий архив: 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