Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Внизперерисовка формы-заставки Найти похожие ветки
← →
asdf2 (2008-04-08 12:40) [0]Добрый день всем.
как заставить SplashForm перерисовывать себя, если в процессе загрузки по ней "проехали" окном другого приложения?
Application.Initialize;
Application.CreateForm(TfMain, fMain);
Application.CreateForm(TfSplash, fSplash);
fSplash.Show;
fSplash.Refresh;
Application.ProcessMessages;
Application.CreateForm(TdmMain, dmMain);
fSplash.Hide;
fSplash.Free;
Application.Run;
← →
Семеныч (2008-04-08 12:47) [1]> asdf2 (08.04.08 12:40)
1. Сделать окно SplashForm без использования VCL.
2. Поместить его в отдельный поток.
3. В этом потоке написать цикл выборки сообщений.
ПыСы.
Я бы все это еще и засунул в DLL. Окно SplashForm нужно только при старте и иногда его используют еще для показа About - в любом случае нет смысла постоянно держать его код и ресурсы в памяти.
← →
DVM © (2008-04-08 12:49) [2]Application.Initialize;
SplashForm := TSplashForm.Create(Application);
try
SplashForm.Show;
SplashForm.Update;
while SplashForm.tmrMain.Enabled do Application.ProcessMessages;
finally
FreeAndNil(SplashForm);
end;
← →
DVM © (2008-04-08 12:50) [3]tmrMain - таймер на всплывающей форме, который отрабатывает нужное время и отключает сам себя.
← →
Семеныч (2008-04-08 12:53) [4]> DVM © (08.04.08 12:50) [3]
> таймер на всплывающей форме, который отрабатывает нужное время
А "нужное" - это сколько?
← →
DVM © (2008-04-08 12:58) [5]
> А "нужное" - это сколько?
Сколько заставка должна быть видна на экране. Так же можно добавить досрочную остановку таймера при клике мышкой по заставке или при нажатии esc. Правда в этом случае заставка выполняет роль чисто декоративную. Т.е. во время ее работы не выполняется никаких фоновых действий по подгрузке/созданию чего бы то ни было.
← →
asdf2 (2008-04-08 13:03) [6]всем спс
← →
Семеныч (2008-04-08 13:25) [7]> DVM © (08.04.08 12:58) [5]
> Сколько заставка должна быть видна на экране.
А это сколько? 5 секунд? Или 10? Или пока не загрузится, не проинициализируется и не покажется главная форма? При том, что мощность и загруженность компа самая разная, а программа еще и коннектится к серверной БД и этот самый сервер тоже может быть загружен, и тоже по-разному?
> Правда в этом случае заставка выполняет роль чисто декоративную. Т.е.
> во время ее работы не выполняется никаких фоновых действий по
> подгрузке/созданию чего бы то ни было.
А за каким же тогда она нужна? В сабже явно сказано, что проблема в перерисовке заставки - значит, происходят еще какие-то действия.
← →
asdf2 (2008-04-08 13:34) [8]
> Семеныч (08.04.08 13:25) [7]
Application.Initialize;
Application.CreateForm(TfMain, fMain);
fMain.tmrMain.Enabled := True;
Application.CreateForm(TfSplash, fSplash);
fSplash.Show;
fSplash.Refresh;
Application.ProcessMessages;
Application.CreateForm(TdmMain, dmMain);
fMain.tmrMain.Enabled := False;
fSplash.Hide;
fSplash.Free;
Application.Run;
fMain.tmrMain.OnTimer(sender: tobject);
begin
Application.Proc...
end;
мона так.
← →
asdf2 (2008-04-08 13:35) [9]т.е.
fMain.tmrMainTimer(sender: tobject);
← →
Семеныч (2008-04-08 13:37) [10]> asdf2
Более-менее желаемого можно добиться "малой кровью", если во время тех самых операций, из-за которых заставка не перерисовывается, периодически вызывать Application.ProcessMessages (что форсирует перерисовку). Это хуже, чем [1], но намного проще и в конкретном случае может оказаться более-менее приемлемо (а может, и нет - тогда остается только сопсоб [1]).
← →
DVM © (2008-04-08 13:38) [11]
> мона так.
так все одно не выйдет ибо VCL таймер тоже построен на сообщениях и они не будут приходить если основной поток будет занят чем то. В твоем случае, я полагаю, он будет занят Application.CreateForm(TdmMain, dmMain);
← →
Семеныч (2008-04-08 13:41) [12]> asdf2 (08.04.08 13:34) [8]
Напишите в главной форме обработчик OnCreate секунд на 30 и посмотрите, что будет.
← →
asdf2 (2008-04-08 13:42) [13]
> DVM © (08.04.08 13:38) [11]
там запрос долгий. Даж два.
стал быть надо [1]?
← →
DVM © (2008-04-08 13:44) [14]
> стал быть надо [1]?
Да, доп. поток + цикл сообщений в нем + окно на API.
← →
asdf2 (2008-04-08 13:52) [15]
> DVM © (08.04.08 13:44) [14]
млин, а как в окне на апи нарисовать картинку(jpeg)?
← →
Семеныч (2008-04-08 13:59) [16]> asdf2 (08.04.08 13:52) [15]
А этот вопрос уже в другую конфу - WinAPI. См. меню вверху страницы.
← →
asdf2 (2008-04-08 14:37) [17]
> Семеныч (08.04.08 13:59) [16]
Да, Вы правы, че-то я увлекся.
Всем большое спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c