
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.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
|