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

Вниз

перерисовка формы-заставки   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.014 c
2-1207687754
Riply
2008-04-09 00:49
2008.05.04
Выбор типа структуры для хранения данных и работы с ними.


3-1196422520
Delpher555
2007-11-30 14:35
2008.05.04
Как удалить/(снять атрибут) PRIMARY и FOREIGN KEY с поля?..


2-1207379421
XRMiPO
2008-04-05 11:10
2008.05.04
Программа прилипающая к краям


15-1206408609
DimonS
2008-03-25 04:30
2008.05.04
Как заинсталлить драйвер Access?


15-1206311535
Petr V. Abramov
2008-03-24 01:32
2008.05.04
а как работает интернет?