Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Calculadora en delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=33521)

eudy.net 09-07-2006 23:54:22

Calculadora en delphi 7
 
Hola k tal
Para ser sincero no llevó ni una semana usando delphi, soy un novato:(
Kisiera k alguien me facilite el codigo de una calculadora en delphi 7
Ya sea a mi email ( eudy.net@hotmail.com ) o por aki mismo .

Muchas Gracias

nemesio 10-07-2006 01:24:48

Hola

Ya que eres nuevo con delphi, vas a tardar más tiempo tratando de entender el código que te manden que si la haces tu mismo.
Te voy a dar ciertas ideas:
1.- Estudia el Evento OnKeyPress del Edit, es elemental que lo sepas.
2.- Una vez estudiado este evento, te darás cuenta de que puedes capturar todas las teclas numéricas, alfanuméricas y de Caracteres especiales.
3.- Repasa el Uso de Variables.
4.- Cada vez que teclees por ejemplo un Número, lo vas almacenando en una Cadena de Caracteres. El presionar un simbolo como: +,-,/,*,= indicaría que es el fin de la insersión de números.
5.- Si tecleas por ejemplo una Letra, entonces anulas el caracter colocando Key:=#0;

Creo que con esas ideas puedes comenzar. Cualquier duda estoy a la orden.
Recuerda que es más fácil entender un código hecho por ti que el de otra persona.
Suerte.

jorge1987 10-07-2006 03:57:52

Cita:

Empezado por nemesio
Hola

Ya que eres nuevo con delphi, vas a tardar más tiempo tratando de entender el código que te manden que si la haces tu mismo.
Te voy a dar ciertas ideas:
1.- Estudia el Evento OnKeyPress del Edit, es elemental que lo sepas.
2.- Una vez estudiado este evento, te darás cuenta de que puedes capturar todas las teclas numéricas, alfanuméricas y de Caracteres especiales.
3.- Repasa el Uso de Variables.
4.- Cada vez que teclees por ejemplo un Número, lo vas almacenando en una Cadena de Caracteres. El presionar un simbolo como: +,-,/,*,= indicaría que es el fin de la insersión de números.
5.- Si tecleas por ejemplo una Letra, entonces anulas el caracter colocando Key:=#0;

Creo que con esas ideas puedes comenzar. Cualquier duda estoy a la orden.
Recuerda que es más fácil entender un código hecho por ti que el de otra persona.
Suerte.

Jjajaja, un poco complicado para alguien que hace 1 semana que usa delphi, no hubiera sido mas simple, decirle:

Pone tres Tedit, y cuatro TButton, , a cada Tbutton, le pones, por ejemplo, algo asi:
Edit3.Text := (Edit1.Text + Edit2.Text);
Eso para el boton de suma,
Edit3.Text := (Edit1.Text - Edit2.Text);
Eso para el de resta, y ais sucesivamente, seria una calculadora bastante precaria, pero me parece que se ba a ser mas facil de desarrollar. :p
Espero haberte servido de algo.

Saludos :D:D

dec 10-07-2006 04:09:21

Hola,

Personalmente creo que la respuesta de Nemesio es acertada, puesto que se le están dando ideas al compañero, no las cosas hechas. Es cierto que el código fuente, leer código fuente, no está para nada demás, pero, el código que tú propones tiene algunos problemas... ¿no te parece Jorge? :)

Código Delphi [-]
Edit3.Text := (Edit1.Text + Edit2.Text);
// Eso para el boton de suma

Eso no sumaría lo contenido en los "TEdit", sino que concatenaría los "String" contenidos en ambos "TEdit", lo que no es lo mismo, como sabes. En cuanto a lo que propones para la resta, o sea...

Código Delphi [-]
Edit3.Text := (Edit1.Text - Edit2.Text);

Ese código ni siquiera compilaría, puesto que el operador "-" no se comtempla para el tipo "String".

Por otro lado... ¿dónde has visto una calculadora con más de un "TEdit"? Generalmente se utiliza un sólo "TEdit" tanto para escribir los valores con los que operar como para mostrar los resultados de la operación de marras.

En todo caso... estoy seguro de que si se busca un poco por Internet se dará con el código fuente de alguna calculadora escrita en Delphi y cuya "lógica" pudiera estudiarse.

Neftali [Germán.Estévez] 10-07-2006 11:10:18

Cita:

Empezado por jorge1987
por ejemplo, algo asi:
Edit3.Text := (Edit1.Text + Edit2.Text);
Eso para el boton de suma,

Eso no creo que sume...

Cita:

Empezado por jorge1987
Edit3.Text := (Edit1.Text - Edit2.Text);
Eso para el de resta

Y esto no creo ni que compile...:(:(

keikurono 04-03-2007 07:29:19

si ese es mi problema tambien, pero el chiste es que solo hayga un edit pero ...nemesio aver explica mejor eso de como utizar eso de OnKeyPress del Edit y de key:=#0(en donde lo pongo), ademas No encuentro el comando del edit que hace que uno escriba de derecha a izquierda como en los verdaderas calculadorass no recuerdo ese comando porfa diganlo psss

dec 04-03-2007 08:12:23

Hola,

Respecto del "key := #0"... lo sitúas en el miso evento "OnKeyPress": fíjate que "key" es un parámetro que se pasa como referencia en dicho método, de modo que tú puedes operar sobre el mismo, por ejemplo asignándole el valor que dices.

Respecto de la alineación del texto en un "TEdit"... si en tu versión de Delphi no cuentas con una propiedad "AlignText" o "Alignment", o "TextAlign" (ahora mismo no recuerdo su nombre exacto) puedes probar en todo caso el componente que preparó Román y cuya lógica y código fuente puedes encontrar aquí: "Alineando texto en un TEdit".

joHn je@N 04-03-2007 08:21:35

?
 
dec solo una pregunta. ¿En que version de Delphi aparece la propiedad en un Edit de Alinear el Texto?. (Uso Delphi7 y no la tiene:()

No he visto el código de Roman pero, si es complicado mejor usa un Memo o un RichEdit.

Saludos:)

dec 04-03-2007 08:27:31

Hola,

Creo que es a partir del Delphi que acompaña a BDS 2005 que ya se encuentra dicha propiedad (y algunas más añadidas al "TEdit" y otros componentes). También contarás con ella en BDS 2006 y creo que también en Turbo Delphi.

En cuanto al código de Román... no, hombre, aparte de que no es nada complicado (desde mi punto de vista, por otro lado nada privilegiado), digo, además de eso Román lo comenta pormenorizadamente. :)

joHn je@N 04-03-2007 08:29:11

Ya he visto el código de roman solo me queda hacerle una reverencia.
Que bueno tener a gente como roman en el foro.

Pero como eudy se dice ser un novato, "instalar o agregar" el componente le sería más complicado.

Saludos:)

Julián 04-03-2007 15:38:38

Cita:

Empezado por keikurono
...pero el chiste es que solo hayga un edit pero ...

Pues eso tampoco compila :D :D

vtdeleon 04-03-2007 18:24:22

Cita:

Empezado por dec
y creo que también en Turbo Delphi.

En los turbo no está eso. Y nunca lo habia visto en versiones anteriores :confused:, me sorprendo ahora. Siempre he usado los trucos o componentes de terceros para alinear.

Saludos

seoane 04-03-2007 21:26:44

Y el truco de Marcos:
Código Delphi [-]
  SysLocale.MiddleEast := true;
  Edit1.BiDiMode := bdRightToLeft

fidel 05-03-2007 19:18:29

Hola:

Si es para practicar o por otra razón puedes hacerte la calculadora, pero si no llama desde Delphi a la de windows y ya está.
Código Delphi [-]
ShellExecute(Handle, 'open', 'calc.exe', nil, nil, SW_SHOW);

Un saludo.

keikurono 06-03-2007 19:07:23

aver que les parece este codigo....
Solucion al problema de la calcu en delphi!!!!!
Código Delphi [-]
 
unit calcu_Until;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
arreg1=array[1..100,1..100] of string;
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
w:boolean;
B:arreg1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
    begin
        w:=true;
    end;
procedure TForm1.Button2Click(Sender: TObject);//boton suma
    begin
       if edit1.Text<>'' then
            if W=true then
                begin
                   B[1,1]:=edit1.Text;
                   B[1,2]:='+';
                   W:=false;
                   edit1.Text:='';
                   edit1.SetFocus;
                end
           else
               begin
                     B[2,1]:=edit1.Text;
                          if B[1,2]='+' then
                                B[1,1]:=floattostr(strtofloat(B[1,1])+strtofloat(B[2,1]));
                          if B[1,2]='/' then
                                if B[2,1]<>'0' then
                                       B[1,1]:=floattostr(strtofloat(B[1,1])/strtofloat(B[2,1]))
                                else
                                       MESSAGEDLG('EL DIVIDENDO DEVE DE SER <>0',mTInformation,[mbok],0);
                          if B[1,2]='-' then
                                B[1,1]:=floattostr(strtofloat(B[1,1])-strtofloat(B[2,1]));
                          if B[1,2]='*' then
                                B[1,1]:=floattostr(strtofloat(B[1,1])*strtofloat(B[2,1]));
                    B[1,2]:='+';
                    edit1.Text:=B[1,1];
                    edit1.SetFocus;
                    W:=false;
                    B[2,1]:='';
             end;
 
end;
procedure TForm1.Button3Click(Sender: TObject);//BOTON RESTA
begin
       if edit1.Text<>'' then
              if W=true then
                  begin
                      B[1,1]:=edit1.Text;
                      B[1,2]:='-';
                      W:=false;
                      edit1.Text:='';
                      edit1.SetFocus;
                 end
             else
                  begin
                       B[2,1]:=edit1.Text;
                            if B[1,2]='+' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])+strtofloat(B[2,1]));
                            if B[1,2]='-' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])-strtofloat(B[2,1]));
                            if B[1,2]='*' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])*strtofloat(B[2,1]));
                            if B[1,2]='/' then
                                  if B[2,1]<>'0' then
                                      B[1,1]:=floattostr(strtofloat(B[1,1])/strtofloat(B[2,1]))
                                  else
                                      MESSAGEDLG('EL DIVIDENDO DEVE DE SER DISTINTO DE CERO',mTInformation,[mbok],0);                            
                            B[1,2]:='-';
                            edit1.Text:=B[1,1];
                            edit1.SetFocus;
                            W:=false;
                            B[2,1]:='';
                    end;
end;
procedure TForm1.Button4Click(Sender: TObject);//BOTON POR
     begin
         if edit1.Text<>'' then
              if W=true then 
                 begin
                     B[1,1]:=edit1.Text;
                     B[1,2]:='*';
                     W:=false;
                     edit1.Text:='';
                     edit1.SetFocus;
                 end
             else
                 begin
                      B[2,1]:=edit1.Text;
                            if B[1,2]='+' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])+strtofloat(B[2,1]));
                            if B[1,2]='-' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])-strtofloat(B[2,1]));
                            if B[1,2]='*' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])*strtofloat(B[2,1]));
                            if B[1,2]='/' then
                                   if B[2,1]<>'0' then
                                           B[1,1]:=floattostr(strtofloat(B[1,1])/strtofloat(B[2,1]))
                                   else
                                           MESSAGEDLG('EL DIVIDENDO DEVE DE SER DISTINTO DE CERO',mTInformation,[mbok],0);

                            B[1,2]:='*';
                            edit1.Text:=B[1,1];
                            edit1.SetFocus;
                            W:=false;
                            B[2,1]:='';
                   end;
end;
procedure TForm1.Button5Click(Sender: TObject);//boton entre
  begin
       if edit1.Text<>'' then
             if W=true then
                 begin
                      B[1,1]:=edit1.Text;
                      B[1,2]:='/';
                      W:=false;
                      edit1.Text:='';
                      edit1.SetFocus;
                 end
             else
                 begin
                      B[2,1]:=edit1.Text;
                           if B[1,2]='+' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])+strtofloat(B[2,1]));
                           if B[1,2]='-' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])-strtofloat(B[2,1]));
                           if B[1,2]='*' then
                                  B[1,1]:=floattostr(strtofloat(B[1,1])*strtofloat(B[2,1]));
                           if B[1,2]='/' then
                                 if B[2,1]<>'0' then
                                       B[1,1]:=floattostr(strtofloat(B[1,1])/strtofloat(B[2,1]))
                           else
                                 MESSAGEDLG('EL DIVIDENDO DEVE DE SER DISTINTO DE CERO',mTInformation,[mbok],0);
                           
                       B[1,2]:='/';
                       edit1.Text:=B[1,1];
                       edit1.SetFocus;
                       W:=false;
                       B[2,1]:='';
               end;
 
end;
procedure TForm1.Button1Click(Sender: TObject);//boton igual 
   begin
        if (B[2,1]='')and(B[1,2]<>'')then
             B[2,1]:=edit1.Text;
        if B[1,2]='+' then
             B[1,1]:=floattostr(strtofloat(B[1,1])+strtofloat(B[2,1]));
        if B[1,2]='-' then
             B[1,1]:=floattostr(strtofloat(B[1,1])-strtofloat(B[2,1]));
        if B[1,2]='*' then
             B[1,1]:=floattostr(strtofloat(B[1,1])*strtofloat(B[2,1]));
        if B[1,2]='/' then
             if B[2,1]<>'0' then
                  B[1,1]:=floattostr(strtofloat(B[1,1])/strtofloat(B[2,1]))
             else
                  MESSAGEDLG('EL DIVIDENDO DEVE DE SER DISTINTO DE CERO',mTInformation,[mbok],0);
        B[2,1]:='';
        B[1,2]:='';
        edit1.Text:=B[1,1];
        w:=TRUE;
 
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  begin
       if not (key in ['0'..'9',#8]) then
          begin
              key:=#0;
              beep;
          end;
  end;
end.

keikurono 10-03-2007 06:35:02

La nota es que es muy larga porque siempre repito este codigo en los 4 botones (+, -, *, /)
Código SQL [-]
 if B[1,2]='+' then
             B[1,1]:=floattostr(strtofloat(B[1,1])+strtofloat(B[2,1]));
        if B[1,2]='-' then
             B[1,1]:=floattostr(strtofloat(B[1,1])-strtofloat(B[2,1]));
        if B[1,2]='*' then
             B[1,1]:=floattostr(strtofloat(B[1,1])*strtofloat(B[2,1]));
        if B[1,2]='/' then
             if B[2,1]<>'0' then
                  B[1,1]:=floattostr(strtofloat(B[1,1])/strtofloat(B[2,1]))
             else
                  MESSAGEDLG('EL DIVIDENDO DEVE DE SER DISTINTO DE CERO',mTInformation,[mbok],0);

Alguien save eso de como utilizar en un project como estos, eso de prosedimiento ???, por que con eso se acortaria mejor:) :) :) .


La franja horaria es GMT +2. Ahora son las 08:15:20.

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