home *** CD-ROM | disk | FTP | other *** search
/ Chip: Shareware for Win 95 / Chip-Shareware-Win95.bin / ostatni / delphi / delphi2 / wowsrc.exe / BITMAP.PAS < prev    next >
Pascal/Delphi Source File  |  1996-03-28  |  5KB  |  135 lines

  1. unit Bitmap;
  2.  
  3. interface
  4. Uses
  5.   SysUtils, StdCtrls, WinTypes, WinProcs, Graphics, Classes, IniFiles;
  6. Var
  7.   BitmapFile                : string;
  8.   AnimatePic                : Boolean;
  9.   ScreenWidth, ScreenHeight : Integer;      { screen Width and Height }
  10.   xPicPos, yPicPos          : Integer;      { picture position }
  11.   xDirection, yDirection    : Integer;      { directions to move bitmap }
  12.   PicWidth, PicHeight       : Integer;      { width & height of picture }
  13.   Pic, PicHold              : TBitmap;      { Bitmap that is being displayed }
  14.   PicRect,
  15.   HoldRect,
  16.   ScrnRect,
  17.   OldScrnRect,
  18.   RectUnion,
  19.   RectUnionSize             : TRect;        { Rectangular area picture and
  20.                                               & new screen area displayed in. }
  21. Procedure ReadPicDefaults;                  { Read any defaults }
  22. Procedure InitPicture;                      { Startup }
  23. Procedure MovePic;                          { Move the Message }
  24. Procedure FreePic;                          { Free any resources }
  25.  
  26. implementation
  27. Uses
  28.   Globals,
  29.   Ssave;
  30.  
  31. Procedure ReadPicDefaults;                  { Read Defaults }
  32. Var
  33.   Ini   : TiniFile;
  34. Begin
  35.   Ini := TIniFile.Create('WOW.INI');        { Open the Ini File }
  36.   Apptitle := 'Bitmap';                     { Set title }
  37.   BitmapFile := Ini.ReadString(Apptitle,
  38.                             'Bitmap File Location',
  39.                             #0);            { bitmap filename }
  40.   Speed := Ini.ReadInteger(Apptitle,
  41.                            'Speed',25);     { Get the Speed }
  42.   AnimatePic  := Boolean(Ini.ReadInteger(Apptitle,
  43.                            'MoveOrPlot',1));{ Get the Speed }
  44.   Pwd := Ini.ReadString('Apptitle',
  45.                         'Password',
  46.                         '');                { Read the Password, if any }
  47.   Ini.Free;
  48. end;
  49.  
  50. procedure InitPicture;
  51. begin
  52.   ReadPicDefaults;                          { Read the Default Settings }
  53.   Pic     := TBitmap.Create;                { Create the Bitmap }
  54.   PicHold := TBitmap.Create;                { Create the Temp Hold Bitmap }
  55.   if FileExists(BitmapFile) then
  56.     Pic.LoadFromFile(BitmapFile)
  57.   else
  58.     Pic.Assign(Scrn.Image.Picture.Bitmap);
  59.  
  60.   xPicPos := 0;                             { get starting x }
  61.   yPicPos := 0;                             { get starting y }
  62.   ScreenWidth  := ScreenWd;                 { get Width }
  63.   ScreenHeight := ScreenHt;                 { Get Height }
  64.   PicWidth     := Pic.Width;
  65.   PicHeight    := Pic.Height;
  66.   PicRect      := Rect(0, 0, PicWidth, PicHeight);
  67.   ScrnRect     := Rect(xPicPos, yPicPos, xPicPos + PicWidth,
  68.                                 yPicPos + PicHeight);
  69.   xDirection   := -1;                       { get speed: }
  70.   yDirection   := -1;                       { xDirection, yDirection = 1 or -1 }
  71. end;
  72.  
  73. Procedure FreePic;
  74. Begin
  75.   Pic.Free;                                 { Free the Bitmap }
  76.   PicHold.Free;                             { Free the Hold Bitmap }
  77. end;
  78.  
  79.  
  80. Procedure MovePic;
  81. Begin
  82.   if AnimatePic then
  83.   begin { if Move }
  84.     if ((xPicPos <= 0) or (xPicPos + PicWidth >= ScreenWidth))
  85.          then xDirection := -xDirection;    { bounce light at X edges }
  86.     if ((yPicPos <= 0) or (yPicPos + PicHeight >= ScreenHeight))
  87.          then yDirection := -yDirection;    { bounce light at Y edges }
  88.     xPicPos := xPicPos + xDirection;        { calculate new X position }
  89.     yPicPos := yPicPos + yDirection;        { calculate new Y position }
  90.     OldScrnRect := ScrnRect;
  91.     ScrnRect := Rect(xPicPos, yPicPos, xPicPos + PicWidth, yPicPos + PicHeight);
  92.     (* (1)  Caculate affected screen area. *)
  93.     UnionRect(RectUnion, OldScrnRect, ScrnRect);
  94.     (*RectUnion.left := (RectUnion.left - (RectUnion.left MOD 8));*)
  95.     RectUnionSize  := Rect(0,
  96.                            0,
  97.                            RectUnion.right  - RectUnion.left,
  98.                            RectUnion.bottom - RectUnion.top);
  99.     (* (2)  Copy affected area of screen to hold bitmap *)
  100.     PicHold.Width := RectUnionSize.right;
  101.     PicHold.Height := RectUnionSize.bottom;
  102.     PicHold.Canvas.CopyMode := cmSrcCopy;
  103.     PicHold.Canvas.CopyRect(RectUnionSize, Scrn.Canvas, RectUnion);
  104.  
  105.     (* (3)  Erase Bitmap in hold bitmap *)
  106.     PicHold.Canvas.CopyMode := cmBlackness;
  107.     PicHold.Canvas.CopyRect(RectUnionSize, PicHold.Canvas, PicRect);
  108.  
  109.     (* (4)  Copy Image to hold bitmap *)
  110.     PicHold.Canvas.CopyMode := cmSrcCopy;
  111.     HoldRect := Rect(PicRect.left + xDirection,
  112.                      PicRect.Top  + yDirection,
  113.                      PicWidth,
  114.                      PicHeight);
  115.     PicHold.Canvas.CopyRect(HoldRect, Pic.Canvas, PicRect);
  116.  
  117.     (* (5)  Copy New Image to screen *)
  118.     Scrn.Canvas.CopyMode := cmSrcCopy;
  119.     Scrn.Canvas.CopyRect(RectUnion, PicHold.Canvas, RectUnionSize);
  120.  
  121.     Delay(Speed);                           { Delay a Bit }
  122.   end { if Move }
  123.   else
  124.   begin
  125.     xPicPos := random (ScreenWidth)  + 1;   { get starting x }
  126.     yPicPos := random (ScreenHeight) + 1;   { get starting y }
  127.     ScrnRect := Rect(xPicPos, yPicPos, xPicPos + PicWidth, yPicPos + PicHeight);
  128.     Scrn.Canvas.CopyMode := cmSrcCopy;
  129.     Scrn.Canvas.CopyRect(ScrnRect, Pic.Canvas, PicRect);
  130.     Delay(Speed);                           { Delay a Bit }
  131.   end;
  132. end;
  133.  
  134. end.
  135.