Ну, вообще-то, splash screen показывается из файла проекта, а не из главной формы. Более того, если ты будешь создавать странички/фреймы в OnCreate, то и делать форму полупрозрачной нет необходимости, т.к. она и так в этот момент не видна. Как я понимаю, создание фрейма занимает какое-то время. А вот созщдать вкладку и "кинуть" на нее фрейм практически мгновенно. Тогда делаем примерно так:
Файл проекта (.dpr)
Код:
procedure AddFrameToColleaction(AFrame : TBaseFrame; ASplash : TSplashForm);
begin
GetListOfFrames().Add(AFrame);
ASplash.ProgressBar.Progress := Splash.ProgressBar.Progress + 1;
ASplash.Invalidate; // Тут не помню какой именно метод вызывать для перерисовки окна
end;
var
Splash : TSplashForm;
begin
Splash := TSplashForm.Create(Nil);
Try
Splash.Show;
Splash.ProgressBar.Max := 15;
Splash.ProgressBar.Progress := 0;
AddFrameToColleaction(TCustomFrame1.Create(Nil),Splash);
AddFrameToColleaction(TCustomFrame2.Create(Nil),Splash);
...
AddFrameToColleaction(TCustomFrame15.Create(Nil),Splash);
Splash.Close;
Finally
Splash.Free;
End;
// ... далее создание дополнительных форм и запуск программы (Application.Run)
end.
Модуль с масивом фреймов
Код:
Unit ListOfFrames;
interface
function GetListOfFrames : TList<TBaseFrame>;
implementation
var
AList : TList<TBaseFrame>;
function GetListOfFrames : TList<TBaseFrame>;
begin
if Not Assigned(AList) Then AList := TList<TBaseFrame>.Create;
Result := AList;
end;
initialization
AList := Nil;
finalization
IF Assigned(AList) Then FreeAndNil(AList>
end.
Базовый фрейм
Код:
unit TBaseFrame;
interface
type
TBaseFrame = class(TFrame)
public
function GetTabName : String; virtual; abstract; // перекрыть в каждом наследнике, вощвращаем имя вкладки
end
...
Главная форма
Код:
procedure TMainForm.FormCreate(Sender : TObject);
var
I : Integer;
Sheet : TTabSheet;
Frame : TBaseFrame;
begin
For I := 0 To GetListOfFrames.Count-1 Do
Begin
Frame := GetListOfFrames().Items[i];
Sheet := TTabSheet.Create(Self);
Sheet.Caption := Frame.GetTabName;
Frame.Parent := Sheet;
Frame.Aligh := alClient;
Sheet.PageControl := PageControl1;
End;
Ну вот как-то так.
Код не проверял, просто набросал саму идею.