Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda con creacion de botones dinamicos (https://www.clubdelphi.com/foros/showthread.php?t=90211)

cristian22 26-04-2016 20:41:47

Ayuda con creacion de botones dinamicos
 
hola buenas tarde tengo un pequeño prolema espero que puedan guiarme
resulta que tengo que crear varios botones en tiempo de ejecucion atravez de un boton que lo denomino como "Crear" y esto se tienen que mostrar en forma de una matriz la cual utilizo 2 Tedit,uno para indicar el numero fila y otro de columnas
El prolema es que cuando escribo el cogido tengo prolema en la ubicacion . Los botones se crean de forma vertical y no logro formar la matriz aqui les dejo el codigo que tengo

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);

var
j,i, iTop:Integer;
  B: TButton;
begin
n:=edit1.Text;
m:=edit1.text    ;
     iTop:=100;
     For i:=1 to n Do
     begin
     for j := 1 to m do
     Begin
          v[i,j]:=TButton.Create(Self);
          v[i,j].Parent:=Self;
          v[i,j].Left :=j+20;
          v[i,j].Top  :=iTop;
          Inc(iTop, v[i,j].Height+10);
    End;
 end;

desde ya muchas gracias

ecfisa 26-04-2016 21:53:41

Hola.

Un ejemplo de como podes crearlos y mostrarlos en forma de matriz:
Código Delphi [-]
...
var
  v: array of array of TButton;

procedure TForm1.btnCrearButtonsClick(Sender: TObject);
var
  MaxC, MaxR, c, r: Integer;
  iTop, iLeft: Integer;
  iHeight, iWidth , nn: Integer;
begin
  MaxC := StrToInt(edit1.Text);  // Nro columnas
  MaxR := StrToInt(edit2.text);  // Nro filas
  SetLength(v, MaxC+1, MaxR+1);  // Inicializar arreglo

  iWidth  := 75;    // ancho botón
  iHeight := 25;    // alto botón
  iTop    := 100;   // inicio de filas
  nn      := 1;     // contador

  for c := 1 to MaxC do
  begin
    iLeft := 100;   // inicio de columnas
    for r := 1 to MaxR do
    begin
      v[c,r]         := TButton.Create(Self);
      v[c,r].Name    := 'DynButton' + IntTostr(nn);
      v[c,r].Caption := v[c,r].Name;
      v[c,r].Width   := iWidth;
      v[c,r].Height  := iHeight;
      v[c,r].Top     := iTop;
      v[c,r].Left    := iLeft;
      v[c,r].Parent  := Self;
      Inc(iLeft, iWidth + 15);  // 15: separación horizontal
      Inc(nn);  // contador
    end;
    Inc(iTop, iHeight + 25);  // 25: separación vertical
  end;
end;
(no incluye liberación de recursos ni comprobación alguna)

Saludos :)

cristian22 27-04-2016 04:13:36

muchas gracias amigo me sirvió de mucho
podria hacerte otra consulta mas ?..
hay alguna forma de que cuando haga click en cada boton estos se quede seleccionado y cambien de color ?
y cuando vuelva a ejecutar quede ya como "ocupado" y de un color por ejemplo rojo y no me deje seleccionar ya ese boton o varios que ya alla selecionado anterior mente ?

Casimiro Notevi 27-04-2016 11:15:05

Cita:

Empezado por cristian22 (Mensaje 504730)
muchas gracias amigo me sirvió de mucho
podria hacerte otra consulta mas ?..
hay alguna forma de que cuando haga click en cada boton estos se quede seleccionado y cambien de color ?
y cuando vuelva a ejecutar quede ya como "ocupado" y de un color por ejemplo rojo y no me deje seleccionar ya ese boton o varios que ya alla selecionado anterior mente ?

Por favor, lee antes esto, gracias.


La franja horaria es GMT +2. Ahora son las 16:02:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi