FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Mensaje - Evento... antes de perder el foco, es posible???
bueno quisiera saber si se puede saber cuando un control esta por perder el foco, e visto q delphi dephine el CM_LOSTFOCUS se puede implementar de alguna forma para que mi aplicacion pueda recibir este mensaje.
si se preguntan porque es que busco esto, es porque quiero mostrar un mensaje al salir de un control, ya se que se puede hacer en el evento OnExit pero este evento ocurre cuando el control ya perdio el foco y otro control ya a recibido el foco. bueno les agradesco por adelantado cualquier sugerencia. |
#2
|
||||
|
||||
Disculpa, se que no soy un gran experto... y tal vez no haya entendido muy bien lo que pretendes:
Por el título de tu hilo dices que deber realizar ALGO justo antes de que se pierda el foco... pero... por otro lado dices: Cita:
|
#3
|
||||
|
||||
Cita:
Espero esto sea de utilidad, seguimos en contacto. Al González. El día en que uno se convierte en héroe de cómic sabe que realmente se hizo famoso. Nelson Mandela. |
#4
|
||||
|
||||
Esto si que es rapidez , agradesco sus prontas respuestas
Cita:
Cita:
Recien estoy entrando en esto de los mensajes y necesito una base de donde poder guiarme, como haria para que mi |
#5
|
||||
|
||||
Sin entrar en detalles, en la implementación te sobra la palabra message, en lo demás la implementación está bien. Otra cosa será el concepto .
saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#6
|
||||
|
||||
Si CM_LOSTFOCUS es un mensaje que ha de recibir el control entonces deberá hacerse tal como dice Al. No puede esperarse que simplemente poniendo la declaración en el formulario entonces el mensaje del control le llegará al formulario.
Por otro lado me da la impresión de que CM_LOSTFOCUS no se genera nunca. Al menos, buscando en las fuentes de la VCL, sólo encuentro la línea donde se declara la constante pero nada más. Haciendo algunas pruebas veo que WM_KILLFOCUS sí se genera antes de perderse el foco. // Saludos |
#7
|
||||
|
||||
lo de message fue un error al escribir el mensaje.
Por otra lado e implementado el mensaje WM_KILLFOCUS pero no se genera. Cita:
|
#8
|
||||
|
||||
¡Hola a todos!
Cita:
Como comentó Román, el evento no le llega a la forma. Según el archivo Win32.hlp que todo programador Windows debe tener al alcance de uno o dos clics: «The WM_KILLFOCUS message is sent to a window immediately before it loses the keyboard focus». Entendiendo en términos generales que el concepto de ventana en Win32 es cualquier objeto visible que tenga un identificador (handle) —controles y formas—. Así pues, para que el manejador de mensaje responda deberá ser implementado, como dije antes, en una nueva clase derivada del componente control en cuestión, ¿alguno en especial Ariefez? (TEdit, TButton, TDBGrid...), es decir, creando un nuevo componente descendiente. Ahora bien, existe una manera de interceptar el mensaje sin tener que definir nuevas clases de componentes, la cual consiste en utilizar el evento OnMessage del objeto Application (más fácilmente con un componente TApplicationEvents). Ahí podrás interceptar el mensaje wm_KillFocus y cualquier otro que sea puesto en la cola de mensajes del programa. Corrección: El mensaje wm_KillFocus no es puesto en la cola de mensajes de la aplicación. Por lo tanto no se puede utilizar TApplicationEvents para interceptarlo. «Note: OnMessage only receives messages that are posted to the message queue, not those sent directly with the Windows API SendMessage function», ayuda de Delphi. Espero esto sea de utilidad, seguimos en contacto. Al González. Última edición por Al González fecha: 02-11-2005 a las 21:39:54. Razón: Corrección |
#9
|
||||
|
||||
Disculpen por la demora pero no e podido entrar estas horas, yo especialmente busco capturar el evento para los TComboBox y TDBEdit; e probado con el TApplicationEvents
pero nunca se muestra el mensaje estoy haciendo algo mal? |
#10
|
||||
|
||||
¡Hola de nuevo!
Pido una disculpa. Tal parece que el mensaje wm_KillFocus no es puesto en la cola de mensajes de la aplicación (como lo supuse). Solamente es enviado al control que está por perder el foco. Por lo tanto es recomendable recurrir a la opción de crear clases derivadas de TComboBox y TDBEdit, incluyendo en ellas los manejadores de mensajes necesarios. Pero antes de que lo hagas Ariefez, ¿podrías detallarnos el contexto de este caso? (antecedentes, objetivo, etc.). Y decirnos qué quieres que el programa realice cuando uno de los controles esté por perder el foco. Gracias. Al González. |
#11
|
||||
|
||||
Claro q si, bueno mi problema surgio a causa de esto:
antes de cambiar de un ComboBox a otro control, verifico q lo ingresado se encuentra en sus items, si no esta incluido entonces muestro un mensaje ("...agregar el..."). esto lo hacia en el evento OnExit pero cuando paso de un ComboBox a otro ComboBox y se muestra el mensaje el cursor se pierde, ademas hace que me bloquee su desplegable, por eso queria saber si se podia de alguna forma capturar ese evento justo antes de q se pierda el foco; e estado creando un derivado del ComboBox pero el Mensaje WM_KILLFOCUS solo salta cuando se pierde el foco del teclado, cuando hago clic en otro componente no pasa nada, y tambien cuando la aplicacion pierde el foco, un ejemplo sencillo de esto seria: colocando dos ComboBox y en sus eventos OnExit mostrar un mensaje; al hacer clic repetidamente en cada control, uno queda bloqueado. se puede evitar ese bloqueo de alguna forma en mi caso no muestro los mensajes tan seguido. |
#12
|
||||
|
||||
Este es un tema que habia dejado colgado, y como no encontre solucion en su momento opte por otra, pero ahora navegando por la web exactamente en CodeGear encontre un ejemplo q solucionaba dicho poblema, sin mas q decir aca les adjunto la solucion a dicho problema, aunque solo se implementa para el evento OnEnter es valido para OnExit.
|
|
|
|