Ver Mensaje Individual
  #2  
Antiguo 09-04-2017
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Una primera aproximación sería crear los botones en sus posiciones e irlos visualizando conforme se necesiten.

Te muestro una clase que crea los botones ordenados con los caption de las mesas correspondientes, en este caso son 5 filas de 5 mesas cada una pero puedes poner las que quieras:
Código Delphi [-]
unit Unit1;

interface

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

type
  TButtons = class
  private
    Owner: TWinControl;
    nRows: integer;
    nCols: integer;
    Buttons: array of TButton;
  public
    constructor Create(AOwner: TWinControl);
    destructor Destroy; override;
    procedure SetButtons(Rows, Cols: integer);
    procedure SetOnClick(OnClick: TNotifyEvent);
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  private
    Buttons: TButtons;
  public
    { Public declarations }
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}
constructor TButtons.Create(AOwner: TWinControl);
begin
  inherited Create;
  Owner:= AOwner;
end;

destructor TButtons.Destroy;
begin
  SetLength(Buttons, 0);
  inherited Destroy;
end;

procedure TButtons.SetButtons(Rows, Cols: integer);
var
  i, Count: integer;
begin
  nRows:= Rows;
  nCols:= Cols;
  Count:= Rows*Cols;
  SetLength(Buttons, Count);
  for i:= 0 to Count-1 do
  begin
    Buttons[i]:= TButton.Create(Owner);
    Buttons[i].Caption:= IntToStr((i div Cols + 1)*10 + (i mod Cols) + 1);
    Buttons[i].Top:=  Buttons[i].Height*(i mod Cols);
    Buttons[i].Left:= Buttons[i].Width*(i div Cols);
    Buttons[i].Parent:= Owner;
  end;
end;

procedure TButtons.SetOnClick(OnClick: TNotifyEvent);
var
  i, Count: integer;
begin
  Count:= nRows * nCols;
  for i:= 0 to Count-1 do
    Buttons[i].OnClick:= OnClick;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Buttons:= TButtons.Create(self);
  Buttons.SetButtons(5,5);
  Buttons.SetOnClick(ButtonClick);
end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
  MessageBox(Handle, PCHAR(TButton(Sender).Caption), 'hola', 0);
end;

end.

Saludos.
Responder Con Cita