hola!
En tu código veo que hay una estructura
begin/end que queda fuera de todos los bucles, y se puede eliminar (lo he marcado con //* *//), salvo que sea un error y pertenezca a alguno de los bucles.
Código Delphi
[-]procedure TForm2.Paneles(TSN: Boolean; const Panels: array of TPanel; SiNo: Boolean);
var
i, ii: Integer;
begin
for ii := 0 to ComponentCount - 1 do
if Components[ii] is TPanel then
TPanel(Components[ii]).Visible := TSN; for i := 0 to ComponentCount - 1 do
if Components[i] is TPanel then
TPanel(Components[i]).Visible := not SiNo; for i := Low(Panels) to High(Panels) do
Panels[i].Visible := SiNo;
end;
Por otra parte el primer
for ii establece todos los paneles con el valor Visible a TSN, e inmediatamente el segundo
for i establece de nuevo los valores Visible a
not SiNo, con lo que al final el primer
for sería innecesario.
En cuanto a la parte lógica del proceso veo lo siguiente:
-Si no pasas una lista de paneles, (array de paneles esta vacío), estas actuando sobre todos los paneles y entonces el valor del campo
SiNo es irrelevante, puesto que solo se aplica al array de paneles, y en este caso al estar vacío no se va aplicar a ningún panel.
-Si por el contrario si se pasa una lista de Paneles, entonces la opción donde el valor de
TSN y el valor de
SiNo son iguales, es lo mismo que aplicar el valor a todos los paneles, independientemente de la lista que se ha pasado. Por tanto lo ideal es que
TSN sea distinto de
SiNO y al ser de tipo boolean la única opción es que
TSN:=not SiNO y de esta forma solo necesitas pasar una variable con el valor deseado al procedimiento.
Y el código puede quedar de esta forma:
Código Delphi
[-]procedure TForm2.SetPanelsVisible(const Panels: array of TPanel; const Value: Boolean = true);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
if Components[i] is TPanel then
TPanel(Components[i]).Visible := Not Value;
for i := Low(Panels) to High(Panels) do
Panels[i].Visible := Value;
end;
y yo añadiría un overload al procedimiento para poder utilizarlo de forma mas fácil cuando no quieras pasar el array:
Código Delphi
[-] TForm2 = class(Tform)
...
public
procedure SetPanelsVisible(const Value: Boolean); overload;
procedure SetPanelsVisible(const Panels: array of TPanel; const Value: Boolean = true); overload;
...
end;
...
procedure TForm2.SetPanelsVisible(const Value: Boolean);
begin
SetPanelsVisible([], not Value);
end;
Y la forma de uso es muy similar a la que ya tenias anteriormente:
Código Delphi
[-]
procedure TForm2.Button1Click(Sender: TObject);
begin
SetPanelsVisible(False); end;
procedure TForm2.Button2Click(Sender: TObject);
begin
SetPanelsVisible(true); end;
procedure TForm2.Button3Click(Sender: TObject);
begin
SetPanelsVisible([Panel1, Panel5], true); end;
procedure TForm2.Button4Click(Sender: TObject);
begin
SetPanelsVisible([Panel1, Panel5], False); end;