![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Splash Screen с прогрессбаром [D7]
Alex Bakulin © (2006-07-24 19:40:00)На форму заставки помещаю прогрессбар и таймер. По таймеру двигаю позицию Position прогрессбара. А вот изменений никаких не наступает... При отладке даже не заходит в процедуру...
Application.Initialize;
frmSplash := TfrmSplash.Create(nil);
frmSplash.Show;
Application.ProcessMessages;
Application.CreateForm(TfrmMain, frmMain);
frmSplash.Free;
Application.Run;
GrayFace (2006-07-24 23:22:00) [1]В frmMain.OnCreate понатыкай Application.ProcessMessage. А перед ними ставь позицию прогресса соразмерно с пройденной частью загрузки. Если основное время занимает само создание формы, а не то что делается в OnCreate, то выкинь сторонние компоненты. Или создай доп. поток, в котором либо вызывай Application.ProcessMessages (чуревато ошибками), либо устраивай цикл выборки сообщений только для splash окна (не так черевато). А если совсем чисто, то напиши splash screen на чистых апях.
KilkennyCat (2006-07-24 21:59:00) [2]И вообще, я бы главный дпр сделал бы так:
program SplashDemo;
uses
Forms,
Main in 'Main.pas' {MainForm},
Splash in 'Splash.pas' {SplashForm};
{$R *.RES}
begin
Application.Initialize;
with TSplashForm.Execute do
try
Application.CreateForm(TMainForm, MainForm);
finally
Free;
end;
Application.Run;
end.
unit Splash;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
type
TSplashForm = class(TForm)
ProgressBar1: TProgressBar;
private
public
class function Execute: TSplashForm;
end;
implementation
{$R *.DFM}
class function TSplashForm.Execute: TSplashForm;
begin
Result := TSplashForm.Create(nil);
with Result do
begin
Show;
Update;
... Эффекты ...
end;
end;
end.
KilkennyCat (2006-07-24 21:48:00) [3]> [3] Loginov Dmitry © (24.07.06 21:35)
мерцать может некрасиво...
Alex Bakulin (2006-07-24 21:41:00) [4]код таймера (он enabled):
ProgressBar.Position := ProgressBar.Position + 1;
if ProgressBar.Position = ProgressBar.Max then ProgressBar.Position := 0;
ProgressBar.Repaint;
Application.ProcessMessages;
Да только он туда НЕ ЗАХОДИТ, таймер включен
Loginov Dmitry (2006-07-24 21:35:00) [5]достаточно будет Update
KilkennyCat (2006-07-24 20:08:00) [6]вероятно, надо сделать так:
procedure frmSplash.onShow(sender: TObject);
begin
timer1.enabled := true;
end;
если не помогает,
то в событии таймера после смены позиции прогрессбара добавить application.proccessmessage
Loginov Dmitry (2006-07-24 20:03:00) [7]А где код таймера?