home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2003 February
/
Chip_2003-02_cd1.bin
/
zkuste
/
delphi
/
kompon
/
d3456
/
PICSHOW.ZIP
/
Demo
/
Splash.pas
< prev
Wrap
Pascal/Delphi Source File
|
2002-09-23
|
4KB
|
110 lines
// If forms of your application appears on the screen with delay, the splash of
// the other demo has better effect.
unit Splash;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
PicShow, ExtCtrls, jpeg;
type
TSplashForm = class(TForm)
PicShow: TPicShow;
procedure PicShowProgress(Sender: TObject);
private
procedure CreateBackground;
public
class function Execute: TSplashForm;
end;
implementation
{$R *.DFM}
{$IFDEF VER100}
// I just realized Random function on Delphi 3 does not work correctly. It
// sometimes returns a negative value and sometimes a value larger than the
// Range parameter. By the way, I have to mention that I have not installed
// any service pack.
function Random(Range: Integer): Integer;
begin
Result := System.Random(Range);
if Result < 0 then Result := -Result;
Result := Result mod Range;
end;
{$ENDIF}
procedure TSplashForm.CreateBackground;
var
Background: TBitmap;
DC: HDC;
begin
// First we set position of the form on the center of desktop.
// We set Position property of the form to poDesigned because we
// need the form's position before showing it.
Left := (Screen.Width - Width) div 2;
Top := (Screen.Height - Height) div 2;
// We create a bitmap object for storing the screen behind the form.
Background := TBitmap.Create;
Background.Width := Width;
Background.Height := Height;
// We get device context of the screen and copy the screen behind the form
// to the created bitmap.
DC := GetDC(0);
try
BitBlt(Background.Canvas.Handle, 0, 0, Width, Height, DC, Left, Top, SRCCOPY);
finally
ReleaseDC(0, DC);
end;
// We set Backgrund property of PicShow to captured screen image. By this trick,
// the form will seem as transparent.
PicShow.BgPicture.Assign(Background);
// To reduce chance of flickering (only when PicShow is used as non-windowed
// control we may sometime have flickers) we set background color of the form
// to color of upper left pixel of the captured screen.
Color := Background.Canvas.Pixels[0,0];
// We don't need the bitmap object, then we free it.
Background.Free;
end;
class function TSplashForm.Execute: TSplashForm;
begin
Result := TSplashForm.Create(nil);
with Result do
begin
// A trick to make PicShow as transparent
CreateBackground;
// Displays the splash form.
Show;
// To prevent flickering, updates the form immediately.
Update;
// Select randomly a transition effect.
Randomize;
PicShow.Style := TShowStyle(Random(High(TShowStyle))+1);
// Starts image transition. For splash forms don't use PicShow as Threaded.
// When threaded is true, transition will start after activation of main form.
PicShow.Execute;
// Waits a bit before continuing the rest of the application.
// Consider that we don't use threaded mode, otherwise the following
// line has no effect.
Sleep(500);
end;
end;
procedure TSplashForm.PicShowProgress(Sender: TObject);
begin
if (PicShow.Progress = 100) and not PicShow.Reverse then
begin
// we select another transition effect randomly,
PicShow.Style := TShowStyle(Random(High(TShowStyle))+1);
// and continue the transaction to its initial state.
PicShow.Reverse := True;
// by the way, we wait two seconds before hiding the image
Sleep(2000);
end;
end;
end.