1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
const SpriteCount = 20; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); private Buffer, Sprite: TBitmap; SpriteIndex: Integer; protected procedure AppIdle(Sender: TObject; var Done: Boolean); end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); begin Buffer := TBitmap.Create; Buffer.Width := Form1.Width; Buffer.Height := Form1.Height;
Sprite := TBitmap.Create; Sprite.LoadFromFile('sprite.bmp');
SpriteIndex := 0;
Application.OnIdle := AppIdle; end;
procedure TForm1.FormDestroy(Sender: TObject); begin Application.OnIdle := nil;
Buffer.Free; Sprite.Free; end;
procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean); var x, y: Integer; begin with Buffer.Canvas do begin Pen.Color := clBlack; Brush.Color := clBlack; Rectangle(0, 0, Buffer.Width, Buffer.Height); end;
x := 100; y := 100; Buffer.Canvas.CopyRect(Bounds(x, y, Sprite.Width div SpriteCount, Sprite.Height), Sprite.Canvas, Bounds(SpriteIndex * (Sprite.Width div SpriteCount), 0, Sprite.Width div SpriteCount, Sprite.Height));
Form1.Canvas.Draw(0, 0, Buffer);
Inc(SpriteIndex); if SpriteIndex = SpriteCount then SpriteIndex := 0;
Done := False; end;
procedure TForm1.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer; var Resize: Boolean); begin Buffer.Width := NewWidth; Buffer.Height := NewHeight; end;
end. |