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 11-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
funcion para no repetir codigo:(

Holas que tal comunidad, espero en este tema si me puedan ayudar ya que con los remobjects de plano nadie me ha respondido nada , bueno expongo el siguiente tema:

lo que sucede es que ya que ando metido de lleno en delphi y en la programacion, estoy buscando alternativas para ahorrarme codigo y de paso que sea mas profesional, si alguien me pudiera ayudar de antemano como siempre mucha sgracias.

lo que intento es que tengo 8 botones ocultos, quiero que al hacer click en un menu, se visualice una pestania del pagecontrol, en este caso al seleccionar 1 si esta visible otra que se oculte para darle paso a la que acabo de clickear, para dar una idea hice este codigo con solo 4 botones:
Código Delphi [-]
if button1.enabled = True then
 begin
  button1.visible:= true;
  button2.visible:= False;
  button3.visible:= False;
  button4.visible:= false;
 end
else if button2.enabled = true then
 begin
  button1.visible:= False;
  button2.visible:= True;
  button3.visible:= False;
  button4.visible:= false; 
 end
else if button3.enabled = true then
 begin
  button1.visible:= False;
  button2.visible:= False;
  button3.visible:= True;
  button4.visible:= false; 
 end
else if button4.enabled = tue then
 begin
  button1.visible:= False;
  button2.visible:= False;
  button3.visible:= False;
  button4.visible:= True; 
 end

este codigo funciona y siempre lo he hecho para este tipo de casos pero me doy cuenta que es demasiado codigo para 4 botones, y yo tengo 8 :S aparte despues haria lo mismo para diferentes pagecontrol :S, lo que requiero es una funcion, que al clickear envie un parametro y segun el parametro este solo sea el visible y todos los demas, en mi caso los 7 botones restantes se oculten, pero como lo mostre hace un momento no quiero repetir todo el codigo mencionando todos los botones ocultos y solo el que sera visible,

intente hacer un arreglo :S:S:S en donde meto todo el codigo de los componentes, pero es obvio que nunca funcionaria por que un componente creo, no puede ser colocado como un string, y despues hacer que funcione como un objeto :S

Código Delphi [-]
procedure TfrmPrincipal.PestaniaVisible(NoPestania : Integer);
var
  i : integer;
  Pestania : array[0..7] of Variant;
begin
  Pestania[0]:= dxRibbonPrincipalTab3.Visible;
  Pestania[1]:= dxRibbonPrincipalTab4.Visible;
  Pestania[2]:= dxRibbonPrincipalTab5.Visible;
  Pestania[3]:= dxRibbonPrincipalTab6.Visible;
  Pestania[4]:= dxRibbonPrincipalTab7.Visible;
  Pestania[5]:= dxRibbonPrincipalTab8.Visible;
  Pestania[6]:= dxRibbonPrincipalTab9.Visible;
  Pestania[7]:= dxRibbonPrincipalTab10.Visible;
  i:= 0;
  while i <= 7  do
    begin
      if i <> NoPestania then
        begin
          Pestania[i]:= False;
        end
      else
        Pestania[i]:= True;
      i:= i +1;
    end;
end;

era algo asi en donde en un arreglo guardaba las declaraciones de los botones, en mi caso son pestanias, de un pagecontrol, y segun el parametro que enviaba, esa pestanaia que estaba almacenada en el arreglo, lo pondria despues en True, si es que coincidia, sino pues se pondria en False, es obvio que nunca haria nada pro que primero lo pongo en string y despues lo pongo en True, sobreescribiendo el valor de un string a true, pero bueno esa fue un intento fallido y algo tonto, :S pero por lo menos lo intente, espero me puedan ayudar en esto por que no se como hacerle o si es que se puede hacer de esa forma, o si me tengo que conformar con todo el codigo de los if, o case :S que es lo mismo , espero me puedan ayudar o orientar se los agradeceria, saludos

Última edición por ecfisa fecha: 11-08-2011 a las 14:13:26. Razón: ETIQUETAS [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 11-08-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Respecto a visualizar los botones que quieres, la solución es poner a cada botón en la variable Tag un número 1..4 y con éste procedimiento hacerlo todo.
Código Delphi [-]
procedure ShowButtonVisible(btn: ShortInt);
begin
  Button1.Visible := (Button1.Tag = btn);
  Button2.Visible := (Button2.Tag = btn);
  Button3.Visible := (Button3.Tag = btn);
  Button4.Visible := (Button4.Tag = btn);
end;
Espero que te sirva.
Un saludo.
Responder Con Cita
  #3  
Antiguo 11-08-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Respecto a las pestañas seria de la misma forma que los botones.
Un saludo.
Responder Con Cita
  #4  
Antiguo 11-08-2011
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Hola, por si quieres otra opción o por si te sirve para otras cosas también podrías hacer lo siguiente, pasando como parametro el número del botón que quieres hacer visible podrías hacer lo siguiente:

Código Delphi [-]
procedure mostrarboton(numero:string);
var
x:integer;
begin
for x:=1 to 8 do
  begin
    TButton(FindComponent('Button'+inttostr(x))).Visible:=false;
  end;
TButton(FindComponent('Button'+numero)).Visible:=true;
end;

Espero te sirva.
Saludos.
Responder Con Cita
  #5  
Antiguo 11-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
hola que tal olbeup muchas gracias por la respuesta, y te mentiria si es que le he entendido, creo que si en parte pero quisiera aclararlo, ok entonces a las pestanias, les pongo un numero diferente en su propiedad TAG como me has dicho, que por cierto si lo traen, una vez que estan puestos los numeros, supongo que al dar click en un boton eligiendo que pestania quiero que se vea, tengo que enviar el numero del TAG que pertenece a la pestania que quiero visualizar, algo asi, este es en realidad el nombre del procedimiento y asi enviare el numero
Cita:
procedure TfrmPrincipal.dxBarLargeButton1Click(Sender: TObject);
begin
PestaniaVisible(0);
end;
con esto envio el numero de la pestania, que tien el TAG, el procedimiento entonces recibe el numero, lo carga en la variable btn que tu declaraste y lo asigna segun corresponda el boton, es lo que entiendo, pero en que momento digo o menciono que 'Visible:= True;' creo que es esa la parte en la que no entiendo y la parte en la que los demas botones los pongo en False, espero no dar mucha molestia con el tema, y sorry si no entendi, sera que como son las 11:42 PM ya por hoy no doy mas, entendi muy bien lo que mencionas en cierta parte, pero no en donde te digo como poner a los demas en False, y al boton que elijo en True, muchas gracias pro la ayuda que me has dado y espero me puedas aclarar ese punto , gracias
Responder Con Cita
  #6  
Antiguo 11-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
ElDioni andale eso es lo que estaba intentando con el array en tipo variant xD pero estaba cometiendo ese gran error xDDDD de despues cargar los datos con TRUE, probare tu procedimiento al igual que el procedimiento de olbeup, muchisimas gracias a ambos por tomarse la molestia de responder a mi pregunta, de antemano gracias enserio, siempre es un gusto saber que hay personas que se toman el tiempo para ayudar a otros gracias
Responder Con Cita
  #7  
Antiguo 11-08-2011
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
Poder: 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
Cita:
Empezado por ivantj24 Ver Mensaje
lo que intento es que tengo 8 botones ocultos, quiero que al hacer click en un menu, se visualice una pestania del pagecontrol, en este caso al seleccionar 1 si esta visible otra que se oculte para darle paso a la que acabo de clickear, para dar una idea hice este codigo con solo 4 botones,....

Para la prrimera yo hubiera hecho algo así (funciona con cualquier número de botones que pases como parámetro, ya sean 4, 8,...)

Código Delphi [-]
procedure TForm1.MostrarOcultarBotones(btnArray: array of TButton);
var
  i, j:integer;
begin
  for j := Low(btnArray) to High(btnArray) do begin
    if btnArray[j].Enabled then begin
      for i := Low(btnArray) to High(btnArray) do begin
        btnArray[i].Visible := (i = j);
      end;
    end;
  end;
end;

La segunda no me ha quedado muy clara, pero supongo que puedes hacer algo similar.
__________________
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
  #8  
Antiguo 11-08-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
Código Delphi [-]
procedure TfrmPrincipal.ShowButtonVisible(btn: ShortInt);
begin
  Button1.Visible := (Button1.Tag = btn);
  Button2.Visible := (Button2.Tag = btn);
  Button3.Visible := (Button3.Tag = btn);
  Button4.Visible := (Button4.Tag = btn);
end;

procedure TfrmPrincipal.ShowTabSheetVisible(ts: ShortInt);
begin
  TabSheet1.Visible := (TabSheet1.Tag = ts);
  TabSheet2.Visible := (TabSheet2.Tag = ts);
  TabSheet3.Visible := (TabSheet3.Tag = ts);
  TabSheet4.Visible := (TabSheet4.Tag = ts);
end;

Sustituye éste
Cita:
procedure TfrmPrincipal.dxBarLargeButton1Click(Sender: TObject);
begin
PestaniaVisible(0);
end;
Por éste
Código Delphi [-]
procedure TfrmPrincipal.dxBarLargeButton1Click(Sender: TObject);
begin
  ShowButtonVisible((Sender as TButton).Tag);
  ShowTabSheetVisible((Sender as TButton).Tag);
end;

Última edición por olbeup fecha: 11-08-2011 a las 14:12:16.
Responder Con Cita
  #9  
Antiguo 11-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ivantj24.

Otra opción más para ocultar los botones:
Código Delphi [-]
procedure TForm1.ButtonsClick(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to ComponentCount-1 do
   if(Components[i] is TButton) and (TButton(Components[i]).Name <> TButton(Sender).Name) then
     TButton(Components[i]).Visible:= False;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 11-08-2011
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Creo que este código te servira para lo que requieres...

Debes considerar lo siguiente:
El ejercicio consta de:

Un Menu con los siguientes items:

mnuPage0.Caption:='Pagina 0';
mnuPage0.Tag:=0; //COrresponde al indice de la página a mostrar

mnuPage1.Caption:='Pagina 1';
mnuPage1.Tag:=1;

mnuPage2.Caption:='Pagina 2';
mnuPage2.Tag:=2;

En el evento del mnuPage0 escribe este código:

Código Delphi [-]

Procedure TForm1.ShowPage(Index:Integer);
var
   i:Integer;
begin
       //Se asegura de ocultar todas las paginas.
       For i:=0 to PageControl1.PageCount-1 do
            PageControl1.Pages[i].TabVisible:=False;

     //Activa la pagina correspondiente
     PageControl1.Pages[Index].TabVisible:=True;
end;

procedure TForm1.mmuPage0Click(Sender: TObject);
begin
       ShowPage(TMenuItem(Sender).Tag);
end;

Y asocialo a los otros menuitem (mnuPage1, mnuPage2);

Eso seria todo.
Responder Con Cita
  #11  
Antiguo 11-08-2011
ivantj24 ivantj24 is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 110
Poder: 14
ivantj24 Va por buen camino
Muchisimas gracias a todos en verdad los que ayudan con las dudas que tenemos quienes comenzamos o tenemos poco tiempo en delphi, en verdad gracias a todos y cada uno probe los codigos y si sirven, espero que pueda servir a mas de uno con todas las referencias que me dieron, gracias y saludos comunidad
Responder Con Cita
  #12  
Antiguo 18-10-2012
rpgr rpgr is offline
Registrado
 
Registrado: ene 2004
Posts: 9
Poder: 0
rpgr Va por buen camino
Activar O Dsactivar Botones

procedure TFRMVehiculo.boton(Btn1,Btn2,Btn3,Btn4: Boolean);
begin
// BtnGrabar.Enabled :=Btn1;
// BtnEliminar.Enabled :=Btn2;
// BtnCancelar.Enabled :=Btn3;
// BtnSalida.Enabled :=Btn4;
end;


procedure boton(Btn1,Btn2,Btn3,Btn4: Boolean);
public
{ Public declarations }
end;



y cuando quieras activas o desactiva

boton(false,false,false,true);
Responder Con Cita
  #13  
Antiguo 18-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Recuerda poner los tags al código fuente, ejemplo:



Gracias
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
funcion recursiva para este codigo ingabraham Varios 11 21-06-2011 18:01:07
Componente para buscar registros, para no repetir codigo. flystar Conexión con bases de datos 9 28-04-2010 23:16:15
Existe alguna tecnica para no repetir codigo? pablopessoa Varios 25 11-03-2010 00:28:41
funcion repetir string elcigarra OOP 2 20-03-2009 21:54:53
Problemas con la función MCISendString para reproducir/repetir archivos MIDI Black_Ocean Internet 2 27-03-2008 21:37:36


La franja horaria es GMT +2. Ahora son las 03:52:16.


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