FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Campo.Visible := False; ¿Porque no esconde los controles?
Siempre habia tenido la idea de que si en una forma donde se muestra un control asociado a un campo, si yo pongo ese campo en Visible := False, el control asociado desaparecería, pero no fue así hoy que lo probé...
Por lo menos no es así de directo... he visto que en cada campo hay un método FocusControl, no hay modo de obtener un puntero a dicho control como para poder hacerlo Invisible??... lo que no quiero es tener que recorrer todos los controles de la forma para ver cual esta asociado con el susodicho campo, quiero algo un poco más automatizado y no chapucero. Igual y me estoy liando y nomas es llamar a algún metodillo que ya lo hace, pero yo no lo he encontrado, y con esta ayuda que trae el Delphi 2007 no hay quien le entienda. Lo que quisiera es que si el control asociado es una columna de un grid pues que tambien esa columna desapareciera (osea no siembre es un customedit el control asociado) porque el FocusControl si lo hace. Gracias de antemano carnalitos.
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#2
|
||||
|
||||
Por lo que he visto en mis investigaciones el control viene asociado por algun objeto de la clase TDataLink pero no encuentro donde puedo acceder a el desde el campo.
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#3
|
||||
|
||||
Esto es lo que no quería hacer pero es lo único que me ha funcionado hasta ahorita:
Pero como ven tengo que recorrer todos los controles de la forma para saber si estan asociados con el campo que quiero esconder, en todo caso quisiera mejor poder acceder a una lista de controles que dependen del campo para ir directo a esos controles... además este código asi tal cual no funciona para las columnas de un DBGrid, tendría que modificarlo todavia para que soporte eso. ¿alguna idea?
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#4
|
|||
|
|||
Hola...
Según la ayuda.. la propiedad Visible de un TField solo sirve para indicar si este se muestra o no en un data grid... En tu código no necesitas del TDataLink para saber si un campo está o no asociado a un control... Podrías intentar con lo siguiente:
Esto lo hice de memoria y sin probarlo, espero te sirva... Saludos... Última edición por maeyanes fecha: 05-10-2007 a las 19:06:58. |
#5
|
||||
|
||||
Cita:
Cita:
Todavia no puedo creer que no exista modo de hacerlo directamente desde el campo... Como algo tan sencillo tiene que ser tan chapucero. PD. ya estoy pensando en ponerselos como un hilo de esos clásicos que luego surgen de: "A ver quien puede con esto... a ver si muy salsas..." para que aunque sea me la mienten
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#6
|
||||
|
||||
Tú mismo has dicho la solución:
"en todo caso quisiera mejor poder acceder a una lista de controles que dependen del campo para ir directo a esos controles." Podrías usar un TStringList donde guardas el nombre del campo. El objeto asociado a ese elemento sería un TObjectList que guarda la lista de controles asociados al campo. Aunque me parece tedioso. ¿Por qué quieres ocultar ese control y/o columna del Grid? ¿Es acaso temas de privilegios de usuarios? ¿Es solo el campo llamado "SIZE" o son muchos otros? Otra solución: Se podría tener una propiedad en la ventana llamada HideSIZE:Boolean , al establecer dicha propiedad, oculta o no los controles específicos de ese Form. Edito: Un campo puede tener 4 DBEdits asociados a él, y solo tiene una propiedad FocusControl por lo que, a priori, no puedes saber qué controles tiene asociado. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. Última edición por Lepe fecha: 06-10-2007 a las 14:05:23. |
#7
|
||||
|
||||
Cita:
Cita:
Cita:
Me sorprende que personas que lleven tantos programas de BD a cuestas nunca se hayan topado con esto o no lo hayan resuelto de alguna manera elegante.
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#8
|
||||
|
||||
Ok... un gran maestro me ayudo y me ha resuelto el problema de una manera muy elegante... aqui les pongo lo que he hecho para que vean y juzguen:
Lo que yo queria inicialmente es que no se vea el contenido de unos campos en los controles ok?? ocultarselo solo a ciertos usuarios... ok, estaba el caso que me comentaron aqui de que tambien podian haber muchos controles asociados al campo y desaparecerlos uno a uno era un problema pues habia que recorrer todos los controles de la forma solo para hacer eso... entonces mi amigo me dijo: "ok, tu focalizate en el campo, no en los controles; al final de cuentas eso es lo que tu quieres que no se vea: el contenido del campo" Asi que me dijo que hiciera este método en mi forma:
Y para cada campo que deseas esconder del usuario hazle esto:
Funciona de las mil maravillas, todos los controles que se asocien no importa de que tipo sean, su contenido siempre va a estar oculto, pero la información original no se pierde... No cabe duda, el que sabe, sabe!!!
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#9
|
|||
|
|||
Pero ahí escondes el valor del campo, no el control, no?
Por lo que veo solo estás usando un evento de TField (que no conocía )... Que bueno que encontraste la solución a tu problema... Saludos... |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Como mantengo visible el campo de un BDLookupComboBox | esimon | OOP | 3 | 12-09-2007 18:41:57 |
BorderIcons false | Caral | Varios | 14 | 13-04-2007 06:52:03 |
Porque Desaparece el Dato en un Campo LookUp??? | AGAG4 | Varios | 1 | 31-08-2005 14:46:47 |
True, False en un qreport | Masu | Impresión | 2 | 02-05-2005 20:47:13 |
True y False | MRSAM | MySQL | 2 | 12-06-2003 22:36:10 |
|