PDA

Ver la Versión Completa : Capturar click del boton medio del mouse


gonzalovw
23-10-2014, 21:25:00
Estimados,
Antes que todo gracias por aceptarme. Hace muy poco me todo hacer modificaciones en una aplicacion de windows hecha en delphi y la verdad que es la primera vez que hago algo en este lenguaje.
El inconveniente que tengo es hacer que el click del boton medio del mouse me dispare la accion de un boton sin importar en la posicion de la pantalla que me encuentre.
Estuve leyendo varias cosas y todos hablan de Hook pero la verdad es que probe varios ejemplos y no logro hacer que detecte cuando presiono el boton.

Espero puedan ayudarme!
Desde ya muchas gracias!!!
Gonzalo.

roman
23-10-2014, 22:07:35
No se entiende bien tu pregunta. Un botón tiene el evento OnClick que se ejecutará siempre que hagas clic en el botón y sólo se puede hacer clic sobre un botón cuando el ratón está sobre él.

// Saludos

gonzalovw
24-10-2014, 15:16:48
En donde capturo todos lo eventos le agregue lo siguiente:


Case Msg.message of
WM_MBUTTONDOWN:


Ahi capturo el click del boton del medio y luego ejecuto el click del boton!


procedure TfPrincipal.eventosMessage(var Msg: tagMSG; var Handled: Boolean);
var
err: EdsError;
archivo,archivoRaw,extFile,destino: string;
begin
Handled := false;
//if (Msg.message = WM_CANCELJOURNAL) and FHookStarted then
// JHook := SetWindowsHookEx(WH_JOURNALRECORD, @JournalProc, 0, 0);
Case Msg.message of
WM_MBUTTONDOWN:
begin
if bCapturar.Enabled then
bCapturar.Click
end;
WM_USER + 1: { Property Event occurred } // Por ahora no manejo los cambios de propiedades
begin
if Msg.wParam = kEdsPropertyEvent_PropertyChanged then
// get property
begin
FAppMaster.getProperty(Msg.lParam);
// UpdateProperty( Msg.lParam );
Handled := true;
end;

if Msg.wParam = kEdsPropertyEvent_PropertyDescChanged then
// get property desc
begin
FAppMaster.getPropertyDesc(Msg.lParam);
// UpdatePropertyDesc( Msg.lParam );
Handled := true;
end;
end;

WM_USER + 2: { Object Event occurred }
begin
archivo := 'ImgTmp' + IntToStr(camActiva) + '.jpg';
archivoRaw := 'RawTmp' + IntToStr(camActiva) + '.cr2';
err := FAppMaster.getImageData(EdsBaseRef(Msg.lParam), pTemp, archivo, archivoRaw, extFile);
if extFile = '.CR2' then
procesarImagenRecibidaRaw(archivoRaw, camActiva, nFoto);
Application.ProcessMessages;
if err <> EDS_ERR_OK then
MessageDlg('Error en la recepción de imagen (' + IntToStr(err) + ')',
mtError, [mbOk], 0)
else
begin
if not enCaptura then
begin
// no hace nada... esto deberia eliminar los disparos manuales...
end
else
begin
if not enTest and not enRepeticion then
nFoto := nFoto + 1;
procesarImagenRecibida(archivo, camActiva, nFoto);
end;
end;
enCaptura := false;
Handled := true;
end;

WM_USER + 3: { Progress callback event }
begin
ajustarProgreso(Msg.wParam);
Handled := true;
end;
end;

end;


Saludos!
Gracias!!