5. Сделайте заставку привлекательной и функциональной путем добавления на нее необходимых компонентов и изображений. (компоненты Label, Panel, Image, Shape и Bevel)
6. Отредактируйте свойства добавленных компонентов
7. Выберите в меню Delphi IDE Options | Project
8. Уберите SplashScreen-форму из списка Auto-create-списка (списка автоматически создаваемых форм)
Комментарий: Вы динамически создаете экземпляр заставки
9. Добавьте модуль, содержащий TSplashScreen, в список используемых модулей главной формы вашего приложения. Пример:
unit Unit1;
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes,Graphics, Controls, Forms, Dialogs, StdCtrls, unit2; <– поместите сюда
Комментарий: В нашем примере TSplashScreen объявлен в Unit2
10. Выберите в меню Delphi IDE View | Project Source
11. Вставьте между ключевым словом begin и перед любым Application.Create следующий код:
SplashScreen := TSplashScreen.Create(Application);
SplashScreen.Show;
SplashScreen.Refresh;
12. Измените поведение главной формы приложения при наступлении события OnShow. Добавьте следующий код:
SplashScreen.Free;
Комментарий: Реализация заставки с линейкой прогресса ничуть не сложнее, чем приведенный выше пример. Необходимо всего лишь вовремя выводить ее на экран: перед тем, как процесс начнется, и убирать только после того, как он закончится. Различие заключается в осуществлении связи (реализации механизма) между процессом и заставкой для правильного обновления линейки прогресса.
13. Запустите приложение. В приведенном выше примере, если скорость вашего компьютера значительна, то заставки вы можете и не увидеть. Следующий код демонстрирует технику создания заставки для вашего приложения — только будьте осмотрительней при его использовании.
Добавьте следующий код на этапе #11:
for x:= 1 to 10000000 do begin
x:=x;
end;
{PROJECT1.DPR}
program Project1;
uses Forms, Unit1 in 'UNIT1.PAS' {Form1}, Unit2 in 'UNIT2.PAS' {SplashScreen};
{$R *.RES}
var x: longint;
begin
SplashScreen:= TSplashScreen.Create(Application);
SplashScreen.Show;SplashScreen.Refresh;
for x:= 1 to 10000000 do begin
x:=x;
x:=x;
end;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
{UNIT1.PAS}
unit Unit1;
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, unit2;
type TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);
begin
splashscreen.free;
end;
end.
{UNIT2.PAS}
unit Unit2;
interface
uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TSplashScreen = class(TForm)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Shape1: TShape;
Shape2: TShape;
Shape3: TShape;
private
{ Private declarations }
public
{ Public declarations }
end;
var SplashScreen: TSplashScreen;
implementation
{$R *.DFM}
end.
Как правильно закрыть и удалить форму? Почему моя MDI Child форма при закрывании просто минимизируется?
Своим опытом делится Nomadic:
A: Обрабатывайте событие OnClose для формы и выставляйте в нем параметр Action в caFree. Дело в том, что его значение по умолчанию для MDI Child форм caMinimize. Кстати, если сделать Action := caNone, то форму нельзя будет закрыть.
Как установить максимальный и минимальный размер формы