Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

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



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 12:50:44.


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