FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Propiedad FocusControl
Hola Amigos !
Se puede hacer algo así ? utilizando la propiedad FocusControl del TLabel (o si fuera necesario TStaticText). No sé en otras versiones de Delphi, pero en D2005 la propiedad FocusControl es 'protegida'. Un saludo a todos !
__________________
Piensa siempre en positivo ! |
#2
|
||||
|
||||
La propiedad FocusControl de un TLabel no puede ser protegida, puesto que aparece en el inspector de objetos, por lo tanto es publicada (published).
Lo que ocurre es que no estás moldeando el Sender como un TLabel, y dudo mucho que un TObject tenga propiedad FocusControl (ni protegida ni nada). Lo que corresponde hacer, ya que sabes que dicho sender es un TLabel, es aplicar un molde a este. Yo aconsejo aplicar un moldeo seguro siempre que sea posible (usando el operador as para prevenir problemas de acceso a memoria con moldes inadecuados en el futuro.
Saludos
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
||||
|
||||
Perfecto !! ... muchas gracias.
__________________
Piensa siempre en positivo ! |
#4
|
||||
|
||||
Cita:
Yo suelo usar:
saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#5
|
||||
|
||||
A reserva de lo que diga Juan Antonio, te doy mi opinión.
Usar TLabel(Sender) es una apuesta a la consistencia de tu código. Estás confiando ciegamente en que Sender es de tipo TLabel y lo será no importa cuántos cambios hagas en lo futuro a tu código. Es más confiable protegerse uno mismo y verificar que el tipo de datos es realmente el esperado:
La forma que usa Juan Antonio, usando el operador as, también te protege ya que implícitamente, as comprueba el tipo de datos y si no coincide lanza una excepción. ¿Por qué protegerse? Bueno, razones puede haber muchas, pero yo lo veo similar a hacer: Código:
puntero^.campo := valor // Saludos |
#6
|
||||
|
||||
Solo para molestar un poco:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#7
|
||||
|
||||
Ya Roman ha explicado muy bien el porque usar el operador as/is en estos casos (recordá que el método Label1Click podrías asignarlo a componentes de diferentes clases en tiempo de ejecución, e incluso invocarlo desde código. Que pasa si a un futuro programador que está dando mantenimiento a tu código se le ocurre hacer esto:
Solo para terminar de molestar un poco... he podido comprobar que el método CanFocus puede decirnos true, y de todas formas ocurrir un error al intentar establecer el foco, así que para terminar de "molestar" en terminos de Fede:
Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#8
|
|||
|
|||
Yo haría este pequeño cambio:
Ya que al hacer una comprobación previa con el operador is, al usar as se estaría haciendo de nuevo una comprobación is. Recuerden lo que puso roman: Cita:
Saludos... Última edición por maeyanes fecha: 19-12-2005 a las 19:41:05. |
#9
|
||||
|
||||
Cita:
Cita:
Lo he visto en mas de una ocasión, nunca me lo puse a investigar, pero la solución del momento no distó en nada de la tuya Cita:
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#10
|
||||
|
||||
Cita:
Que conste, que realizo ese tipo de comprobaciones, y en este caso estoy con Maeyanes. No estoy seguro, pero creo haber leido en este foro, que el operador "as" sobrecarga más la situación. Desde mi punto de vista, creo que bastaría con: Una vez que estoy seguro que es un TLabel, accedo directamente haciendo el moldeo. Repito, es mi forma de trabajar, y ahora que ahondo en el problema, quizás fuese mejor simplemente: Ya que lanza una Excepción (que se verá en ejecución), desde mi forma de programar, simplemente notaré que "el programa no hace lo que debiera" (porque no entrará en el if si no es un TLabel), y tendría que hacer un traceo paso a paso hasta encontrar ese pequeño error. De la segunda forma, si el "soso" es muy soso, verá la excepción. No creo que tenga que arreglar los futuros problemas con mi código . saludos Saludos.
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#11
|
||||
|
||||
Cita:
// Saludos |
#12
|
||||
|
||||
Cita:
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
|