Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-04-2017
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Crear botones en tiempo de ejecucion

Hola amigos....aqui de nuevo solicitandoles de su apoyo.

Trabajo con: Delphi6, Firebird 2.0

Estoy tratano de hacer un arreglo de botones y que estos se muestren en la pantalla para el usuario. El sistema q estoy desarrollando es uno de comandas, el cliente quiere que por cada comanda se genere un boton en la pantalla, y que estos se ordenen en base a los numeros de mesa. El caso de los numeros de mesas es el siguiente:

1 fila de mesas, serian las mesas 1....y cada mesa seria 1,2,3,4,5, etc., de tal manera que la mesa 11, es un numero compuesto para identificar las mesa 1 de la fila de mesas 1, y para las mesas de la fila 2, seria igual: 21,23,24,25 etc...

Aqui es donde el cliente quiere lo siguiente:

Q en el pantalla se le generen en una primer fila de botones, todos las mesas q correspondan a la fila 1...boton11=mesa11, boton12=mesa12, boton3=mesa13...etc
En una segunda fila de botones, todas las mesas de la fila 2...boton21=mesa21, boton22=mesa22, etc.

Buscando en este foro me encontré este codigo de efcsa, le hice unas modificaciones para hacer lo q requiero, pero me marca un error...aqui mi codigo:
Código Delphi [-]
procedure TForm1.BitBtn1Click(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 30 do
  begin
    if c=StrToInt(Edit2.Text) then
    begin
          iLeft := 100;   // inicio de columnas
          for r := 1 to 30 do
          begin
                if r=StrToInt(Edit1.Text) then
                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;
          end;
          Inc(iTop, iHeight + 25);  // 25: separación vertical
    end;
  end;
end;

Mas arriba defino un array de botones:
Código Delphi [-]
    v: array of array of TButton;

Lo que busco es algo como lo siguiente:

Buscar dentro del array, la CELDA para ahi almacenar el boton, y visualmente dejarlo en esa posicicion, por ejemplo si SE ABRE LA MESA 34, que en la linea 3, columna 4, crear el boton y visualmente que se vea ahi....se podrá hacer esto????

Tambien estoy abierto a mejores ideas....no estoy "casado" con esta q expongo....porq me salta ahoria una idea....crear desde un inicio todos los botones que necesito y q el usuario de click sobre el boton deseado q corresponda a la mesa, para abrirle la cuenta....sería otra opcion....

Aqui les dejo el codigo de mi sistema donde creo los botones en tiempo de ejecución, pero se generan en el orden en que se van creando....
Código Delphi [-]
procedure TfrmMesasAbiertas.CrearBoton();
begin
     n:=n+1;
     Botones[n]:=TBitBtn.Create(Self);
     with Botones[n] do
     begin
         Caption:=nIDMesa+'-'+BD.AliasEmpleado;
//         bCaption:=Caption;
//         IdRegistro:=
         Hint:=nIDMesa;
         Parent:=ScrollBox1;
         Height:=vHeight;
         PosY:=PosY+Height+10;
         if n>1 then
            vLeft:=vLeft+126;
         if vLeft=1270 then
         begin
             vTop:=vTop+87;
             vLeft:=10;
         end;
         Top:=vTop;
         Left:=vLeft;
         Width:=vWidth;
         OnClick:=BitBtn1Click;
         Name:='btn'+IntToStr(n);
         Font.Size:=13;
//         Tag:=n;
         Tag:=BD.n_IDRegistro;
         IDRegistro:=BD.n_IDRegistro;
         ValidarTicketSinDetalle();
         if qryValidarTicketSinDetalle.FieldByName('regs').AsInteger=0 then
            Glyph:=BitBtn2.Glyph
         else
            Glyph:=BitBtn1.Glyph;
         Layout:=blGlyphTop;
     end;
end;

Bueno espero me puedan orientar en lo antes expuesto. Saludos !!!!...(hacia mucho que no los consultaba)...

GRacias!"!!
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!

Última edición por mRoman fecha: 09-04-2017 a las 04:05:36.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Form en tiempo de ejecución mjjj OOP 2 19-01-2012 19:11:54
Crear Form en tiempo de Ejecución harvicoco Varios 3 28-06-2006 14:55:05
Crear Componentes en tiempo de ejecucion fartycl Varios 3 21-06-2006 22:03:13
Crear un DSN en tiempo de ejecucion neyvan Conexión con bases de datos 7 21-05-2004 17:41:45


La franja horaria es GMT +2. Ahora son las 18:28:49.


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
Copyright 1996-2007 Club Delphi