Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Sin mouse en todo el programa (https://www.clubdelphi.com/foros/showthread.php?t=67799)

Ruben_21 06-05-2010 20:39:01

Sin mouse en todo el programa
 
Hola a todos... primero que nada les digo que busque un tema como este y no lo encontre... me era dificil saber que palabras clave utiilzar... bueno... en caso de exister postenme el link por favor...

La duda que tengo que no se como hacer para que el mouse no se pueda utilizar en todo mi Form (y sus componentes hijos(edits, labels, etc)). Es decir que al hacer click el cualquier parte no pase absolutamente nada. Que los clics del mouse no tengan ningun efecto (no lanzen ningun evento) en el programa. Ya que mi objetivo es que solo se maneje por teclado.

Saludos.

roman 06-05-2010 22:18:13

Coloca un componente ApplicationEvents (pestaña Additional) y en su evento OnMessage coloca esto:

Código Delphi [-]
procedure TForm1.ApplicationEvents1Message(
  var Msg: tagMSG; var Handled: Boolean);
begin
  if
    (Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST) 
  then
    Handled := true;
end;

Esto aún te permitirá interactuar con el borde de la ventana. Si tampoco quieres esto entonces modifícalo así:

Código Delphi [-]
procedure TForm1.ApplicationEvents1Message(
  var Msg: tagMSG; var Handled: Boolean);
begin
  if
    (Msg.message >= WM_MOUSEFIRST) and (Msg.message <= WM_MOUSELAST) or
    (Msg.message >= WM_NCMOUSEMOVE) and (Msg.message <= WM_NCXBUTTONDBLCLK)
  then
    Handled := true;
end;

// Saludos

Ruben_21 06-05-2010 23:18:10

Hola roman... muchas gracias por contestar...

El codigo que pusiste me funciona perfecto salvo por una pequeñisima ecepcion. En mi form tengo un dbgrid y cuando hago clic el el scrollbar del dbgrid este recibe el evento del mouse. Es decir.. efectivamente cuando hago clic en el dbgrid no pasa nada pero cuando hago clic en el scrollbar(del dbgrid) si se mueve la barra del scroll.

Por si tienes algun consejo te lo agradeceria


Saludos.

ecfisa 07-05-2010 02:01:14

Hola Ruben_21.

Una solución posible es esta:

Cuando desactives el mouse usa este código:
Código:

procedure TForm1.DesactivarScrollBar;
begin
  // DESACTIVAR SCROLL HORIZONTAL
  EnableScrollBar(DBGrid1.Handle,SB_VERT,ESB_DISABLE_BOTH);
  // DESACTIVAR SCROLL VERTICAL
  EnableScrollBar(DBGrid1.Handle,SB_HORZ,ESB_DISABLE_BOTH);
end;

Cuando actives el mouse usa esto:
Código:

procedure TForm1.ActivarScrollBar;
begin
  // ACTIVAR SCROLL VERTICAL
  EnableScrollBar(DBGrid1.Handle,SB_VERT,ESB_ENABLE_BOTH);
  // ACTIVAR SCROLL HORIZONTAL
  EnableScrollBar(DBGrid1.Handle,SB_HORZ,ESB_ENABLE_BOTH);
end;


Saludos.

ecfisa 07-05-2010 02:08:22

Hola de nuevo.

Me acordé que si preferis ocultarlas tenes esta opción:
Código:

procedure TForm1.OcultarScrollBar;
begin
  ShowScrollBar(DBGrid1.Handle,SB_VERT,False);
  ShowScrollBar(DBGrid1.Handle,SB_HORZ,False);
end;

Y para mostrarlas nuevamente:
Código:

procedure TForm1.MostrarScrollBar;
begin
  ShowScrollBar(DBGrid1.Handle,SB_VERT,True);
  ShowScrollBar(DBGrid1.Handle,SB_HORZ,True);
end;

Saludos.

Ruben_21 07-05-2010 18:01:19

Muchas gracias ecfisa ... funciona perfecto

Gracias de nuevo.

Saludos.


La franja horaria es GMT +2. Ahora son las 07:57: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