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 21-06-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
Referenciar componente con un string

Hola a todos..
Lo que quiero hacer el lo siguiente ..si se puede...Tengo una tabla donde tengo 3 campos : NombreFormulario (string) , NombreComponente (string), Visible(boolean).. entonces cada vez que entro a un formulario quiero filtrar esa tabla y habilitar los componentes segun esten en true o false en dicha tabla..
Saludos a todos
Gracias
Responder Con Cita
  #2  
Antiguo 21-06-2005
Avatar de Ohcan
[Ohcan] Ohcan is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: Madrid (España)
Posts: 119
Poder: 20
Ohcan Va por buen camino
No sé si te he entendido muy bien...

Podrías usar FindComponent...

Siento no ser más explícito... tengo un poco de prisa, si puedo luego sigo.

Saludos.
__________________
La violencia es el último recurso del incompetente. (Salvor Hardin)
Responder Con Cita
  #3  
Antiguo 21-06-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
me explico un poco mejor..

lo que yo voy a obtener en variables es :

var1:= TTable.fieldbyname('NOMBRECOMPONENTE).asstring;
res := TTable.fieldbyname('ES_VISIBLE').asboolean;

de la tabla filtrada segun el nombre del formulario donde ingrese.

entonces Var1 valdrá por ej. 'Button1'

lo que quiero hacer en el show del Formx es :

Formx.var1.visible := res;

que equivaldria a poner Formx.button1.visible := true; (o false)


Saludos y gracias
Responder Con Cita
  #4  
Antiguo 21-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Pues lo ya dicho te sirve.

Código Delphi [-]
  FindComponent(Var1).Visible := res;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 21-06-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
disculpa si no te comprendo pero..

como le indico que el componente que leo en un string tiene la propiedad VISIBLE..o sea que es un boton por ejemplo..
el codigo que hice es...

Procedure HabilitaComp(Formulario:TForm);
var vis:boolean;var1:string;
comp:Tcomponent;
begin
with FDatos.TControlComp do begin
filter := 'NOMBREFORM='+#39+Formulario.Name+#39;
filtered := true;
while Not eof do begin
vis :=fieldbyname('VISIBLE').asboolean;
var1:=fieldbyname('NOMBRECOMP').asstring;
with (formulario as TForm) do begin
comp:=findcomponent(var1);
comp.visible := vis;
end;
next;
end;
end;
end;

obviamente no me compila porque no reconoce a VISIBLE....
quise declarar en una VAR tipo TBitBtn pero no me dejo... como le indico que comp es un boton?

Saludos
gracias..
Responder Con Cita
  #6  
Antiguo 21-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola. En primer lugar, después de 44 mensajes, es de esperar que publiques los trozos de código entre etiquetas [ delphi ], [ sql ] o [ code ], según corresponda. El código que publicaste es realmente dificil de leer!!

Dado que no lo leí, pues me baso en el texto.

El punto es que aqui estamos tratando polimorficamente a los controles, y todos los controles, al heredar de TControl, tienen la propiedad visible. Ya el hecho de que se muestren o se dejen de mostrar en pantalla cada uno con su forma específica se lo dejamos a la herencia (maravilla de POO!).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Tienes que hacer un moldeo de tipos. FindComponent regresa una referencia de tipo TComponent así que debes moldearla a TButton.

Por favor usa las etiquetas [ code ] o [ delphi ] para que tu código sea legible. Podrás encontrar ayuda de cómo hacerlo en los mensajes que aparecen al principio de cada foro.

// Saludos
Responder Con Cita
  #8  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jachguate
al heredar de TControl, tienen la propiedad visible.
Sólo que FindComponent regresa TComponent y no TControl.

// Saludos
Responder Con Cita
  #9  
Antiguo 21-06-2005
ingel ingel is offline
Miembro
 
Registrado: jun 2003
Posts: 239
Poder: 21
ingel Va por buen camino
perdon ..

no suelo enviar codigo ..prometo la proxima hacerlo con las etiquetas..
ahora ... estan claras las rtas ..pero como hago lo del moldeo? ... mi POO no es una de mis virtudes

Encontre este hilo...
¿Cómo puedo llamar al método heredado de una clase que no es el ancestro directo?
voy bien encaminado.. o nada que ver ...
Responder Con Cita
  #10  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por ingel
pero como hago lo del moldeo? ... mi POO no es una de mis virtudes
El moldeo realmente no es cosa de OOP.

Código Delphi [-]
comp:=findcomponent(var1);

// asegúrate de que está la componente o te expones a un AV
if Assigned(comp) then
  TBitBtn(comp).visible := vis;


Cita:
Empezado por ingel
Encontre este hilo...
¿Cómo puedo llamar al método heredado de una clase que no es el ancestro directo?
voy bien encaminado.. o nada que ver ...
Nada que ver. Y cualquier forma de llamar a un método que no sea del padre directo rompe la filosofía de la OOP.

// Saludos
Responder Con Cita
  #11  
Antiguo 21-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por roman
Sólo que FindComponent regresa TComponent y no TControl.
cierto... cierto. Por un momento creí que habia un método FindControl..

Cita:
Empezado por roman
Código Delphi [-]
comp:=findcomponent(var1);

// asegúrate de que está la componente o te expones a un AV
if Assigned(comp) then
  TBitBtn(comp).visible := vis;
De igual manera, yo recomendaría un casteo seguro, no sea que al final de cuentas tampoco sea botón. Otra que sigue siendo válida es dejarlo todo apuntado a controles (TControl), así podrás ocultar/mostrar también etiquetas, grids, radio buttons, y muchas cosas mas.

Código Delphi [-]
comp:=findcomponent(var1);

// asegúrate de que está la componente o te expones a un AV
if Assigned(comp) and (comp is TControl) then
  TControl(comp).visible := vis;

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #12  
Antiguo 21-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jachguate
Código Delphi [-]
comp:=findcomponent(var1);

// asegúrate de que está la componente o te expones a un AV
if Assigned(comp) and (comp is TControl) then
  TControl(comp).visible := vis;
En este caso sobra ya la primera condición: si Comp es nil seguramente no será TControl

// Saludos
Responder Con Cita
  #13  
Antiguo 21-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Pero si Comp es nil (Assigned(Comp) = False), ya no se evalua la segunda parte de la sentencia if, claro, suponiendo que la opción Complete boolean eval esté desactivada en las propiedades del Proyecto...


Saludos...
Responder Con Cita
  #14  
Antiguo 21-06-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por roman
En este caso sobra ya la primera condición: si Comp es nil seguramente no será TControl

// Saludos
Vos.. siempre dando cátedra... Estas en lo cierto.

Seguro podria resumirse solamente a la segunda condición.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #15  
Antiguo 21-06-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
No seguramente, según la ayuda de Delphi, es válido hacerlo, ya que, como mencionó roman, si Comp es nil, pues obviamente no será TControl...


Y yo que pensé que sabía hacer un buen uso del is...
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


La franja horaria es GMT +2. Ahora son las 15:36:04.


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