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 05-06-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Unhappy Códigos escape y virtual Keys Codes

Hola amigos.

Estoy intentando capturar si se pulsa la tecla TAB del teclado, pero no lo logro aún habiéndome estudiado la ayuda y consultando foros. Incluyendo este:

http://www.clubdelphi.com/foros/show...codigos+escape


Normalmente con la tecla Intro, lo he hecho del siguiente modo:

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
      if(Key=#13) THEN
         SHOWMESSAGE('INTRO')
      ELSE
         SHOWMESSAGE('???')
end;

... y me funciona de maravilla, pero si intento lo mismo para la tecla TAb, no me funciona.

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
      if(Key=#9) THEN
         SHOWMESSAGE('TAB')
      ELSE
         SHOWMESSAGE('???')
end;

También he probado para ver cual es el texto que me saldría, por si acaso no devolvía exactamente ese texto, pero me imprime blanco con el siguiente código.

Código Delphi [-]
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if(Key=VK_TAB) THEN
           SHOWMESSAGE(WORDTOSTR(KEY))
        ELSE
           SHOWMESSAGE(WORDTOSTR(KEY))
end;

¿Alguien me podría decir como trabajar con las Virtual Keys Codes?. El fin es cuando pulse una determinada tecla de este tipo como (Tab, Esc, intro) realizar el evento que desee. Si sirve para algo... trabajo con D6 y WXP.

Gracias a todos.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #2  
Antiguo 05-06-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
El problema es que windows no llega a enviar la tecla TAB al edit, ya se encarga el de procesarla. Para prevenir esto, windows primero manda el mensaje WM_GETDLGCODE al control preguntando entre otras cosas si quiere que sea windows el que se encargue de la tecla o prefiere ser el.

Pues bien, seguramente habra alguna forma mas sencilla de hacer esto, y aqui hay expertos suficientes para corregirme , pero esta solucion me parece interesante. Vamos a hacer que todos los edit del formulario acepten la tecla TAB.

Código Delphi [-]
type
  // Aqui esta la clave, cambiamos la forma de procesar este mensaje
  // Ojo, tiene que estar antes de la definicion de TForm1
  TEdit = class(StdCtrls.TEdit)
  private
    procedure WMGETDLGCODE(var Msg: TMessage); message WM_GETDLGCODE;
  end;

  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Aqui procesamos el mensaje
procedure TEdit.WMGETDLGCODE(var Msg: TMessage);
begin
  inherited;
  Msg.Result:= Msg.Result or DLGC_WANTTAB;
end;

// Esto es solo una prueba para comprobar que funciona bien
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_TAB then ShowMessage('VK_TAB');
end;

Última edición por seoane fecha: 05-06-2006 a las 13:31:07.
Responder Con Cita
  #3  
Antiguo 05-06-2006
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Talking

Muchas gracias.
Funciona de maravilla.
Vamos un paso más allá.

Si ahora lo quiero hacer sobre las casillas de un TDBGrid???

He comprobado que.... es así :

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;

type
  TNSDBdbgrid = class(tdbgrid)
  private
    procedure WMGETDLGCODE(var Msg: TMessage); message WM_GETDLGCODE;
  end;



  TForm1 = class(TForm)
    DBGrid1: TDBGrid;
    DataSource1: TDataSource;
    Table1: TTable;
    Table1COD_ART: TStringField;
    Table1DES_ART: TStringField;
    procedure FormActivate(Sender: TObject);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TNSDBdbgrid.WMGETDLGCODE(var Msg: TMessage);
begin
  inherited;
  Msg.Result:= Msg.Result or DLGC_WANTTAB;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
    Table1.Open;
end;

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if Key = VK_TAB then ShowMessage('VK_TAB');
end;

end.

Gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 05-06-2006 a las 16:58:31.
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
Impresión Codigos Escape Zebra LP 2844 comba Impresión 2 08-02-2006 22:46:47
Codigos Escape Impresora Sansumg serhasae Varios 3 05-09-2005 10:40:17
Codigos de escape con Zreport Sick boy Impresión 0 22-07-2005 12:27:13
Códigos de Escape Laser CANON LBP-2000 jmdd Impresión 1 11-12-2003 00:33:52
Codigos de escape jsanchez Impresión 1 17-05-2003 13:54:00


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


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