Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Código ascii de la tecla + (https://www.clubdelphi.com/foros/showthread.php?t=78115)

ElDioni 21-03-2012 11:59:51

Código ascii de la tecla +
 
Hola,

no se si es que yo tenía un concepto equivocado o estoy haciendo algo mal, pero me he encontrado con el siguiente problema, cuando yo tengo que saber si se ha pulsado cierta tecla voy a mirar mi tabla ascii, veo el valor decimal que le corresponde a la tecla que quiero controlar y entonces me voy al keydown y compruebo.

Código Delphi [-]
procedure TFrmMenuArt.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
tecla:Char;
begin
if key=13 then pulsada:=13;//el intro
if key=27 then pulsada:=27;//escape
if key=8 then pulsada:=8;//backspace.
end;
Hoy quería comprobar si se ha pulsado la tecla '+', en mi tabla ascii me dice que el valor es 43, pero el código no me respondía bien, entonces voy a comprobar porque no funciona y me encuentro con que si pulso el '+' del bloque numérico su valor es 107, que sería la 'k', y si pulso el '+' que hay al lado del intro me dice que el valor es 187 que correspondería con '╗', también me encuentro que las letras da igual que las pulse en mayúscula que en minúscula que me devuelve siempre el valor de mayúscula, ¿es que la comprobación no se hace como lo estoy haciendo yo?, gracias de antemano.

Saludos.

MartinS 21-03-2012 13:05:34

Hola: y si pones asi en el evento onkeypress te sirve??

Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if Key = #43 then
      ShowMessage('Signo Mas') else
      ShowMessage('Otra Tecla');
end;

ElDioni 21-03-2012 19:01:12

Hola,

el código lo tengo puesto en el evento onkeydown para saber si la tecla que estoy controlando se mantiene pulsada cuando hago otras cosas en el formulario, en el onkeyup pongo la variable pulsada:=0.

Saludos.

ElKurgan 22-03-2012 07:22:17

¿Que versión de Delphi estás utilizando? Porque con el soporte unicode de las nuevas versiones, creo que dá más de un problema con los Ascii, Ansi y widestring

Un saludo

ecfisa 22-03-2012 08:27:00

Hola ElDioni.

Cada tecla tiene asociado dos valores, uno es el código interno de la tecla (código de rastreo) y el otro el código ASCII del caracter que tiene asignado. Por ejemplo, tanto la letra 'A' como la letra 'a' tienen un valor scan code igual a 65, sin embargo, el código ASCII de la letra 'A' es 65 y el de la letra 'a' es 97.

El parámetro Key en los eventos OnKeyDown y OnKeyUp contiene el valor del código de rastreo del teclado, para obtener el código ASCII de la tecla presionada hay que evaluar el valor del parámetro Key en el evento OnKeyPress.

El órden en que se disparan los eventos anteriores es OnKeyDown, OnKeyPress y OnKeyUp.

Estos son los códigos de rastreo de un teclado estándard:


Saludos.

ElDioni 22-03-2012 09:05:09

Hola, gracias por contestar,

mi versión de delphi es la 2005.

he estado buscando con respecto a lo que me comentas ecfisa pero hay una cosa que no acabo de entender o no se de donde sale, como hemos comentado la 'A' y la 'a' aparecen como 65 en el evento OnKeyDown, pero si voy al dibujo que me has adjuntado no veo donde aparece ese 65 o de donde lo tengo que sacar, me lo podrías aclarar.

Saludos.

ecfisa 22-03-2012 17:38:49

Hola ElDioni.

Los valores del scan code en la imágen estan en hexadecimal: (41)h = 65d.

Saludos.

maeyanes 22-03-2012 21:37:05

Hola...

Puedes usar la constante VK_ADD para detectar si se pulsó la tecla +.

Esta y otras constantes las encuentras en la unidad Windows.pas. También en la ayuda de Delphi, bajo el tema Virtual Key Codes podrás encontrar una lista de todas estas constantes.


Saludos...

ecfisa 23-03-2012 02:07:03

Hola ElDioni.

Aquí conseguí una tabla completa de scan codes

Si quisieras obtener el número de tecla (Hex Scan Code) podrías usar la función MapVirtualKey.

Un ejemplo:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
  private
     procedure WMKeyDown(var Msg: TWMKeyDown); message WM_KEYDOWN;
  public
  end;

var
  Form1: TForm1;

implementation 

procedure TForm1.WMKeyDown(var Msg: TWMKeyDown);
const
   MAPVK_VK_TO_VSC = 0;
begin
  ShowMessage('Hex scan code: '+ IntToHex(MapVirtualKey(Msg.CharCode, MAPVK_VK_TO_VSC),2));
end;
...
Pero no se puede obtener código ASCII de forma directa a partir del valor recibido.

Saludos.

Caral 23-03-2012 02:44:45

Hola
Aqui esta este programa que genera lo de las techas entre otras cosas.
Saludos

ElDioni 23-03-2012 09:50:50

Hola,

lo primero muchas gracias a todos por sus aportes, voy a hacer unas pruebas y ver como me queda pero con la información que me dieron tengo más que suficiente, de nuevo gracias.

Saludos.


La franja horaria es GMT +2. Ahora son las 06:29:04.

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