Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-05-2007
sebaguillen sebaguillen is offline
Registrado
 
Registrado: may 2007
Posts: 9
Poder: 0
sebaguillen Va por buen camino
Calculadora

Hola gente como va? bueno les cuento que estoy haciendo una calculadora en delphi, esta funciona bien para numeros enteros, pero tengo un problema para que me realice las operaciones con reales... estoy usando la funcion float para transformarlo de string a extended pero cuando lo quiero ejecutar me da un error y no me deja continuar... como debo hacer?
desde ya gracias...
Responder Con Cita
  #2  
Antiguo 14-05-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
intenta con strToFloat o strToFloatDef
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 14-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola, bienvenido al foro. Aparte de lo que comenta droguerman, sería mejor que nos indique el error y que expongas tu código. De esta manera te podemos ayudar mejor en tu problema.

Como recién ingresas a los fotos, te sugiero que dediques unos minutos para leer la guia de estilo: unas pequeñas y sanas normas de convivencia.

Saludos,

PD: Lo de las normas no lo digo por el hecho de que hayas violado alguna. Sólo lo expongo para que lo tengas en cuenta.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 14-05-2007
sebaguillen sebaguillen is offline
Registrado
 
Registrado: may 2007
Posts: 9
Poder: 0
sebaguillen Va por buen camino
Calculadora

Hola Delphius, antes que nada gracias por los consejos. Bueno el error me aparece cuando en tiempo de ejecucuion ingreso un numero real y posteriormente aprieto cualquiera de las operaciones que tengo, basicamente me dice que ese valor que ingrese al principio no es valido... Te dejo el codigo de los procedimientos y desde ya gracias.... Saludos.

Código Delphi [-]
unit UCalculadora;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    Edicion: TEdit;
    B7: TButton;
    B4: TButton;
    B1: TButton;
    BProducto: TButton;
    B8: TButton;
    B5: TButton;
    B2: TButton;
    BResta: TButton;
    B9: TButton;
    B6: TButton;
    B3: TButton;
    BSuma: TButton;
    B0: TButton;
    BPunto: TButton;
    BDivision: TButton;
    BIgual: TButton;
    Button1: TButton;
    BCE: TButton;
    procedure B7Click(Sender: TObject);
    procedure B8Click(Sender: TObject);
    procedure B9Click(Sender: TObject);
    procedure B4Click(Sender: TObject);
    procedure B5Click(Sender: TObject);
    procedure B6Click(Sender: TObject);
    procedure B1Click(Sender: TObject);
    procedure B2Click(Sender: TObject);
    procedure B3Click(Sender: TObject);
    procedure B0Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure EdicionKeyPress(Sender: TObject; var Key: Char);
    procedure BSumaClick(Sender: TObject);
    procedure BIgualClick(Sender: TObject);
    procedure BRestaClick(Sender: TObject);
    procedure BProductoClick(Sender: TObject);
    procedure BDivisionClick(Sender: TObject);
    procedure BCEClick(Sender: TObject);
    procedure BPuntoClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
  f,b: integer;
  i: extended;
implementation
{$R *.dfm}
procedure TForm1.B7Click(Sender: TObject);
begin
    f:=0;
    if Edicion.Text= '0' then
      Edicion.Text:= B7.Caption
    else
      Edicion.Text:= Edicion.Text + B7.Caption;
end;
procedure TForm1.B8Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B8.Caption
    else
      Edicion.Text:= Edicion.Text + B8.Caption;
end;
procedure TForm1.B9Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B9.Caption
    else
      Edicion.Text:= Edicion.Text + B9.Caption;
end;
procedure TForm1.B4Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B4.Caption
    else
      Edicion.Text:= Edicion.Text + B4.Caption;
end;
procedure TForm1.B5Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B5.Caption
    else
      Edicion.Text:= Edicion.Text + B5.Caption;
end;
procedure TForm1.B6Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B6.Caption
    else
      Edicion.Text:= Edicion.Text + B6.Caption;
end;
procedure TForm1.B1Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B1.Caption
    else
      Edicion.Text:= Edicion.Text + B1.Caption;
end;
procedure TForm1.B2Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B2.Caption
    else
      Edicion.Text:= Edicion.Text + B2.Caption;
end;
procedure TForm1.B3Click(Sender: TObject);
begin
    if Edicion.Text= '0' then
      Edicion.Text:= B3.Caption
    else
      Edicion.Text:= Edicion.Text + B3.Caption;
end;
procedure TForm1.B0Click(Sender: TObject);
begin
      if Edicion.Text <> '0' then
        Edicion.Text:= Edicion.Text + B0.Caption;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
    close;
end;
procedure TForm1.EdicionKeyPress(Sender: TObject; var Key: Char);
begin
    if not (key in ['0'..'9']) then
      key:= #0;
end;
procedure TForm1.BSumaClick(Sender: TObject);
begin
    i:= strtofloat (Edicion.Text);
    Edicion.Text:= '';
    f:=0;
    b:=0;
end;
procedure TForm1.BIgualClick(Sender: TObject);
var
  x: extended;
begin
    if b= 0 then
    begin
    if f=0 then
      begin
      x:= i + strtofloat (Edicion.Text);
      Edicion.Text:= floattostr (x);
      end
    else
      if f=1 then
        begin
        x:= i - strtofloat(Edicion.Text);
        Edicion.Text:= floattostr (x);
        end
      else
        if f=2 then
          begin
          x:= i * strtofloat (Edicion.Text);
          Edicion.Text:= floattostr (x);
          end
        else
          begin
          if Edicion.Text= '0' then
            begin
            showmessage ('No se puede dividir por 0');
            Edicion.Text:= '0';
            end
          else
            begin
            //x:= i div strtofloat (Edicion.Text);
            //Edicion.Text:= inttostr (x);
            end;
          end;
      b:=1;
      end;
end;
procedure TForm1.BRestaClick(Sender: TObject);
begin
    i:= strtofloat (Edicion.Text);
    Edicion.Text:= '';
    f:=1;
    b:=0;
end;
procedure TForm1.BProductoClick(Sender: TObject);
begin
    i:= strtofloat (Edicion.Text);
    Edicion.Text:= '';
    f:=2;
    b:=0;
end;
procedure TForm1.BDivisionClick(Sender: TObject);
begin
    i:= strtofloat (Edicion.Text);
    Edicion.Text:= '';
    f:=3;
    b:=0;
end;
procedure TForm1.BCEClick(Sender: TObject);
begin
    Edicion.Text:= '0';
end;

procedure TForm1.BPuntoClick(Sender: TObject);
begin
    if Edicion.Text = '' then
      Edicion.Text:= '0.'
    else
      Edicion.Text:= Edicion.Text + '.';

end;
end.

Última edición por dec fecha: 14-05-2007 a las 20:51:08.
Responder Con Cita
  #5  
Antiguo 14-05-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
sebaguillen, de lo que estuve viendo, el error se debe a el punto:

Código Delphi [-]
procedure TForm1.BPuntoClick(Sender: TObject);
begin
    if Edicion.Text = '' then
      Edicion.Text:= '0.'
    else
      Edicion.Text:= Edicion.Text + '.';

Lo cambié por coma y listo:

Código Delphi [-]
procedure TForm1.BPuntoClick(Sender: TObject);
begin
    if Edicion.Text = '' then
      Edicion.Text:= '0,'
    else
      Edicion.Text:= Edicion.Text + ',';

Esto se debe a la configuración regional. No me acuerdo cual es la función que permite cambiar esta configuración... se que se ha hablado en los foros sobre esta función (o API).... la verdad no me la acuerdo...

Ahora, te aconsejaría que el código en el botón igual lo mejores. Creo que sería mejor esto:

Código Delphi [-]
case f of:
1: sentencias....
2: sentencias....
3: sentencias....
else 
end;

También se puede reutilizar los eventos Click de los botones. Empleando la proiedad tag:

Código Delphi [-]
procedure TForm1.B1Click(Sender: TObject);
begin
  Edicion.Text := IntToStr((Sender as TButton).Tag);
end;

De modo que pones en el tag el número (para el B1 es 1, etc). Y haces que todos los botones compartan el mismo evento.

Espero que se entienda.
Si tienes mayores dudas avisa.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 16-05-2007
sebaguillen sebaguillen is offline
Registrado
 
Registrado: may 2007
Posts: 9
Poder: 0
sebaguillen Va por buen camino
Calculadora

Hola Delphius te cuento que ya resolvi mi principal problema asi que gracias... Ahora de las recomendaciones que me diste, la ultima no la entendi del todo... que tengo que poner ese codigo en todos los botones?. Otra consulta como tengo que hacer para que tambien pueda escribir por teclado tanto los numeros como las operaciones? Te cuento que yo use el evento 'on key press' pidiendo que escuche solamente los numeros, pero esto funciona solamente cuando el cursor esta en el cuadro de edicion...Como podria hacer? Desde ya muchas gracias...
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
Calculadora en delphi 7 eudy.net Varios 15 10-03-2007 05:35:02
Calculadora Epunamun OOP 3 19-12-2005 22:33:11
Calculadora licencia GNU bismarck_sierra Varios 0 05-04-2005 06:56:33
Componente Calculadora Gustavo Gowdak OOP 4 23-01-2005 13:19:14
Ejecutar la calculadora en una posición de la pantalla cybergerman OOP 11 27-09-2004 09:13:33


La franja horaria es GMT +2. Ahora son las 18:20:33.


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