Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-01-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
Problemas con botones

Hola a Tod@s,

a ver si me podeis ayudar estoy creando botones en un panel, pero me hace falta que siga creando en la siguiente colunma y que sepa y siga creando botones hasta terminar el panel y si no caben en ese panel que me los coloque en el siguiente panel al pulsar el boton siguiente....

os pego mi codigo para que veais que ahora actualmente ya estoy visualizando los botones pero me falta como ya os comento que siga en la siguiente columna y que haga tantos botones como grande sea el panel.

begin
vTop := 1;
vInicio := 1;
vPestanyaPersonal := Personal;
vPestanyaProductos := Familias;

BDades.TPersonal.Active := False;
BDades.TPersonal.SelectSQL.Text := 'Select * from Personal where tienda = ' + '''' + BDades.TConfigTIENDA.Text + '''';
BDades.TPersonal.Open;
BDades.TPersonal.Active := True;
BDades.TPersonal.First;

While BDades.TPersonal.Eof = False do
Begin
vPersonalNombre := BDades.TPersonal.FieldByName('NOMBRE').AsString;
vPersonalCodigo := BDades.TPersonal.FieldByName('CODIGO').AsInteger;

vBotonPersonal := TButton.create(self);
vBotonPersonal.Parent := vPestanyaPersonal;
vBotonPersonal.Caption := vPersonalNombre;
vBotonPersonal.Height := 69;
vBotonPersonal.Width := 120;
vBotonPersonal.Left := vInicio; // Inicio
vBotonPersonal.Top := vTop; // Altura
vBotonPersonal.Enabled := True;
vBotonPersonal.visible := True;
vBotonPersonal.Tag := vPersonalCodigo;
vBotonPersonal.OnClick := vPersonalBotonOnClick;
vBotonPersonal.Show;

BDades.TPersonal.Next;
vTop := vTop + 70;

if vTop > 420 Then
Begin
vInicio := 1;
vTop := 1;
end;
end;
Responder Con Cita
  #2  
Antiguo 06-01-2010
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Hola, supongo que lo puedes hacer utilizando la logica:

Creamos 3 variables:
- ParentVarMin, ParentVarMax: TPanel
- TopCount, LeftCount : Integer

ParentVarMin quiere decir el panel de partida, y el ParentVarMax quiere decir el panel final.

entonces configuramos ambas variables ya mensionadas, ahora suponiendo que
el panel tiene un Width de 400 igual que Height y los botones un Width de 40 igual que Height, veriamos por logica que en un panel de esas dimensiones caberían en un total de 100 Botones por Width y Height ¿me entiendo?.

Boton 40x40
Panel 400x400

TopCount, LeftCount = 0

Se puede hacer un for entre la división del Panel con el boton (Width) (400/40 = 10) multiplicado por la división entre el Panel con el Boton (Height)(400/40 = 10) en total da un resultado de (10 * 10 = 100)

y dentro del for lo siguiente:

- un if que dice si ParentVarMin = ParentVarMax entonces Pare STOP pero si no es lo siguiente:

- Creamos otro for entre la división del Panel con el boton (Width) (400/40 = 10) y dentro de este:

- Creamos un botón con un Top multiplicado con el TopCount (40x0 = 0) y un Left multiplicado por su LeftCount(40x0 = 0), luego cuando acabe este proceso(la creación de 1 botón) se le aumentará 1 + al LeftCount para que la proxima dirección de Left sea 40, luego 80, 120, etc...

- Se puede usar la misma logica para la creación de TOP osea hacia abajo....

Es medio complicado pero con un poco de imaginación de seguro que lo logras, te toca convertir lo que dije en lenguaje DELPHI


Espero estar en lo correcto.jajajja

saludos.!
Responder Con Cita
  #3  
Antiguo 06-01-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
Cita:
Empezado por cmm07 Ver Mensaje
Hola, supongo que lo puedes hacer utilizando la logica:

Creamos 3 variables:
- ParentVarMin, ParentVarMax: TPanel
- TopCount, LeftCount : Integer

ParentVarMin quiere decir el panel de partida, y el ParentVarMax quiere decir el panel final.

entonces configuramos ambas variables ya mensionadas, ahora suponiendo que
el panel tiene un Width de 400 igual que Height y los botones un Width de 40 igual que Height, veriamos por logica que en un panel de esas dimensiones caberían en un total de 100 Botones por Width y Height ¿me entiendo?.

Boton 40x40
Panel 400x400

TopCount, LeftCount = 0

Se puede hacer un for entre la división del Panel con el boton (Width) (400/40 = 10) multiplicado por la división entre el Panel con el Boton (Height)(400/40 = 10) en total da un resultado de (10 * 10 = 100)

y dentro del for lo siguiente:

- un if que dice si ParentVarMin = ParentVarMax entonces Pare STOP pero si no es lo siguiente:

- Creamos otro for entre la división del Panel con el boton (Width) (400/40 = 10) y dentro de este:

- Creamos un botón con un Top multiplicado con el TopCount (40x0 = 0) y un Left multiplicado por su LeftCount(40x0 = 0), luego cuando acabe este proceso(la creación de 1 botón) se le aumentará 1 + al LeftCount para que la proxima dirección de Left sea 40, luego 80, 120, etc...

- Se puede usar la misma logica para la creación de TOP osea hacia abajo....

Es medio complicado pero con un poco de imaginación de seguro que lo logras, te toca convertir lo que dije en lenguaje DELPHI


Espero estar en lo correcto.jajajja

saludos.!
Todo lo que me comentas lo veo correcto el tema es como lo hago en lenguaje delphi soy algo novato la verdad.

Por cierto el panel no tiene un tamaña fijo ya que aumentan o disminuye segun el tamaño de la pantalla asi que no sabria nunca que tamaño tiene lo tendria que averiguar...

muchas gracias por la explicacion si me pudieras dar un cable con el codigo que es precisamenten mi fallo me harias un favor muy grande.

Gracias de antemano.

Saludos.
Responder Con Cita
  #4  
Antiguo 06-01-2010
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Hola, por lo del código veré que puedo hacer porque es un poquito complejo jejeej, por las dimensiones no te preocupes, recuerda que no vamos a poner valores exactos, si no vamos a poner los valores del panel por ejemplo (Panel1.Width o Panel1.Height) entonces será "AutoAjustable" según el tipo de resolución que sea..

Saludos!
Responder Con Cita
  #5  
Antiguo 06-01-2010
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Hola , pues no era tan complicado como pensaba, te dejo un avance para que ya veas algunos resultados:

Código Delphi [-]
var
HeightBut, WidthBut: Integer;
ParentVarCount, ParentVarMax: TPanel;
ID, I, TopCount, LeftCount : Integer;
Boton: TButton;
begin
HeightBut := 20;
WidthBut  := 20;
ParentVarCount:= Panel1;
ParentVarMax:= Panel1;
TopCount:= 0;
LeftCount := 0;

for I := 0 to (Round(ParentVarCount.Height / HeightBut)) - 1 do begin
  for ID := 0 to (Round(ParentVarCount.Width / WidthBut)) - 1 do begin
    Boton := TButton.Create(ParentVarCount);
    Boton.Left := LeftCount*WidthBut + ParentVarCount.Left;
    Boton.Top  := TopCount*HeightBut + ParentVarCount.Top;
    Boton.Height := HeightBut;
    Boton.Width := WidthBut;
    Boton.Parent:= ParentVarCount.Parent;
    Boton.Show;
    LeftCount:= LeftCount +1;
  end;
  LeftCount := 0;
  TopCount:= TopCount +1;
end;

CRea un panel con dimensiones 200x200

PD: pueden haber otros metodos que ocupe menos recursos....

Ahora solo falta agregar la función de que pase de un panel a otro......pero eso creo que lo haré después, si encuentras algo más no dudes en postearlo...

Utilice la opción ROund(redondeo) asi que la agregación de botones nunca va a ser perfecto a menos que la división entre el Height y Width del boton con el H o W del panel sea un numero entero, como en el ejemplo. 40x40 y 400x400 Número entero 10

54Lu2

Última edición por cmm07 fecha: 06-01-2010 a las 16:06:50.
Responder Con Cita
  #6  
Antiguo 06-01-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
Bien ahora lo voy a probar y te comento, no obstante muchas gracias adelantadas.

un saludo.
Responder Con Cita
  #7  
Antiguo 07-01-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
Hola Compañero,

con tu ayuda pude solventar el problema que tenia ya que me guie con tu codigo para poder completar el mio y solventar el tema, la verdad es que fue un gran aporte.

te pego mi codigo para que veas lo que hize, aparte me a servido para poder crear variables configurables y demas.....
Código Delphi [-]
  HeightBut         := 69;
  WidthBut          := 120;
  ParentVarCount    := vPestanyaProductos;
  ParentVarMax      := vPestanyaProductos;
  vContadorFilas    := 0;
  vContadorColunmas := 0;
  vNumeroFilas      := 6;
  vNumeroColunmas   := 8;

  While vContadorFilas <> vNumeroFilas do // Filas
  begin
    if BDades.TArticulos.Eof = False Then
    begin
      While vContadorColunmas <> vNumeroColunmas do  // Colunmas.
      begin
        if BDades.TArticulos.Eof = False Then
        Begin
          vProductoNombre := BDades.TArticulos.FieldByName('DESCRIPCION').AsString;
          vProductoCodigo := BDades.TArticulos.FieldByName('CODIGO').AsInteger;

          vBotonProductos := TButton.create(self);
          vBotonProductos.Parent  := vPestanyaProductos;
          vBotonProductos.Caption := vProductoNombre;
          vBotonProductos.Height  := HeightBut;
          vBotonProductos.Width   := WidthBut;
          vBotonProductos.Left    := vContadorColunmas*WidthBut + ParentVarCount.Left;
          vBotonProductos.Top     := vContadorFilas*HeightBut + ParentVarCount.Top;
          vBotonProductos.Enabled := True;
          vBotonProductos.visible := True;
          vBotonProductos.Tag     := vProductoCodigo;
          vBotonProductos.OnClick := vPersonalBotonOnClick;
          vBotonProductos.Show;

          BDades.TArticulos.Next;
          vContadorColunmas := vContadorColunmas +1;
        end
          else
            vContadorColunmas := vNumeroColunmas;
      end;
    vContadorColunmas := 0;
    vContadorFilas    := vContadorFilas + 1;
    end
      else
        vContadorFilas := vNumeroFilas;
  end;

Pero ahora solo me queda un pequeño problema y es el siguiente....

Como veras estoy tirando de una tabla la cual llenando la pantalla con la configuracion que tengo no se termina y me hace falta que al darle a siguiente registro me siga cargando el tema y si vuelvo a la pagina anterior me cargue de nuevo las anteriores...

eso como lo podria hacer????

mi intencion es que en el panel donde he dibujado 8 columnas por 6 filas me rellene esos botones con los productos pero claro cuando lo productos son mas que los botones me hace falta una manera para que se puedan ver en otra pagina....

Aparte si dibujo en otra pagina para hacer borrado del panel y volverlo a dibujar sin que me queden debajo los ya dibujados como lo hago?

Muchas gracias adelantadas.

Un Saludo.

Última edición por LiAnTe- fecha: 08-01-2010 a las 02:01:58.
Responder Con Cita
  #8  
Antiguo 08-01-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
nadie me puede ayudar con mis ultimas consultas?

gracias!
Responder Con Cita
  #9  
Antiguo 08-01-2010
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Amigo, ayudar no significa obligar a alguien, si nadie te contesta es porqué quizá no sepan hacerlo o no lo entienden, personalmente quizá te pueda dar una solución (no es muy probable) ya que ahorita estoy muuy cansado, pero mañana quizá analize tu problema con calma...

54Lu2
Responder Con Cita
  #10  
Antiguo 08-01-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
Cita:
Empezado por cmm07 Ver Mensaje
Amigo, ayudar no significa obligar a alguien, si nadie te contesta es porqué quizá no sepan hacerlo o no lo entienden, personalmente quizá te pueda dar una solución (no es muy probable) ya que ahorita estoy muuy cansado, pero mañana quizá analize tu problema con calma...

54Lu2
muchas gracias te lo agradeceria mucho.
Responder Con Cita
  #11  
Antiguo 08-01-2010
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Hola, lo que quieres hacer es un poco complejo, y la verdad es que no se me ocurre por ahora como hacerlo...........


losiento.......

54Lu2
Responder Con Cita
  #12  
Antiguo 27-04-2010
LiAnTe- LiAnTe- is offline
Miembro
 
Registrado: oct 2007
Posts: 47
Poder: 0
LiAnTe- Va por buen camino
Cita:
Empezado por cmm07 Ver Mensaje
Hola, lo que quieres hacer es un poco complejo, y la verdad es que no se me ocurre por ahora como hacerlo...........


losiento.......

54Lu2
se que es complicado llebo tiempo dandole vueltas sin exito!

es que soy algo novato.

Saludos.
Responder Con Cita
Respuesta



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
Botones Cañones Varios 6 19-07-2007 16:59:41
Problemas para crear botones jcDelphi Varios 3 08-06-2006 10:00:57
Botones en vcl gontxalo OOP 2 28-05-2005 10:38:16
botones con iconos vetustas Gráficos 2 15-12-2003 22:22:37
Problemas con botones TJLAqua!! adfa OOP 0 05-09-2003 20:36:51


La franja horaria es GMT +2. Ahora son las 04:17:26.


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