Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Cerrar componente RXCalculator, al presionar enter.

Hola que tal querido foro, yo de nuevo, estoy renegando con las librerías RX, que están muy documentadas (hace falta aclarar que es sarcasmo).
Lo que quiero hacer es:
1 - Poner un edit que al apretar enter se abra la calculadora [ya está]
2 - Una vez abierta la calculadra que al presionar enter por 2 vez se cierre la misma y me ponga el valor en el edit.
Eh capturado el evento on key de la calculadora eh hice lo necesario para saber cuando presiona enter por segunda vez. Pero no logro hacer que con el uso del teclado la calculadora se cierre, se me ocurrio que podria mandar por teclado la combinacion alt + F4, para obligar a cerrar la calculadora, pero no se como.
Escucho sugerencia.

Nota: Si alguien lo tiene resuelto con el Rxcalcedit, me da lo mismo.
Responder Con Cita
  #2  
Antiguo 27-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
No he tenido la oportunidad de usar ese componente

pero me imagino que debe tener algun evento donde se controle las teclas presionadas tipo (onKeyPress, OnKeyUp, OnKeyDown, etc)

se me ocurre que en ese evento puedas indicarle que se cierre y el resultado almacenarlo en alguna variable Publica para que retorne el valor
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 28-05-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Si el componente tiene el evento onkey

En el evento onkey capto cuando presiono enter por segunda vez.

Código Delphi [-]
procedure TForm1.RxCalculator1CalcKey(Sender: TObject; var Key: Char);
begin
// cantenter = 0 en el oncreate del form.
if key = #13 then
   begin
      if cantenter = 2 then
         begin
            //cerrar la calcu
            cantenter:= 0;
         end
      else inc(cantenter);
   end;
end;

Bueno, eso.
Nota: Disculpa que halla demorado en responder pero ayer fue mi cumple y rendi la ultima materia de mi carrera.

Última edición por martinartaza fecha: 28-05-2011 a las 14:05:25. Razón: puso mal el código.
Responder Con Cita
  #4  
Antiguo 30-05-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
Talking Ya casi, falta destrabar la tecla Alt.

Bueno ya está andando pero me queda la aplicación, en realidad todo el windows como si estuviera con la tecla alt presionada, pero uno presiona la tecla alt (y la suelta y ya queda todo bien).

Le muestro el código de ejemplo.

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RxCalc, StdCtrls, Mask, ToolEdit, CurrEdit;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    RxCalculator1: TRxCalculator;
    procedure RxCalculator1CalcKey(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    CANTENTER: INTEGER;
    valor: Currency;
    banvalor: boolean;
  end;

var
  Form1: TForm1;

implementation

uses ComObj;

{$R *.dfm}

procedure TForm1.RxCalculator1CalcKey(Sender: TObject; var Key: Char);
begin
// Cuando se presiona enter parece ser que interna mente lo transforma en un =  que es #61
if key = #61 then
   begin
   IF CANTENTER = 1 THEN
      BEGIN
        // guardo el valor en la bariable valor
         valor :=  RxCalculator1.CalcDisplay;
         // cierro la calculadora con la tecla ALT + F4
         keybd_event(vk_menu,0,0,0);
         keybd_event(VK_F4,0,0,0);
         CANTENTER:= 0;
      end
   else  inc(CANTENTER);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Inicializo la cantidad de enter a 0
CANTENTER:= 0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// detecto si se presiona un * (con eso abro la calculadora)
if key = #42 then
   begin
   banvalor:= True;
   RxCalculator1.Execute;
   // no uso if RxCalculator1.Execute (debido a que se la
   // cerrara con alt + F4
   end;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   // cuando se levanta la tecla, se borra el * y
   // se pone el valor y luego seteo la bandera.
   Edit1.Clear;
   Edit1.Text:= floattostr(valor);
   banvalor:= False;
end;

end.

Alguien me podría ayudar a desbloquear la tecla ALT.

Nota: este código no lo hubiera podido lograr sin la ayuda de ecfisa, muchas gracias.

Última edición por martinartaza fecha: 30-05-2011 a las 21:17:04. Razón: comente un poquito más el código.
Responder Con Cita
  #5  
Antiguo 30-05-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 14
martinartaza Va por buen camino
corregido

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RxCalc, StdCtrls, Mask, ToolEdit, CurrEdit;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    RxCalculator1: TRxCalculator;
    procedure RxCalculator1CalcKey(Sender: TObject; var Key: Char);
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    CANTENTER: INTEGER;
    valor: Currency;
    banvalor: boolean;
  end;

var
  Form1: TForm1;

implementation

uses ComObj;

{$R *.dfm}

procedure TForm1.RxCalculator1CalcKey(Sender: TObject; var Key: Char);
begin
if key = #61 then
   begin
   IF CANTENTER = 1 THEN
      BEGIN
         valor :=  RxCalculator1.CalcDisplay;
         keybd_event(vk_menu,0,0,0);
         keybd_event(VK_F4,0,0,0);
         CANTENTER:= 0;
      end
   else  inc(CANTENTER);
   end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//Inicializo la cantidad de enter a 0
CANTENTER:= 0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// detecto si se presiona un * (con eso abro la calculadora)
if key = #42 then
   begin
   banvalor:= True;
   RxCalculator1.Execute;
   // no uso if RxCalculator1.Execute (debido a que se la
   // cerrara con alt + F4
   banvalor:= False;
// con la siguiente linea levanto la tecla alt.
   keybd_event(vk_menu,0,keyeventf_keyup, 0);
   end;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   // cuando se levanta la tecla, se borra el * y
   // se pone el valor y luego seteo la bandera.
if key = vk_menu then
   begin
   Edit1.Clear;
   Edit1.Text:= floattostr(valor);
   end;
end;

end.
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
Saltar de campo sin presionar Enter oscarac OOP 3 20-05-2011 15:44:30
Como activar el componente RxCalculator sysmar OOP 2 21-01-2009 07:56:10
Cambiar propiedad de componente del formulario padre al cerrar el formulario hijo jzginez OOP 5 22-06-2007 21:40:51
Evitar cerrar un formulario desde un componente genius Varios 1 23-11-2006 15:55:42
Cerrar componente con ventana modal elcigarra OOP 7 12-10-2005 13:17:53


La franja horaria es GMT +2. Ahora son las 06:49:48.


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