Консультация № 60509
29.10.2006, 02:26
0.00 руб.
0 7 4
Здравствуйте. Подскажите пожалуйсто, как сделать так называемое окно приветствия в программе, т.е. до появления и полной загрузки главной формы вывести окно с ProgressBar, в которой будет отображаться статус запуска программы.
ЗЫ естественно после полного появления главной формы окно закрывается.
Заранее спасибо.

Обсуждение

Неизвестный
29.10.2006, 06:07
общий
это ответ
Здравствуйте, Глеб!
Добавьте в проек еще одну форму, уберите у нее границы, поставьте красивую картинку, ProgressBar и все что душе угодно. В свойствах проекта поставьте, чтоб при запуске приложения показывалась именно это форма. А основную форму делайте невидимой, пока она не загрузится. Как только это произойдет (загрузка закончится) - меняйте видимости у форм (форму приветствия можно вообще очистить, чтоб память не занимала). Вот в принципе и весь алгоритм... Удачи!!!
Неизвестный
29.10.2006, 12:54
общий
Подробнее: дополнителная форма DeVampir-а надо создавать непосредствено после главной форме (надо посмотрет в dpr файл).Прогрес бар надо сам управлят (наверное, надо менят его индикатор после каждое действие инициализации прогаму: создание формьи, инициализации БД и т.д.)Окно надо убират в OnActivate (или OnShow) главной форме (конечно - надо сделат механизъм, что ето сделатся один раз).Если главная форма не видна (примерно Tray application) - надо сам сделат собитие для закритие окно приветствия.
Неизвестный
29.10.2006, 16:20
общий
это ответ
Здравствуйте, Глеб!
Ответ DeVampir не правильный. Так как в этом случае форма, созданная первой, ассоциируется с самим приложением, если ее убрать, как советует DeVampir, то после закрытия окна приветствия, закроется и приложение. Созадете новую форму, устанавливаете на ней все что нужно. В свойствах проекта (меню Project/options) Вкладка Forms находите вашу вторую форму и двойным кликом переносите её в правое окно, форма не будет создаваться автоматически . Затем в файле *.dpr меняете см приложение.

Приложение:
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Form2.ShowModal; form2.Free; Application.Run;end.
Неизвестный
29.10.2006, 23:29
общий
Monah, большое спасибо, вот тока появилась проблемма. Показ пормы я делаю на через ShowModal, а просто через Show, т.к. все остальное грузиться прекращает, но воттока проблемма, на форме не появляется не один компонент, который я кидаю, почему так происходит?
Неизвестный
30.10.2006, 08:34
общий
это ответ
Здравствуйте, Глеб!
MyProgram.dpr :

program MyProgram;

uses
Forms,
Main in ‘Main.pas‘ {MainForm},
Splash in ‘Splash.pas‘ {SplashForm};

begin
try
SplashForm := TSplashForm.Create(Application);
SplashForm.Show;
SplashForm.Update;
SplashForm.Hide;
finally
SplashForm.Free;
end;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.

Splash.pas :

procedure TSplashForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := <здесь условие выхода из окна приветствия>;
end;

procedure TSplashForm.FormHide(Sender: TObject);
begin
repeat
Application.ProcessMessages;
until SplashForm.CloseQuery;
end;
Неизвестный
30.10.2006, 10:07
общий
это ответ
Здравствуйте, Глеб!

Попробуй эту форму запускать так:

procedure TForm1.FormCreate(Sender: TObject);
begin
OkBottomdlg:=TOkBottomdlg.Create(nil); // окно диалога, но можно и форму
OkBottomdlg.ShowModal;
end;



Приложение:
program Project1;uses Forms, Unit1 in ‘Unit1.pas‘ {Form1}, Unit2 in ‘Unit2.pas‘ {OKBottomDlg};{$R *.res}begin Application.Initialize; Application.CreateForm(TForm1, Form1);// Application.CreateForm(TOKBottomDlg, OKBottomDlg); Application.Run;end.unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math, DB, DBTables, Grids, DBGrids, Buttons, ScktComp;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginOkBottomdlg:=TOkBottomdlg.Create(nil);OkBottomdlg.ShowModal;end;end.unit Unit2;interfaceuses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls;type TOKBottomDlg = class(TForm) OKBtn: TButton; CancelBtn: TButton; Bevel1: TBevel; Button1: TButton; CheckBox1: TCheckBox; private { Private declarations } public { Public declarations } end;var OKBottomDlg: TOKBottomDlg;implementationuses Unit1;{$R *.dfm}end.
Неизвестный
30.10.2006, 18:38
общий
Всем спасибо, я просто добавил Form2.repaint и все получилось...
Форма ответа