Problemas con checkado en checkbox de otra aplicacion
hola amigos, estoy viendo como puedo hacer para, desde mi proceso, marcar un checkbox de otro proceso.
Lo primero que hago es usar FindWindow para obtener el hwnd de la ventana.
Luego uso EnumChildWindow para recorrer todos los elementos de la ventana.
En el callback busco que la clase sea TCheckBox y si es asi retorno en LParam el hwnd del TCheckBox.
Luego uso la siguiente macro para activar/desactivar el checkbox:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Todo funciona correctamente ¿Donde está el problema? El problema es que, aunque aparezca checkado, si pongo una comprobacion en la "victima" tipo if(CheckBox1->Checked == true)... La comprobacion da como resultado que no está checkado y al pulsar sobre el se vuelve a marcar como si no lo estuviese antes.
¿Alguna idea de como arreglarlo?
|
En teoría no vas mal encaminado, debería funcionar, si no lo hace se debe a la gestión de la VCL. Puedes ir un paso más allá y simular un click del ratón
Saludos. |
Como las dos aplicaciones son mias ¿que tal si cambio el wndproc del checkbox por uno mio y dentro gestiono el evento BM_SETCHECK?
|
En ese caso usa un mensaje de usuario y lo gestionas como quieras.
Saludos. |
escafandra no se ni que es eso de un mensaje de usuario pero supongo será un mensaje inventado por mi ¿no?
Ya lo he conseguido así pero mandando el mensaje original. ¿es mejor usar uno propio para no pisar la funcion original o algo asi? Te pongo el link con los fuentes de los dos procesos que son clones pero solo cambia que uno busca a Proceso A y el otro a Proceso B, y en todas las partes que uno hace referencia a Proceso B, el otro hace referencia a Proceso A. Link: Aqui Me gustaria que le echaras un vistazo y me comentaras que cambiarias. Es el proyecto que uso en el tema de procesos que charlan entre si pero para hacerlos sincronicos o asincronicos uso un checkbox que al marcarlo en un proceso tambien se marca en el otro y, dependiendo del estado de ese checkbox, se desactiva el boton de enviar mensaje al enviar y se activa al recibir para hacerlo sincronico o nunca se desactiva para hacerlo asincronico. |
Los mensajes de usuario comienzan a partir del WM_USER, sirven para crear tus propios mensajes.
Cuando tenga un rato miro ese código. :) Saludos. |
Hola aguml.
Creo que lo complicas usando WndProc para capturar el mensaje, es mas simple: Emisor: codigo Código PHP:
header Código PHP:
Código PHP:
|
Ok, cambiado.
Con respecto a lo que hago para gestionar lo del CheckBox ¿como lo ves? ¿como lo mejorarías? Es que acabo de aprender lo de cambiar el WndProc y lo aplico a todo jejeje :o |
Hola aguml.
No estoy diciendo que esté mal usar WndProc, lo que sucede es que Builder ya tiene definido ese mensaje y te evitas la comprobación de si el mensaje fué otro. A ver si este ejemplo te dá otra idea... En el form emisor pone un TButton y un TCheckBox y en el receptor tres TCheckBox (CheckBox1, CheckBox2 y CheckBox3) . Emisor: Código PHP:
header Código PHP:
Código PHP:
|
Guauuu pues si que es potente este método.
|
La franja horaria es GMT +2. Ahora son las 12:09:21. |
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