Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 23-07-2017
Juampi Juampi is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 14
Poder: 0
Juampi Va por buen camino
Si si, Lazarus, jeje.

Cita:
Empezado por AgustinOrtu Ver Mensaje
No me percate de que estabamos hablando de Lazarus
En un momento me imaginé que venía por ese lado el tema.

Cita:
Empezado por AgustinOrtu Ver Mensaje

Acabo de hacer esta sencilla prueba y me funciona bien:

Código Delphi [-]
uses
  LCLType;

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

  if Key = VK_MULTIPLY then
     ShowMessage('VK_MULTIPLY');
end;

Obvio que es necesario tener KeyPreview a True
¿Dónde iría el "uses LCLType;"?, porque lo puse inmediatamente antes del procedure tal cual lo tienes ahí y cuando compilo me pone:

"Fatal: Syntax error, "BEGIN" expected but "USES" found"

Actualmente el código está así:

Código Delphi [-]
{___________________________________________________________________________________________________  _________________________________________________________

--- EVENTO KEYDOWN ---
____________________________________________________________________________________________________  _________________________________________________________}

uses LCLType;

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;

  {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;

  {VK_RETURN}

  if key = 13 then
   begin
     btnIgual.Click;
   end;

end;

Gracias.
Responder Con Cita
  #22  
Antiguo 23-07-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Te dejo la unidad completa:

Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;

type

  { TForm1 }

  TForm1 = class(TForm)
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

uses
  LCLType;

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

  if Key = VK_MULTIPLY then
     ShowMessage('VK_MULTIPLY');
end;

end.
Responder Con Cita
  #23  
Antiguo 24-07-2017
Juampi Juampi is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 14
Poder: 0
Juampi Va por buen camino
Un poco más cerca de la de Windows, jeje

Muchas gracias, Agustín, me funcionó.

Cada vez me restan menos retoques para hacer antes de incursionar en "arreglos dinámicos" (por ahora el número de operaciones permitidas es acotado), y uno de ellos es borrar el cursor, ¿hay forma de quitar o por lo menos dejar invisible el cursor del TEdit?. La calculadora de Windows lógicamente no tiene un cursor, y si bien tengo el TEdit como ReadOnly y AutoSelect en false y por lo tanto el cursor no afecta en el funcionamiento de como se ingresan y como se borran los números lo cierto es que me gustaría que ni siquiera se vea, es como que molesta que esté a la vista ahí tintineando, je.

Si estoy bien rumbeado en lo que anduve googleando es algo de HideCaret, pero no me doy cuenta como hacerlo funcionar (si es que es eso).

Así que se me venga a la mente me falta:
  1. Lo dicho de ocultar el cursor, no sé cómo se hace.
  2. Poder cambiar el signo de la operación si todavía no presioné otro número o el botón =. (En la de Windows si yo hago 5 + 5 + y me doy cuenta que el último era menos en vez de más, si presiono - se sobreescribe el último + con el - y queda 5 + 5 -...).
  3. Que vaya operando y actualizando el resultado a medida que voy presionando los signos y no recién cuando aprieto el botón =. Actualmente voy mostrando el log pero no veo resultados de operaciones hasta no usar el =.
  4. Programar algunos botones más como el de porcentaje o el de raíz cuadrada que por ahora ni los toqué.
  5. Y por último lo mencionado desde mi primer comentario en este hilo de poder hacer "infinitas" operaciones.

De estos cinco puntos mencionados los dos, tres y cuatro no deberían ser complicados, mañana voy a ver si los resuelvo. Pero el primero no sé cómo se hace, y el último por ahora lo pateo para adelante. Cuando estén resueltos los cuatro primeros me meto de lleno en el quinto.

Dejo link al .exe por si quieren ver los avances:

drive.google.com/open?id=0B2s4ogym-XemNHp1WWhsMEdYQ2c

Saludos

P.D.: Me olvidaba, tengo otro detalle, si solo uso teclado al utilizar la calculadora no pasa nada, si solo uso el mouse tampoco, pero si aprieto algo con el mouse queda el foco en eso que apreté y luego al usar la tecla Intro me acciona el botón igual pero también me acciona ese último botón clickeado que quedó con el foco puesto. Supongo se soluciona quitando el foco del botón luego de accionarlo mediante click, pero no sé cómo se hace, así que mínimo son seis detalles restantes, no cinco, je.

Última edición por Juampi fecha: 24-07-2017 a las 05:02:09.
Responder Con Cita
  #24  
Antiguo 24-07-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Juampi.

Para ocultar el cursor del mouse en el Edit podes usar la función HideCaret.

Un ejemplo:
Código Delphi [-]
...

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    ...
    procedure FormCreate(Sender: TObject);
    ...
    procedure FormDestroy(Sender: TObject);
  private
    procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
  
  ...
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := ApplicationEventsIdle;
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Application.OnIdle := nil;
end;

procedure TForm1.ApplicationEventsIdle(Sender: TObject; var Done: Boolean);
begin
  HideCaret(Edit1.Handle);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #25  
Antiguo 07-08-2017
Juampi Juampi is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 14
Poder: 0
Juampi Va por buen camino
Error: Identifier not found "HideCaret"

Gracias, ecfisa, pero no me estoy dando cuenta como se utiliza HideCaret.

Cuando lo intento utilizar me pone el error del asunto, como que para Lazarus eso no existe. Googleando sobre HideCaret me encontré con la siguiente línea "Source position: winapih.inc line 169", entonces agregué winapih.inc en el uses (actualmente tengo LCLType y strutils) y ahí el error que me da es "Fatal: no puedo encontrar winapihutilizado por calc1del Inspector de Proyecto".

Estoy un poco perdido en este momento en cuanto a esconder el cursor del TEdit.

Gracias otra vez.
Responder Con Cita
  #26  
Antiguo 07-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Juampi.

Disculpa, no reparé que se trataba de Lazarus .

Deberás incluir la unidad "Windows" y también agregar el operador "@" en la siguiente línea:
Código Delphi [-]
...
uses Windows; // <- |

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := @ApplicationEventsIdle;  // <- |
end;

Se me ocurren dos posibilidades mas para usar en Windows:
Código Delphi [-]
...
implementation

uses Windows;   

procedure TForm1.Edit1Enter(Sender: TObject);
begin
  HideCaret(Edit1.Handle);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: char);
begin
  HideCaret(Edit1.Handle);
end;    
...

Código Delphi [-]
...
implementation

uses Windows;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 100;
  Timer1.Enabled  := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  HideCaret(Edit1.Handle);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #27  
Antiguo 08-08-2017
Juampi Juampi is offline
Miembro
NULL
 
Registrado: may 2017
Posts: 14
Poder: 0
Juampi Va por buen camino
Gracias

Hola ecfisa.

El primero me dio error, este era el código:

Código Delphi [-]
implementation

uses LCLType, strutils, windows;

{$R *.lfm}

{ TForm1 }

{___________________________________________________________________________________________________  _________________________________________________________

--- FORM ON CREATE ---
____________________________________________________________________________________________________  _________________________________________________________}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := @ApplicationEventsIdle;
  ult := 0;
  sobreescriboNro := true;
  sobreescriboOp := false;
  sobreescriboOp2 := false;
  ok := true;
  coma := false;
end;

Y me daba el error: Error: Identifier not found "ApplicationEventsIdle"

Luego fui al inspector de objetos, pestaña eventos e ingresé en el "OnEnter" y usé el segundo código que me pasaste:

Código Delphi [-]
{___________________________________________________________________________________________________  _________________________________________________________

--- DISPLAY ---
____________________________________________________________________________________________________  _________________________________________________________}

procedure TForm1.displayEnter(Sender: TObject);
begin
  HideCaret(display.Handle); {ESCONDO EL CURSOR}
end;

Y ese si me funcionó, muchas gracias.

Actualizo lista de lo que recuerdo que me queda de este mini proyecto:
  1. Que vaya operando y actualizando el resultado a medida que voy presionando los signos y no recién cuando aprieto el botón =.
  2. Programar algunos botones más como el de porcentaje o el de raíz cuadrada.
  3. Poder hacer "infinitas" operaciones.
  4. Corregir el asunto de que el foco queda en el último botón clickeado con el mouse y si mezclo uso de teclado con mouse el Enter me ejecuta dos acciones, la que corresponde que es el botón = y a continuación el último botón presionado.
  5. Ir poniendo punto para separar los miles.

Muchas gracias.
Responder Con Cita
  #28  
Antiguo 08-08-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por Juampi Ver Mensaje
Hola ecfisa.

El primero me dio error, este era el código:
...
Y me daba el error: Error: Identifier not found "ApplicationEventsIdle"
Ese error indica que te faltó declarar el procedimiento como método del form:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
  ...
  private
    { private declarations }
     procedure ApplicationEventsIdle(Sender: TObject; var Done: Boolean);  // <-
  public
    { public declarations }
  end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Opinión sobre la estabilidad actual de Lazarus/Free Pascal Toni Lazarus, FreePascal, Kylix, etc. 34 06-02-2016 02:04:45
Soy desarrollador de Delphi ¿Que necesito saber para usar Lazarus? Godzuki Linux 7 24-02-2012 00:54:34
Lazarus, Nemesis Pascal rmendoza83 Varios 1 08-01-2009 18:41:08
Indy soporta Free Pascal/Lazarus Delfino Noticias 6 15-01-2006 11:55:55
Free Pascal y Lazarus Magician^ Noticias 7 31-03-2004 20:12:04


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


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