Ver Mensaje Individual
  #19  
Antiguo 23-07-2017
Juampi Juampi is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 14
Reputación: 0
Juampi Va por buen camino
Error: Identifier not found "VK_MULTIPLY"

Gracias, no encontré la unidad Winapi.windows (asumo que es un archivo) ni windows.pas como leí un comentario tuyo en otro hilo que también podría aparecer, pero si encontré el archivo LCLType.pp.

En dicho archivo me figura lo siguiente:

VK_NUMPAD0 = 96; // $60
VK_NUMPAD1 = 97;
VK_NUMPAD2 = 98;
VK_NUMPAD3 = 99;
VK_NUMPAD4 = 100;
VK_NUMPAD5 = 101;
VK_NUMPAD6 = 102;
VK_NUMPAD7 = 103;
VK_NUMPAD8 = 104;
VK_NUMPAD9 = 105;
VK_MULTIPLY = 106; // VK_MULTIPLY up to VK_DIVIDE are usually in the numeric keypad in PC keyboards
VK_ADD = 107;
VK_SEPARATOR = 108;
VK_SUBTRACT = 109;
VK_DECIMAL = 110;
VK_DIVIDE = 111;

Y por lo que probé en el evento KeyDown funciona con el valor numérico, no con el texto. Si pongo VK_MULTIPLY (por ejemplo) al compilar me aparece el error del asunto (Error: Identifier not found "VK_MULTIPLY"), pero usando el valor numérico (106 en el caso de MULTIPLY) si funciona.

Por otro lado con el evento KeyPress no me funciona de ninguna de las dos maneras, ni con valor numérico ni con el texto. Si pongo números el error pasa a ser:

Error: Incompatible types: got "Char" expected "Int64"

Pero bueno, uso el evento KeyDown únicamente y listo, yo había hecho una especie de división entre botones que utilicen keydown y botones que utilicen keypress porque si tu abres la calculadora de Windows y dejas un número apretado se irá escribiendo varias veces, pero al mismo tiempo un signo de operación no tiene que repetirse, se aprieta una vez sola hasta que haya otro número ingresado, por eso quise hacer de la siguiente manera:

Cita:
{___________________________________________________________________________________________________ _________________________________________________________

--- EVENTO KEYDOWN ---
____________________________________________________________________________________________________ _________________________________________________________}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

{BOTÓN 0}

if key = 96 then
begin
btn0.Click;
end;

{BOTÓN 1}

if key = 97 then
begin
btn1.Click;
end;

{BOTÓN 2}

if key = 98 then
begin
btn2.Click;
end;

{BOTÓN 3}

if key = 99 then
begin
btn3.Click;
end;

{BOTÓN 4}

if key = 100 then
begin
btn4.Click;
end;

{BOTÓN 5}

if key = 101 then
begin
btn5.Click;
end;

{BOTÓN 6}

if key = 102 then
begin
btn6.Click;
end;

{BOTÓN 7}

if key = 103 then
begin
btn7.Click;
end;

{BOTÓN 8}

if key = 104 then
begin
btn8.Click;
end;

{BOTÓN 9}

if key = 105 then
begin
btn9.Click;
end;

{BOTÓN <}

if key = 08 then
begin
btnBS.Click;
end;

end;

{___________________________________________________________________________________________________ _________________________________________________________

--- EVENTO KEYPRESS ---
____________________________________________________________________________________________________ _________________________________________________________}

procedure TForm1.FormKeyPress(Sender: TObject; var Key: char);
begin

{VK_MULTIPLY}

if key = 106 then
begin
btnMultiplicacion.Click;
end;

{VK_ADD}

if key = 107 then
begin
btnSuma.Click;
end;

{VK_SUBTRACT}

if key = 109 then
begin
btnResta.Click;
end;

{VK_DECIMAL}

if key = 110 then
begin
btnComa.Click;
end;

{VK_DIVIDE}

if key = 111 then
begin
btnDivision.Click;
end;

end;
Como puedes ver ahí tengo bajo el evento keydown los números y el botón de borrar (<) y bajo el evento keypress los signos de operación (+, -, X, /, punto, etc). Pero bueno, si abres la calculadora de Windows y dejas presionado una tecla de operación el botón responde al evento keypress, simplemente no escribe nada, pero responde. Así que utilizo keydown para todos y controlo por código que no se escriba si ya está escrito y esperando otro número y no otra operación. De hecho con el evento keypress si bien cambia el comportamiento del botón también tendría que controlar que no se ingresase más de una vez, así que por ese lado no cambia.

Volviendo al tema de usar el identificador VK o el número, ¿sabes de qué manera podría usar el texto en vez del número?, porque coincido contigo que visualmente es mejor a la hora de leer. Por el momento como puedes ver más arriba le agregué un comentario.

Una vez más, gracias por tu ayuda.
Responder Con Cita