Читать «Виртуальная библиотека Delphi» онлайн - страница 38

Unknown

  SplashForm.Update;

  Application.CreateForm(TMainForm, MainForm);

  SplashForm.Hide;

 finally

  SplashForm.Free;

 end;

end.

И форма SplashForm держится на экране пока выполняется Create в главной форме. Но иногда она появляется и пропадает очень быстро, поэтому нужно сделать задержку:

1. Добавляете на форму таймер с событием:

procedure TSplashForm.Timer1Timer(Sender: TObject);

begin

 Timer1.Enabled := False;

end;

2. Событие onCloseQuery для формы:

procedure TSplashForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

 CanClose := Not Timer1.Enabled;

end;

3. И перед SplashForm.Hide; ставите цикл:

repeat

 Application.ProcessMessages;

until SplashForm.CloseQuery;

4. Все! Осталось установить на таймере период задержки 3-4 секунды.

5. На последок, у такой формы желательно убрать Caption:

SetWindowLong(Main.Handle,GWL_STYLE, GetWindowLong(Main.Handle, GWL_STYLE) AND NOT WS_CAPTION OR WS_SIZEBOX);

Прозрачная форма

Эта форма имет прозрачный фон!!!

unit unit1;

interface

uses

  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

  StdCtrls;

type

  TForm1 = class(TForm)

  Button1: TButton;

  Button2: TButton;

    // это просто кнопка на форме - для демонстрации

  protected

    procedure RebuildWindowRgn;

    procedure Resize; override;

  public

    constructor Create(AOwner: TComponent); override;

  end;

var

  Form1 : TForm1;

implementation

// ресурс этой формы

{$R *.DFM}

{ Прозрачная форма }

constructor TForm1.Create(AOwner: TComponent);

begin

  inherited;

  // убираем сколлбары, чтобы не мешались

  // при изменении размеров формы

  HorzScrollBar.Visible:= False;

  VertScrollBar.Visible:= False;

// строим новый регион

  RebuildWindowRgn;

end;

procedure TForm1.Resize;

begin

  inherited;

  // строим новый регион

  RebuildWindowRgn;

end;

procedure TForm1.RebuildWindowRgn;

var

  FullRgn, Rgn: THandle;

  ClientX, ClientY, I: Integer;

begin

// определяем относительные координаты клиенской части

  ClientX:= (Width - ClientWidth) div 2;

  ClientY:= Height - ClientHeight - ClientX;

  // создаем регион для всей формы

  FullRgn:= CreateRectRgn(0, 0, Width, Height);

  // создаем регион для клиентской части формы

  // и вычитаем его из FullRgn

  Rgn:= CreateRectRgn(ClientX, ClientY, ClientX + ClientWidth, ClientY +

ClientHeight);

  CombineRgn(FullRgn, FullRgn, Rgn, rgn_Diff);

// теперь добавляем к FullRgn регионы каждого контрольного элемента