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   
Pascal/Delphi Source File  |  2002-09-23  |  4KB  |  110 lines

  1. // If forms of your application appears on the screen with delay, the splash of
  2. // the other demo has better effect.
  3.  
  4. unit Splash;
  5.  
  6. interface
  7.  
  8. uses
  9.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  10.   PicShow, ExtCtrls, jpeg;
  11.  
  12. type
  13.   TSplashForm = class(TForm)
  14.     PicShow: TPicShow;
  15.     procedure PicShowProgress(Sender: TObject);
  16.   private
  17.     procedure CreateBackground;
  18.   public
  19.     class function Execute: TSplashForm;
  20.   end;
  21.  
  22. implementation
  23.  
  24. {$R *.DFM}
  25.  
  26. {$IFDEF VER100}
  27. // I just realized Random function on Delphi 3 does not work correctly. It
  28. // sometimes returns a negative value and sometimes a value larger than the
  29. // Range parameter. By the way, I have to mention that I have not installed
  30. // any service pack.
  31. function Random(Range: Integer): Integer;
  32. begin
  33.   Result := System.Random(Range);
  34.   if Result < 0 then Result := -Result;
  35.   Result := Result mod Range;
  36. end;
  37. {$ENDIF}
  38.  
  39. procedure TSplashForm.CreateBackground;
  40. var
  41.   Background: TBitmap;
  42.   DC: HDC;
  43. begin
  44.   // First we set position of the form on the center of desktop.
  45.   // We set Position property of the form to poDesigned because we
  46.   // need the form's position before showing it.
  47.   Left := (Screen.Width - Width) div 2;
  48.   Top := (Screen.Height - Height) div 2;
  49.   // We create a bitmap object for storing the screen behind the form.
  50.   Background := TBitmap.Create;
  51.   Background.Width := Width;
  52.   Background.Height := Height;
  53.   // We get device context of the screen and copy the screen behind the form
  54.   // to the created bitmap.
  55.   DC := GetDC(0);
  56.   try
  57.     BitBlt(Background.Canvas.Handle, 0, 0, Width, Height, DC, Left, Top, SRCCOPY);
  58.   finally
  59.     ReleaseDC(0, DC);
  60.   end;
  61.   // We set Backgrund property of PicShow to captured screen image. By this trick,
  62.   // the form will seem as transparent.
  63.   PicShow.BgPicture.Assign(Background);
  64.   // To reduce chance of flickering (only when PicShow is used as non-windowed
  65.   // control we may sometime have flickers) we set background color of the form
  66.   // to color of upper left pixel of the captured screen.
  67.   Color := Background.Canvas.Pixels[0,0];
  68.   // We don't need the bitmap object, then we free it.
  69.   Background.Free;
  70. end;
  71.  
  72. class function TSplashForm.Execute: TSplashForm;
  73. begin
  74.   Result := TSplashForm.Create(nil);
  75.   with Result do
  76.   begin
  77.     // A trick to make PicShow as transparent
  78.     CreateBackground;
  79.     // Displays the splash form.
  80.     Show;
  81.     // To prevent flickering, updates the form immediately.
  82.     Update;
  83.     // Select randomly a transition effect.
  84.     Randomize;
  85.     PicShow.Style := TShowStyle(Random(High(TShowStyle))+1);
  86.     // Starts image transition. For splash forms don't use PicShow as Threaded.
  87.     // When threaded is true, transition will start after activation of main form.
  88.     PicShow.Execute;
  89.     // Waits a bit before continuing the rest of the application.
  90.     // Consider that we don't use threaded mode, otherwise the following
  91.     // line has no effect.
  92.     Sleep(500);
  93.   end;
  94. end;
  95.  
  96. procedure TSplashForm.PicShowProgress(Sender: TObject);
  97. begin
  98.   if (PicShow.Progress = 100) and not PicShow.Reverse then
  99.   begin
  100.     // we select another transition effect randomly,
  101.     PicShow.Style := TShowStyle(Random(High(TShowStyle))+1);
  102.     // and continue the transaction to its initial state.
  103.     PicShow.Reverse := True;
  104.     // by the way, we wait two seconds before hiding the image
  105.     Sleep(2000);
  106.   end;
  107. end;
  108.  
  109. end.
  110.