Ver Mensaje Individual
  #4  
Antiguo 29-06-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hola.
Antes de nada, comentarte que utilices los TAG's cuando añadas código delphi a los mensajes.

Otra cosa (no se si porque has puesto el código de memoria), pero creo que este código (si lo tienes así en el programa) te va a dar problemas. O fallará directamente.

Código Delphi [-]
Bit := Tbutton.Create(Tpanel);
Bit.Parent := Tpanel;
Bit.Left := 1;
Bit.Top := 1;
Bit.Height := 25 ;
Bit.Width := 25 ;

En concreto la línea que asigna el Parent, debe fallar o no funcionará como piensas.

En cuanto a lo que necesitas, para contar los Paneles están utilizando ComponentCount y Components[i].
Para contar los botones en el interior de un TPanel, debes usar lo mismo, pero utilizando esa misma propiedad del contenedor. En este caso del TPanel.

Si utilizas un cóidigo como este:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  pnl:TPanel;
  Bit: Tbutton;
begin
  Randomize;
  // Crear paneles
  for var i:integer := 0 to 4 do begin
    pnl := Tpanel.Create(Self);
    pnl.Name := 'Panel_' + i.ToString;
    pnl.Parent := Self;
    pnl.Left := 1;
    pnl.Top := 1;
    pnl.Height := 75 ;
    pnl.Width := 25 ;
    pnl.Align := alTop;
    pnl.Caption := pnl.Name;
    // Crear botones
    for var j:integer := 0 to Random(5) do begin
      Bit := Tbutton.Create(pnl);
      bit.Name := 'Button_' + i.ToString + '_' + j.ToString;
      Bit.Parent := pnl;
      Bit.Left := (26*j);
      Bit.Top := 1;
      Bit.Height := 25 ;
      Bit.Width := 25 ;
      Bit.Caption := j.ToString;
    end;
  end;

  // contar paneles
  var c:integer := 0;
  var b:integer := 0;
  for var i:integer := 0 to (ComponentCount -1)  do begin
    if (Components[i] is TPanel) then begin
      pnl := TPanel(Components[i]);
      Inc(c);
      // contar botones
      b := 0;
      for var j:integer := 0 to (pnl.ComponentCount -1)  do
        if (pnl.Components[j] is TButton) then
          Inc(b);
      // Botones dentro de ese panel
      pnl.Caption := 'Este panel tiene ' + b.ToString + ' botones';
    end;
  end;
  Self.Caption := 'Se han encontrado ' + c.ToString+ ' paneles';
end;

Tienes como contar los paneles (aparece en el caption del form) y como contar los botones de cada panel (que aparece en el caption del propio Panel).
El resultado será algo similar a esto:

__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita