Показать сообщение отдельно
  #5  
Старый 23.06.2012, 23:18
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Может фигню посоветую но вот так у меня заработало, через горячие клавиши, да и у таймера надо тогда по умолчанию поставить Enabled:=False;
а то при запуске формы сразу он работает
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,xpMan;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    GameBoard: TPaintBox;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
   procedure OnHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  len, wid, speed, bX, bY, frX, frY : integer;
  SnakeDirR, SnakeDirD, SnakeDirL, SnakeDirU : boolean;
 
implementation

{$R *.dfm}

 
procedure TForm1.Button1Click(Sender: TObject);
begin
  wid := 10;
  len := 90;
  bX := 200;
  bY := 50;
  frX := bX + len;
  frY := bY + wid;
  speed := 10;
  GameBoard.Canvas.Brush.Color := rgb(0,0,0);
  GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
  GameBoard.Canvas.Brush.Color := rgb(0,255,8);
  GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
  Form1.SetFocus;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Timer1.Enabled then Timer1.Enabled := false else Timer1.Enabled := true;
  Form1.SetFocus;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin

  if SnakeDirR then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bX := bX + speed;
    frX := bX + len;
    frY := bY + wid;
  end;
 
  if SnakeDirD then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bY := bY + speed;
    frX := bX + len;
    frY := bY + wid;
  end;
 
  if SnakeDirL then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bX := bX - speed;
    frX := bX + len;
    frY := bY + wid;
  end;
 
  if SnakeDirU then
  begin
    GameBoard.Canvas.Brush.Color := rgb(0,0,0);
    GameBoard.Canvas.Rectangle(0,0,GameBoard.Width,GameBoard.Height);
    GameBoard.Canvas.Brush.Color := rgb(0,255,8);
    GameBoard.Canvas.Rectangle(bX,bY,frX,frY);
    GameBoard.Canvas.Rectangle(bX-1,bY,bX,frY);
    bY := bY - speed;
    frX := bX + len;
    frY := bY + wid;
  end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Handle,39, 0,39);
 RegisterHotKey(Handle,40, 0,40);
 RegisterHotKey(Handle,37, 0,37);
 RegisterHotKey(Handle,38, 0,38);
end;

procedure TForm1.OnHotKey(var Msg: TWMHotKey);
begin
case msg.HotKey of
  39 : begin SnakeDirR:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirU:=false; end;
  40 : begin SnakeDirD:=true; SnakeDirL:=false; SnakeDirU:=false; SnakeDirR:=false; end;
  37 : begin SnakeDirL:=true; SnakeDirD:=false; SnakeDirR:=false; SnakeDirU:=false; end;
  38 : begin SnakeDirU:=true; SnakeDirD:=false; SnakeDirL:=false; SnakeDirR:=false; end;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 UnregisterHotKey(Handle,37);
 UnregisterHotKey(Handle,38);
 UnregisterHotKey(Handle,39);
 UnregisterHotKey(Handle,40);
end;

end.
Ответить с цитированием