Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-08-2007
Avatar de Lonidas
Lonidas Lonidas is offline
Miembro
 
Registrado: abr 2006
Posts: 35
Poder: 0
Lonidas Va por buen camino
Unhappy capturar ESC+F4

Hola, estoy queriendo capturar las teclas Esc+F4 osea que al presionarlas juntas realice una acción, he buscado en el foro y encontré varios hilos interesantes pero ninguno me ayuda con mi problema, hay soluciones para cuando uno quiere presionar dos teclas con alt,shift,ctrl…. Pero no con Escape.
Si detecto las teclas por separado no hay problema en el Onkeydown funciona perfecto pero al querer capturar ambas no hay caso.
He probado asi

Código Delphi [-]
if (key=vk_escape) and (key=vk_f4) then
{lo que quiera hacer}




Lo probé en el Onkeydown, Onkeypress, Onkeyup y nada esto lo estoy probando en un Dbgrid y en un Dbedit, y de tanto probar y ver en los hilos relacionados en el foro me encontré con otro problema el mendigo Escape funciona como cancelación de acción, ósea que si estoy en el dbedit y doy escape me borra lo que escribí osea que cuando lo quiero capturar primero me borra el contenido y luego ejecuta mi código, de igual manera en el dbgrid, me cancela toda la fila con valores que había cargado.
En síntesis primero creo que debo solucionar el tema de que hay algo que captura el Escape antes que el Onkeypress y ahí estoy perdido porque no sabría que seria.
Si me pudiesen dar una mano les agradecería…
Como datos extras les digo que el form tiene la propiedad keypreview=false para que el from no trate de capturar las teclas, todos los botones que posee el formulario tienen la
propiedad default=false para que no ejecuten ninguna acción al enter o al escape como he leido en otro hilos

No escribo los otro codigo que encontre en los hilos porque ya se hace muy larga mi explicación…
Responder Con Cita
  #2  
Antiguo 14-08-2007
Avatar de Lonidas
Lonidas Lonidas is offline
Miembro
 
Registrado: abr 2006
Posts: 35
Poder: 0
Lonidas Va por buen camino
Thumbs up yo de nuevo

me pasaron este codigo y solucione lo del esc+f4

if (HiWord(GetKeyState(VK_escape)) <> 0)and(HiWord(GetKeyState(VK_f4)) <> 0) then


pero aun no puedo solucionar lo de evitar la accion del escape osea que no me cancele o borre nada
Responder Con Cita
  #3  
Antiguo 14-08-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Como has encontrado la solución, lo que procede es dejarlo, no borrarlo, así otros usuarios tendrán acceso a esa solución.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 14-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
A ver si esto te resulta útil:


Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts;

type
  TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  lEscape : Boolean;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;  var Handled: Boolean);
begin

 Handled := False;
      if  (Msg.Message = WM_KEYDOWN) then
      BEGIN
        if Msg.wParam = VK_ESCAPE then
            Begin
            lEscape := True;
            Handled := True ;
            Exit;
            End;
        if (Msg.wParam = VK_F4 ) And lEscape then
            Begin
            lEscape := False;
            Handled := True ;
            ShowMessage('Se ha pulsado la combinación correcta');
            End;
      END;



end;

end.


Código:
object Form1: TForm1
  Left = 359
  Top = 278
  Width = 299
  Height = 190
  Caption = 'Demostración de pulsacion de teclas'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object ApplicationEvents1: TApplicationEvents
    OnMessage = ApplicationEvents1Message
    Left = 96
    Top = 48
  end
end
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 14-08-2007
Avatar de Lonidas
Lonidas Lonidas is offline
Miembro
 
Registrado: abr 2006
Posts: 35
Poder: 0
Lonidas Va por buen camino
Thumbs up

interesante aporte Ardilla lo voy a probar
Responder Con Cita
  #6  
Antiguo 14-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Date cuenta, que el procedimiento en sí, no comprueba que ambas estén pulsadas, sino que comprueba que la secuencia sea precisamente esa.

Se puede optimizar un poco para comprobar que a sido correcta la secuencia. Es decir, tal cual está, se puede pulsar ESC, A y F4 y saltaría, por lo que cambiando el estado de la variable en el caso de que no sea esa la secuencia, se vuelve a "iniciar" la variable.

Código Delphi [-]
      if  (Msg.Message = WM_KEYDOWN) then
      BEGIN
        if Msg.wParam = VK_ESCAPE then
            Begin
            lEscape := True;
            Handled := True ;
            Exit;
            End;
        if (Msg.wParam = VK_F4 ) And lEscape then
            Begin
            lEscape := False;
            Handled := True ;
            ShowMessage('Se ha pulsado la combinación correcta');
            End;
            lEscape := False;
      END;


También se podría comprobar la secuencia distinta por ejemplo F4-ESC, solamente hay que jugar con las variables........
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
capturar error gulder Conexión con bases de datos 1 09-06-2006 18:51:20
Capturar error silviodp Conexión con bases de datos 3 01-07-2005 11:59:36
Capturar Tecla Sick boy OOP 0 25-09-2004 11:27:59
Capturar pantalla pablo Varios 1 07-09-2004 20:15:10
Capturar Sonido cancerbero Varios 0 14-08-2004 01:15:47


La franja horaria es GMT +2. Ahora son las 18:21:46.


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