Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2004
NeWNeO NeWNeO is offline
Miembro
 
Registrado: ago 2003
Posts: 35
Poder: 0
NeWNeO Va por buen camino
Exclamation 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.
Responder Con Cita
  #2  
Antiguo 27-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 27-05-2004
NeWNeO NeWNeO is offline
Miembro
 
Registrado: ago 2003
Posts: 35
Poder: 0
NeWNeO Va por buen camino
¿Ejemplo?

¿Podrias poner algun ejemplo de como realizar esta tarea?
Responder Con Cita
  #4  
Antiguo 27-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 28-05-2004
NeWNeO NeWNeO is offline
Miembro
 
Registrado: ago 2003
Posts: 35
Poder: 0
NeWNeO Va por buen camino
AllocateHWND

Bien, utilizo el AllocateHWND para crear un handle y recibir los mensajes
Código Delphi [-]

Constructor TWinCDControl.Create;
begin
 inherited Create(Self);
 fHWND := AllocateHWND(WMDEVICECHANGE); // Handle de la "Ventanta"
end;

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?
Responder Con Cita
  #6  
Antiguo 28-05-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:45:24.


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
Copyright 1996-2007 Club Delphi