unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, Spin,
StdCtrls, BGRAVirtualScreen, BGRABitmap, BGRABitmapTypes,Math;
type
{ TForm1 }
TForm1 = class(TForm)
BGRAVirtualScreen1: TBGRAVirtualScreen;
Label1: TLabel;
Panel1: TPanel;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
Title_label: TLabel;
Timer1: TTimer;
procedure BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
procedure Raster_bar(Bitmap: TBGRABitmap; xpos,y,ysize: Integer; baseR, baseG, baseB: Byte);
public
end;
var
Form1: TForm1;
red,green,blue,Speed, posX,PosY : integer;
cop : array [0..7] of TBGRABitmap;
rez : integer;
implementation
{$R *.lfm}
// Choose function for future usage !
function Choose(const Values: array of Integer): Integer; //inline;
begin
if Length(Values) = 0 then
Result := 0
else
Result := Values[Random(Length(Values))];
end;
{ TForm1 }
procedure TForm1.Raster_bar(Bitmap: TBGRABitmap; xpos,y,ysize: Integer; baseR, baseG, baseB: Byte);
var
i,v: Integer;
r, g, b: Byte;
begin
v := 0; // store i
Bitmap.FillRect(0,0,BGRAVirtualScreen1.Width,BGRAVirtualScreen1.Height,bgra(0,0,0),dmset);
for i := 0 to 31 do
begin
r := Min(baseR * i div 31, 255);
g := Min(baseG * i div 31, 255);
b := Min(baseB * i div 31, 255);
v := i*8;
bitmap.FillRect(xpos+i*8, y, xpos+i*8+8, y+ysize, BGRA(r, g, b,255), dmSet);
end;
for i := 0 to 31 do
begin
r := Max(baseR - (baseR * (i+1) div 31), 0); // remove (i+1)
g := Max(baseG - (baseG * (i+1) div 31), 0);
b := Max(baseB - (baseB * (i+1) div 31), 0);
Bitmap.FillRect(xpos+v+(i*8), y, xpos+v+(i*8)+8, y+ysize, BGRA(r, g, b,255), dmSet);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
for i:=0 to 7 do
cop[i] := TBGRABitmap.Create(BGRAVirtualScreen1.Width,4);// 4 pixel Height
//Randomize;
//rez := choose([1,4,8,12,3,19,38,72,113,120]);
//label1.Caption:= InttoStr(rez);
end;
procedure TForm1.BGRAVirtualScreen1Redraw(Sender: TObject; Bitmap: TBGRABitmap);
begin
Raster_bar(cop[0],0 ,0,4, 255,000,000);
Raster_bar(cop[1],0 ,0,4, 255,100,000);
Raster_bar(cop[2],0 ,0,4, 255,220,000);
Raster_bar(cop[3],0 ,0,4, 000,250,000);
Raster_bar(cop[4],0 ,0,4, 000,220,255);
Raster_bar(cop[5],0 ,0,4, 000,000,255);
Raster_bar(cop[6],0 ,0,4, 255,000,255);
Raster_bar(cop[7],0 ,0,4, 255,255,255);
bitmap.PutImage(-640+PosX, PosY+00,cop[0],dmSet);
bitmap.PutImage(640+(-PosX),PosY+04,cop[1],dmSet);
bitmap.PutImage(-640+PosX, PosY+08,cop[2],dmSet);
bitmap.PutImage(640+(-PosX),PosY+12,cop[3],dmSet);
bitmap.PutImage(-640+PosX, PosY+16,cop[4],dmSet);
bitmap.PutImage(640+(-PosX),PosY+20,cop[5],dmSet);
bitmap.PutImage(-640+PosX, PosY+24,cop[6],dmSet);
bitmap.PutImage(640+(-PosX),PosY+28,cop[7],dmSet);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Speed := SpinEdit1.Value;
PosY := SpinEdit2.Value;
PosX := (Posx + Speed) mod 1200;
BGRAVirtualScreen1.RedrawBitmap;
end;
end.