Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   teclado numerico virtual (https://www.clubdelphi.com/foros/showthread.php?t=70666)

novato_erick 04-11-2010 02:47:42

teclado numerico virtual
 
Hola chicos:

Estoy realizando un formulario que simule una caja registradora necesito saber precisamente como podria hacer que un Button al apretarlo en una pantalla tactil o con el mouse tenga el mismo valor que el teclado numerico.


Saludos;

Ferrari 04-11-2010 03:22:08

Version Delphi
 
Con que version de delphi estas trabajando...pork en delphi 2010 ya cuentas con un teclado virtual...salu2
:cool:

Enan0 04-11-2010 09:42:46

No Seria tan complicado Lo que tenes que hacer.
Pones un TEXT.Box
en el evento OnKeyPress

Capturas ese valor y te fijas el Char que envia (podes convertirlo a EXA y tenes el Valor de la tecla).

Luego en cada Boton de tu teclado Virutal, asignas el valor que queres ante el evento on Click

saludos

ecfisa 04-11-2010 10:43:21

Hola novato_erik.

En realidad, el TButton no va poder tomar el valor de la tecla pulsada. Vas a tener que utilizar una variable
de tipo Word, que almacene el valor de la tecla que representa el TButton que ha sido pulsado.

Para asignar el valor te puede orientar la ayuda de Delphi. Busca : Virtual Key codes, son mnemónicos que
representan códigos generados por el teclado extendido. ( como es el caso de las teclas del del NumPad )
Normalmente se evalúan en el evento OnKeyDown, ya que este pasa por referencia la variable Key como una palabra.

Saludos. :)

novato_erick 05-11-2010 20:14:43

Teclado Virtual numerico
 
En el evento OnKeyDown es en el formulario en en el Button?

Cree ya la variable NumTeclado : Word; {Variable con el tipo word}

tambien le dije que esa variable almacenara el valor de VK_NUMPAD1 que pertenece al Virtual key Codes.

Lo e intentado en el Button con el evento OnKeyDown y nada...

Saludos;

ecfisa 05-11-2010 20:50:53

Hola.

No no, en el TButton, tendrías que hacer algo como:
Código Delphi [-]
procedure TForm1.btNumPad0Click(Sender: TObject);
begin
  NumTeclado:= VK_NUMPAD0;
end;

Con respecto a la captura de la tecla quizá te convenga poner a True la propiedad KeyPreview del Form y usar su evento OnKeyDown:
Código Delphi [-]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
   VK_NUMPAD0: NumTeclado:= VK_NUMPAD0;
   VK_NUMPAD1: NumTeclado:= VK_NUMPAD1;
   ...
   ...
  end;
end;

Saludos. :)

roman 05-11-2010 21:03:13

Yo lo que haría es esto:

Pongo un Edit y diez botones en el formulario. A cada botón le asigno a su propiedad Tag, el numero que le corresponda (0 al botón 0,1 al botón 1, 2 al botón 2, etc.). Luego asigno a todos los botones un mismo evento OnClick así:

Código Delphi [-]
procedure TForm1.ButtonClick(Sender: TObject);
begin
  Edit1.Text := Edit1.Text + Chr(Ord('0') + (Sender as TControl).Tag);
end;

// Saludos

novato_erick 05-11-2010 21:19:04

Teclado Virtual numerico
 
Gracias por tu instantanea respuesta me ayudo mucho estaba utilizando un if (cosa de novato no) olvidandome el Case ajajajajaj... bueno ya realize el codigo sin embargo al ejectutar no escribe en el Edit el numero deseado... tienes alguna idea el porque?

Gracias...

ecfisa 05-11-2010 21:29:59

Hola.

No había captado la idea de lo que buscabas hacer con los botones...

Revisá el mensaje que te puso roman más arriba, ese código asignado a cada uno de los botones hace lo que buscas.

Saludos. :)

novato_erick 05-11-2010 21:30:59

Teclado Virtual numerico
 
Si pero ese procedimiento solo seria para un Edit Especifico, es posible que pueda funcionar en cualquier componente de escritura?.


Novato_erick

ecfisa 05-11-2010 21:39:24

Hola erik.

No entiendo bién que es lo que deseas hacer...

Lo normál en una calculadora es que se simule un display, si decidieras usar un TPanel en lugar del TEdit, usando el código de roman, sólo deberías cambiar:
Código Delphi [-]
procedure TForm1.ButtonClick(Sender: TObject);
begin
  Panel1.Caption := Panel.Caption + Chr(Ord('0') + (Sender as TControl).Tag);
end;

Saludos. :)

novato_erick 05-11-2010 21:42:44

Teclado Virtual numerico
 
Ok en realidad no es calculadora
Es en un formulario de caja por ejemplo (donde se usa un scaner de codigo de barra), luego el siguiente edit es donde pongo las cantidades. y en caso de utilizar el formulario de pagos?

Thank u...

ecfisa 05-11-2010 21:59:44

Cita:

Empezado por novato_erick (Mensaje 381479)
Gracias por tu instantanea respuesta me ayudo mucho estaba utilizando un if (cosa de novato no) olvidandome el Case ajajajajaj... bueno ya realize el codigo sin embargo al ejectutar no escribe en el Edit el numero deseado... tienes alguna idea el porque?

Gracias...

Volvemos atrás entonces... Como te dije antes son caracteres extendidos y por lo tanto no se visualizan como los comunes. Una vez evaluados tendrías que pasarlos a una variable.

Código Delphi [-]
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_NUMPAD0: Car:= '0';
    VK_NUMPAD1: Car:= '1';
    ...
  end;
end;

Espero que te haya entendido bién ahora... :rolleyes:


Saludos. :)

novato_erick 05-11-2010 22:17:10

Dejame ver si te entiendo:
dices mi variable el cual almacena cada caracter es NumTeclado que es de tipo word;

este es mi codigo
Código Delphi [-]
 procedure Tfrmfactura.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
   VK_NUMPAD0: NumTeclado:= '0';
   VK_NUMPAD1: NumTeclado:= '1';
   VK_NUMPAD2: NumTeclado:= '2';
   VK_NUMPAD3: NumTeclado:= '3';
   VK_NUMPAD4: NumTeclado:= '4';
   VK_NUMPAD5: NumTeclado:= '5';
   VK_NUMPAD6: NumTeclado:= '6';
   VK_NUMPAD7: NumTeclado:= '7';
   VK_NUMPAD8: NumTeclado:= '8';
   VK_NUMPAD9: NumTeclado:= '9';
   end;
end;

y en el Button1 y asi sucesivamente para cada button2, etc.

Código Delphi [-]
procedure Tfrmfactura.Button10Click(Sender: TObject);
begin
 NumTeclado:= VK_NUMPAD0;
end;

me e equivocado en algo porque el compilador me desconce el tipo word y chard.

Gracias por tu ayuda

ecfisa 05-11-2010 23:06:39

Hola erik.

No, la variable NumTeclado no te va a servir. Tendrías que crearte otra de tipo Char para almacenar el caracter a visualizar.
En realidad no sé que uso le dás a NumTeclado. No digo que esté demás, por que podés usarla con otro fin que desconozco...

Saludos. :)

novato_erick 06-11-2010 00:24:21

Tengo entendido que necesito almacenar los caracteres en una variable para eso utilizo NumTeclado ahi guarda todos los valores de tipo word sin embargo tambien creo otro con valor de tipo char y aun asi me manda el error.

[DCC Error] factura.pas(231): E2010 Incompatible types: 'Word' and 'Char'

Gracias...

ecfisa 06-11-2010 00:37:32

Hola Erick.

Por el tipo de error me atrevo a decir que estas intentando asignar una variable de tipo Word a una de tipo Char.

¿ Podrías poner la parte del código donde asignas el valor de la tecla presionada a la variable tipo Char ?

Seguro que ahí nos damos cuenta lo que sucede.

Saludos. :)


La franja horaria es GMT +2. Ahora son las 16:13:08.

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