FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
WM_DEVICECHANGE en un TComponent
Wolaps:
Estoy construyendo un Componente no visual para poder controlar ciertos parámetros de los lectores. Utilizo el siguiente código: procedure WMDEVICECHANGE(var msg:tmessage);message WM_DEVICECHANGE; procedure TWinCDControl.WMDEVICECHANGE(var msg:tmessage); const DBT_CONFIG_CHANGED = $0018; DBT_DEVICE_ARRIVAL = $8000; DBT_DEVICE_QUERY_REMOVE = $8001; DBT_DEVICE_QUERY_REMOVE_FAILED = $8002; DBT_DEVICE_REMOVE_PENDING = $8003; DBT_DEVICE_REMOVE_COMPLETE = $8004; DBT_DEVICE_TYPE_SPECIFIC = $8005; begin case msg.WParam of DBT_DEVICE_REMOVE_COMPLETE: OnCDOpen(Self);// Acciones al abrir DBT_DEVICE_ARRIVAL: OnCDClose(Self);// Evento al cerrar end; end; OnCDOpen y OnCDClose son 2 TNotifyEvent declarados correctamente y funcionan si se les aplica cualquier otra función Este código utilizado en cualquier aplicación normal funciona a la perfección, pero al introducirlo en mi componente no funciona. ¿Alguien me puede dar una solución para hacer que funcione? Última edición por NeWNeO fecha: 27-05-2004 a las 15:39:38. |
#2
|
||||
|
||||
Tené en cuenta que ese mensaje solo lo recibirán las controles que tengan un Handle, digamos los que tengan “Ventana”. Si desarrollas un control no-visual una práctica común es crear un handle y apuntar el procedimiento de entrada de mensajes (WndProc) a un método de tu clase.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
¿Ejemplo?
¿Podrias poner algun ejemplo de como realizar esta tarea?
|
#4
|
||||
|
||||
No te puedo poner un ejemplo, pero puedo decirte que puedes utilizar las apis: CreateWindowEx, SetWindowLong y DestroyWindow. O las funciones de la VCL: AllocateHWnd y DeallocateHWnd.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#5
|
|||
|
|||
AllocateHWND
Bien, utilizo el AllocateHWND para crear un handle y recibir los mensajes
Siendo WMDEVICECHANGE el proceso encargado de leer el mensaje (anotado en el primer mensaje) en el destructor hago un DealloateHWND. Al consultar el handle creado en el componente sale 0 ...¿Cual es la forma correcta de usar el AllocateHWND? |
#6
|
||||
|
||||
Tené en cuenta que en el método WMDEVICECHANGE, entrarán todos los mensajes de la ventana creada, si el mensaje no es del tipo WM_DEVICECHANGE tendrías que dejar que la ventana lo procese (DefWindowProc).
Por otro lado te recomiendo cambiarle el nombre al método por alguno mas estándar como WndProc. Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
|
|
|