Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Кнопки


Автор: OIL 5.2.2008, 16:05
Как создать в программе множество кнопок( как в сапере)

Автор: Christoph 5.2.2008, 17:37
Сделай размер кнопок минимальные  smile 

Автор: pukin 5.2.2008, 17:53
Цитата(OIL @ 5.2.2008,  16:05)
Как создать в программе множество кнопок( как в сапере)

Создай приложение, помести на него компонент TSpeedButton (Желательно, помести его куда-нибудь в правый угол. Потом поймёшь почему), дважды нажми на него, чтобы создать обработчик события кнопки OnClick и измени его код, чтобы он выглядил вот так:

 smile 

Код

procedure TForm1.btn1Click(Sender: TObject);
var
  cX,cY : Integer;
  i     : Integer;
  But   : TSpeedButton;
  lTop  : Integer;
  lLeft : Integer;
begin
  lTop  := 2;
  lLeft := 2;
  for cX:=0 to 3 do
     begin
       for cY:=0 to 3 do
          begin
            But := TSpeedButton.Create(Form1);
            with But do
               begin
                 Parent   := Form1;
                 Visible  := TRUE;
                 Height   := 20;
                 Width    := 20;
                 Top      := lTop;
                 Left     := lLeft; lLeft := Left + Width  + 1;
               end;
          end;
       lTop  := lTop  + 20 + 1;
       lLeft := 2;
     end;
end;


Приношу извинения, за столь смешной совет, но на глупые вопросы обычно сразу лезут глупые ответы.  smile 

А, вообще, создавай массив, типа:
Код

map : array [0..kol-vo_knopok_po_x,0..kol-vo_knopok_po_y] of TParametry;

Где TParametry - это:
Код

type
  TParametry  = record
                  Hint : string; // Какие-то параметры для каждой кнопки
                  Tag  : Integer;  // Какие-то параметры для каждой кнопки
                end;


И при создании кнопок измени процедурку на что-то типо того:
Код

procedure TForm1.btn1Click(Sender: TObject);
var
  cX,cY : Integer;
  i     : Integer;
  But   : TSpeedButton;
  lTop  : Integer;
  lLeft : Integer;
begin
  lTop  := 2;
  lLeft := 2;
  for cX:=0 to kol-vo_knopok_po_x do
     begin
       for cY:=0 to kol-vo_knopok_po_y do
          begin
            But := TSpeedButton.Create(Form1);
            with But do
               begin
                 Parent   := Form1;
                 Visible  := TRUE;
                 ShowHint := TRUE;
                 Hint     := map[cX,cY].Hint; // Т.е. тут мы присваиваем те самые наши значения из массива
                 Tag      := map[cX,cY].Tag;  // Т.е. тут мы присваиваем те самые наши значения из массива
                 // Хорошо бы в массиве указать для определённых кнопок определённый TNotifyEvent и присваивать его событию OnClick при создании. 
                 Height   := 20;
                 Width    := 20;
                 Top      := lTop;
                 Left     := lLeft; lLeft := Left + Width  + 1;
               end;
          end;
       lTop  := lTop  + 20 + 1;
       lLeft := 2;
     end;
end;


Не судите строго, понимаю что наспех, но думаю на мысли этого человечка я навёл.  smile 

Автор: Rodman 5.2.2008, 17:58
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i,j:Integer;
    mas:array [1..10, 1..10] of tbutton;
begin
  for i:=1 to 10 do
    for j:=1 to 10 do
    begin
      mas[i,j]:=TButton.Create(Self);
      mas[i,j].Parent:=Form1;
      mas[i,j].Name:='M'+IntToStr(i)+IntToStr(j);
      mas[i,j].Height:=5;
      mas[i,j].Width:=5;
      mas[i,j].Left:=10+(i*5);
      mas[i,j].Top:=10+(j*5);
      mas[i,j].Caption:=IntToStr(i);
    end;
end;

Автор: Sanchezzz 5.2.2008, 19:17
а событие на кнопки ?
дополню пример Rodman

 mas[i,j].OnClick:= buttonClick;  //procedure Tform1.buttonClick(Sender: TObject);...

где buttonclick это процедура так мы приписываем действия на кнопки ну а дальше дело фантазии что на событие делать.

Автор: OIL 6.2.2008, 14:49
Спасиб!!! Спасибо за помощь! Все Окей!
Я неделю ломал голову, чуть не свихнулся. Спасибо!
Родина не забудет.[color=red][/color] smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)