Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

no hacer click con tecla de espacio?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: no hacer click con tecla de espacio? Responder citando

Hola,
A ver si alguien me ayuda: lo que quiero es que cuando el foco está en un botón éste no haga click al pulsar la tecla de espacio, que sólo haga click con el enter o el ratón.

Gracias

Volver arriba
Mensaje    Asunto: no hacer click con tecla de espacio? Responder citando

En el Evento onKeyPress del Boton pones:

if(Key == VK_SPACE)//si es la tecla espacio...
Key = 0;//aqui no ha pasado nada.

Volver arriba
Mensaje    Asunto: no hacer click con tecla de espacio? Responder citando

A ver si te sirve esto. Aqui cambiamos el comportamiento de todos los TButton para todo el programa:

En el constructor del form añade:

    Application->OnMessage = AppMessage;

Y luego declara e implementa la siguiente función:

    void __fastcall TForm1::AppMessage(MSG &Msg, bool &Handled)
    {
        // Comprobamos si se ha pulsado o soltado una tecla y si es un botón
        if ( (Msg.message==WM_KEYDOWN | | Msg.message==WM_KEYUP)
            && dynamic_cast<TButton*>(FindControl(Msg.hwnd)) )
        {
            // Deshabilitamos la barra espaciadora
            if ( Msg.wParam == VK_SPACE )
                Handled = true;
            // Convertimos las pulsaciones de 'enter' en 'espacio'
            else if ( Msg.wParam == VK_RETURN )
                Msg.wParam = VK_SPACE;
        }
}

Volver arriba
Mensaje    Asunto: no hacer click con tecla de espacio? Responder citando

Gracias a los dos,
Alfredo para que lo tuyo no funciona,he probado a cambiar la propiedad KeyPreview del form a true, pero sigue sin funcionar.

Voy a probar lo de Leo y si no funciona optaré por evitar que el botón en concreto tenga el foco cuando no me interesa(mala programación pero más rápido jeje) Wink

Volver arriba
Mensaje    Asunto: no hacer click con tecla de espacio? Responder citando

Disculpa... a veces las cosas que parecen obvias no funcionan y me esta bien empleado por aconsejar algo sin haberlo probado antes.

La solucion corta:


#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1KeyPress(TObject *Sender, char &Key)
{
if(Key == VK_SPACE)//si viene por pisar espacio
Button1->OnClick = NULL;//le quitamos el evento.


}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ShowMessage("Hola");//lo que se supone hace el boton
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Button1->OnClick = Button1Click;//si es por el raton devolvemos el evento
}
//---------------------------------------------------------------------------

Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.