Показать сообщение отдельно
  #6  
Старый 26.12.2009, 22:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Действительно. Не сообразил.
Вот вам почти рабочий вариант.
Код:
unit Unit36;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm36 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure ButtonClick(Sender: TObject);
   private
    Buttons: Array of TSpeedButton;
  end;

Const
  Rows = 4;
  Cols = 4;
  ButtonSize = 50;

var
  Form36: TForm36;

implementation

{$R *.dfm}

procedure TForm36.ButtonClick(Sender: TObject);
begin
 ShowMessage('Нажата кнопка '+TSpeedButton(Sender).Caption);
end;

procedure TForm36.FormCreate(Sender: TObject);
var
  R,C,n: Integer;
  A: Array of Integer;

 function GetNumber: Integer;
 begin
  while True
  do begin
     n := Random(Rows * Cols);
     if A[n] <> -1
     then begin
          Result := A[n];
          A[n] := -1;
          Break;
          end;
     end;
 end;

begin
 BorderStyle := bsNone;
 KeyPreview := True;
 Randomize;
 SetLength(A, Rows * Cols);
 for n := 0 to Rows * Cols - 1 do A[n] := n + 1;

 for R := 0 to Rows - 1
 do for C := 0 to Cols - 1
    do begin
       SetLength(Buttons, Length(Buttons)+1);
       Buttons[(R * Rows + C)] := TSpeedButton.Create(Self);
       with Buttons[(R * Rows + C)]
       do begin
          Parent := Self;
          Width := ButtonSize;
          Height := ButtonSize;
          Left := C * Width;
          Top := R * Height;
          Caption := IntToStr(GetNumber);
          OnClick := ButtonClick;
          end;
       end;
 Width := ButtonSize * Cols;
 Height := ButtonSize * Rows;
end;

procedure TForm36.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if Key = VK_ESCAPE then Close;
end;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием