Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ayuda para Simplificar codigo (https://www.clubdelphi.com/foros/showthread.php?t=67831)

escorpionrojo43 08-05-2010 14:39:08

Ayuda para Simplificar codigo
 
Hola Companeros del Club. primero que nada soy novato en esto. el punto es que estoy haciendo un programa hasta el momento todo marcha bien pero mi codigo esta un poco grande y se que se puede simplificar, espero que me ayuden, el caso es que tengo 16 botones y a cada uno lo tengo con estas sentencias

procedure TTMSForm1.AdvGlowButton6Click(Sender: TObject);
begin
with AdvToolBarPager1 do
begin
AdvPages[0].TabVisible:=false;
AdvPages[1].TabVisible:=false;
AdvPages[2].TabVisible:=false;
AdvPages[3].TabVisible:=false;
AdvPages[4].TabVisible:=false;
AdvPages[5].TabVisible:=false;
AdvPages[6].TabVisible:=false;
AdvPages[7].TabVisible:=false;
AdvPages[8].TabVisible:=false;
AdvPages[9].TabVisible:=true;
AdvPages[10].TabVisible:=false;
AdvPages[11].TabVisible:=false;
AdvPages[12].TabVisible:=false;
AdvPages[13].TabVisible:=false;
AdvPages[14].TabVisible:=false;
AdvPages[15].TabVisible:=false;
ActivePageIndex:=9;
end;
end;

lo que quiero es que todos los AdvPages tengan la propiedad TabVisible:=false y que al dar click en el boton correspondiente se ponga como TabVisible:=true pero que al darle click a otro boton todos se pongan invisible a exepcion del que seleccione.

espero de su ayuda y gracias por prestarle atencion a un novato como yo.

rgstuamigo 08-05-2010 16:04:23

Y por que no ponerlo dentro de un ciclo for para optimizar el códico , algo así:
Código Delphi [-]
var indice:Byte;
begin
  for  indice:=0  to 15 do
   begin
       AdvPages[indice].TabVisible:=false;
   end;
  ...
  ...
end;
.
Saludos...;)

movorack 08-05-2010 16:06:36

hola...

mira... algo así creo que te puede servir... (Mientras escribia mi larguero rgstuamigo te logró responder con menos chachara :D)

Código Delphi [-]
procedure mostrarPage(PageIndex);
  procedure ocultarpages();
    var i : integer;
  begin
    for i := 0 to AdvPages.tabcount -1 do //No se si sera tabcount pero aqui va el total de las paginas
    begin
      AdvToolBarPager1.AdvPages[i].TabVisible := false;
    end
  end;
begin
  ocultarpages();
  AdvToolBarPager1.AdvPages[PageIndex].TabVisible := True;
  AdvToolBarPager1.ActivePageIndex := PageIndex;
end;

Para llamarlo... tendrias que agregar en cada boton algo como...

Código Delphi [-]
  mostrarPage(9);

ahora... lo que podrias hacer (no se si es correcto pero lo hago) es que podrias modificar el atributo tag de cada boton para que tenga el index que quieres mostrar y así todos los botones podrian llamar al mismo procedimiento...

Código Delphi [-]
  mostrarPage(TButton(Sender).tag);

ahora... este comportamiento que quieres se me parece mucho al del TJvPageList que en escencia es un pagecontrol sin tabs... pára navegar por el se usa el TJvPageListTreeView... donde haces en forma de arbol los links de navegación para el TJvPageList... es sencillo de manejar... todos estos componentes hacen parte de la JVCL por si quieres echarle un ojo...

escorpionrojo43 08-05-2010 16:51:18

[quote=rgstuamigo;363284]Y por que no ponerlo dentro de un ciclo for para optimizar el códico , algo así:
Código Delphi [-]var indice:Byte; begin for indice:=0 to 15 do begin AdvPages[indice].TabVisible:=false; end; ... ... end;

.
Perdona mi ignoracia es que como dije al pricipio soy nuevo en esto.
este ciclo for tengo que ponerlo en cada boton? y en los ... que se supone que tengo que poner?

Gracias.!

José Luis Garcí 08-05-2010 17:04:35

tambien puedes crear una función o procedure, pasarla parámetros, etc.

Mira en la búsqueda y el mismo procedimiento que te dio rgstuamigo te serviría

este es tu código original

Código Delphi [-]
procedure TTMSForm1.AdvGlowButton6Click(Sender: TObject);
begin
with AdvToolBarPager1 do
begin
AdvPages[0].TabVisible:=false;
AdvPages[1].TabVisible:=false;
AdvPages[2].TabVisible:=false;
AdvPages[3].TabVisible:=false;
AdvPages[4].TabVisible:=false;
AdvPages[5].TabVisible:=false;
AdvPages[6].TabVisible:=false;
AdvPages[7].TabVisible:=false;
AdvPages[8].TabVisible:=false;
AdvPages[9].TabVisible:=true;
AdvPages[10].TabVisible:=false;
AdvPages[11].TabVisible:=false;
AdvPages[12].TabVisible:=false;
AdvPages[13].TabVisible:=false;
AdvPages[14].TabVisible:=false;
AdvPages[15].TabVisible:=false;
ActivePageIndex:=9;
end;
end;

y este el que te propongo
Código Delphi [-]
Function MiAdvPAges(Page, Max:integer;Acivo:boolean);
var indice:Byte;
begin
  with AdvToolBarPager1 do
  begin
    for  indice:=0  to Max do
    begin
       AdvPages[indice].TabVisible:=Activo;
     end;
    ActivePageIndex:=PAge;  
   end;
end;

Te he puesto un ejemplo sin probarlo, pero creo que debería funcionar y la llamada desde un botón seria

Código Delphi [-]
MiAdvPAges(9, 15, False);

Seria lo mismo que tu has expuesto

movorack 08-05-2010 17:07:43

los tres hemos dicho lo mismo... por eso dije que rsgtuamigo ya habia contestado...

José Luis Garcí 08-05-2010 17:17:01

Cierto Movorack, pero Es que no había visto tu respuesta, debido a problemas de mi conexión, cuando le doy a bajar para seguir viendo la página, de cuando en cuando se me coloca directamente al final de la página.

escorpionrojo43 08-05-2010 17:55:48

Gracias a todos por la informacion me ha ayudado vastante.


La franja horaria es GMT +2. Ahora son las 14:01:28.

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