PDA

Ver la Versión Completa : Calculadora en delphi 7


eudy.net
09-07-2006, 22:54:22
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, 00: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, 02:57:52
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, 03: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? :)


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...


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, 10:10:18
por ejemplo, algo asi:
Edit3.Text := (Edit1.Text + Edit2.Text);
Eso para el boton de suma,


Eso no creo que sume...


Edit3.Text := (Edit1.Text - Edit2.Text);
Eso para el de resta
Y esto no creo ni que compile...:(:(

keikurono
04-03-2007, 06: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, 07: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 (http://romansg.net/index.php?pg=alignedit)".

joHn je@N
04-03-2007, 07: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, 07: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, 07: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, 14:38:38
...pero el chiste es que solo hayga un edit pero ...

Pues eso tampoco compila :D :D

vtdeleon
04-03-2007, 17:24:22
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, 20:26:44
Y el truco de Marcos:

SysLocale.MiddleEast := true;
Edit1.BiDiMode := bdRightToLeft

fidel
05-03-2007, 18: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á.

ShellExecute(Handle, 'open', 'calc.exe', nil, nil, SW_SHOW);


Un saludo.

keikurono
06-03-2007, 18:07:23
aver que les parece este codigo....
Solucion al problema de la calcu en 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, 05:35:02
La nota es que es muy larga porque siempre repito este codigo en los 4 botones (+, -, *, /)
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:) :) :) .