Пользователь
Регистрация: 09.09.2010
Сообщений: 10
|
on show вместо on create
Здравствуйте! Нашел исходник программы "мозайка" который срабатывает на событие on create, попробывал изменить на событие on show выдает ошибку...
Код:
unit Mw;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Timer1: TTimer;
Image1: TImage;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
DesktopBitmap : TBitmap;
gx, gy : Integer;
redRect : TBitmap;
rW, rH : Integer;
const
Delta=8;//÷èñëî êâàäðàòîâ íà êîòîðûå áóäåò ðàçáèòî îêíî (äîëæíî áûòü 2*n)
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
procedure InitScreen;
var
i:integer;
begin
//ïîëó÷àåì áèòìàï äåñêòîïà
DesktopBitmap:=TBitmap.Create;
with DesktopBitmap do
begin
Width:=Screen.Width;
Height:=Screen.Height;
end;
BitBlt(DesktopBitmap.Canvas.Handle,
0,0,Screen.Width,Screen.Height,
GetDC(GetDesktopWindow),0,0,SrcCopy);
Form1.Image1.Picture.Bitmap:=DesktopBitmap;
//èçíà÷àëüíûå êîîðäèíàòû redRect
Randomize;
gx:=Trunc(Random*Delta);
gy:=Trunc(Random*Delta);
Form1.Image1.Canvas.CopyRect(
Rect(rW*gx, rH*gy, rW*gx+rW, rH*gy+rH),
redRect.Canvas, Rect(0,0,rW,rH));
//ðèñóåì ñåòêó
for i:=0 to DELTA-1 do
begin
Form1.Image1.Canvas.MoveTo(rW*i,0);
Form1.Image1.Canvas.LineTo(rW*i,Screen.Height);
Form1.Image1.Canvas.MoveTo(0, rH*i);
Form1.Image1.Canvas.LineTo(Screen.Width, rH*i);
end;
end;
begin
ShowCursor(False);
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,0,0);
//SystemParametersInfo(spi_ScreenSaverRunning,1,@Dummy,0);
Button1.Cancel:=true;//âûõîä íà "Esc"
//Panel1.Left:=Button1.Left-10;
//Panel1.Top:=Button1.Top-10;
rW:=Screen.Width div Delta;
rH:=Screen.Height div Delta;
redRect:=TBitmap.Create;
with redRect do
begin
Width:=rW;
Height:=rH;
Canvas.Brush.Color:=clRed;
Canvas.Brush.Style:=bssolid;
Canvas.Rectangle(0,0,rW,rH);
Canvas.Font.Color:=clNavy;
Canvas.Font.Style:=Canvas.Font.Style+[fsBold];
Canvas.TextOut(2,2,'About');
Canvas.Font.Style:=Canvas.Font.Style-[fsBold];
Canvas.TextOut(2,17,'Delphi');
Canvas.TextOut(2,32,'Programming');
end;
Timer1.Enabled:=False;
Image1.Align:=alClient;
Visible:=False;
BorderStyle:=bsNone;
Top:=0;
Left:=0;
Width:=Screen.Width;
Height:=Screen.Height;
InitScreen;
Visible:=True;
Timer1.Interval:=10; // ìåíüøå-áûñòðåå
Timer1.Enabled:=True; // Çàïóñêàåì âûçîâ DrawScreen
end;
procedure TForm1.Timer1Timer(Sender: TObject);
procedure DrawScreen;
var
r1,r2:TRect;
Direction:integer;
begin
r1:=Rect(rW*gx , rH*gy, rW*gx+rW , rH*gy+rH);
Direction:=Trunc(Random*4);
case Direction of
0: gx:=Abs((gx+1) mod Delta); //ïðàâî
1: gx:=Abs((gx-1) mod Delta); //ëåâî
2: gy:=Abs((gy+1) mod Delta); //íèç
3: gy:=Abs((gy-1) mod Delta); //âåðõ
end; //case
r2:=Rect(rW*gx , rH*gy, rW*gx+rW , rH*gy+rH);
with Form1.Image1.Canvas do
begin
CopyRect(r1, Form1.Image1.Canvas, r2);
CopyRect(r2, redRect.Canvas, redRect.Canvas.ClipRect);
end;
end;
begin
DrawScreen;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowCursor(True);
Close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,0,0);
end;
end.
Подскажите пожалуйста, что надо изменить в коде, что бы он срабатывал на событие on show.
Последний раз редактировалось Stilet; 30.03.2011 в 17:28.
|