Você está na página 1de 17

DGITO INFORMTICA Diassis Bonfim Macedo

diassis@digito-tec.com.br / (77) 3454-1557

Projeto Calculadora

Aps os primeiros contatos com o Delphi e o aprendizado de seus principais conceitos de programao, vamos desenvolver um projeto onde utilizaremos o conhecimento adquirido para construir uma Calculadora totalmente funcional. Alm da aplicao dos conceitos aprendidos, sero apresentados gradativamente alguns novos objetos da paleta de componentes do Delphi.

Montando a interface da calculadora ~1~

www.digito.pro.br

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

Crie um novo projeto e o salve com o nome pCalculadora para o projeto e uCalculadora para a unit. Renomeie o Form1 para frmcalculadora. Insira os seguintes objetos ao formulrio:

1 MainMenu 1 Edit 18 buttons 1 statusbar

Altere a propriedade caption do frmCalculadora para Calculadora. Limpe a propriedade Text, selecione a opo bkSoft para a propriedade BevelKind, coloque false para a propriedade Autosize e edt para a propriedade name do edit1. Altere tambm a propriedade caption e name de cada button e organize-os conforme exibido a seguir:

btBk www.digito.pro.br

~2~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557 btC bt8 bt4 bt1 bt5 bt6 bt2 bt3 bt0 btV
Montando a Interface da Calculadora

bt7 bt9

btMais btMenos btX btD btIgual

D um clique duplo sobre o Objeto MainMenu para exibir a tela de edio do menu. Altere a propriedade caption para Finalizar e pressione Enter. Automaticamente ser aberto um novo item de menu direita, ignore-o e clique embaixo do Finalizar. Altere a propriedade dele para Sair. Para criar um atalho, altere a propriedade ShortCut para Ctrl+S.

Montando o menu da calculadora

Utilizaremos o statusBar (Barra de status) para informar ao usurio que operao ele estar executando no momento, ou seja, se o usurio escolher a operao somar, na barra de status aparecer o texto: somando, se subtrair: subtraindo e assim por diante. Para isso, precisamos criar um painel no statusbar. Clique com o boto direito nele e acesse a opo Panels Editor do menu popup exibido.

www.digito.pro.br

~3~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

Panels Editor

Ser aberta uma janela, clique na opo Add New para adicionar um StatusPanel. Em seguida feche a janela.

Adicionando um StatusPanel

Programando os botes numricos Vamos dar funcionalidade aos botes numricos. Quando o usurio clicar no bt1, a calculadora deve escrever 1 no edt (que o nosso visor). Para isso, acesse o evento OnClick do bt1 e escreva o seguinte cdigo: edt.Text:=edt.Text+1; Na linha acima estamos dizendo que o edt receber o que ele j tinha antes www.digito.pro.br

~4~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557 (caso algum boto j tenha sido pressionado) + 1. Perceba que o 1 est entre aspas simples, pois o edit s recebe texto. Isto quer dizer que quando tivermos que pass-lo para uma varivel numrica precisaremos usar uma funo para convert-lo.

Faa o mesmo com cada boto, obviamente colocando o respectivo nmero.

Programando os botes numricos

Programando as Operaes

Vamos declarar algumas variveis que precisaremos utilizar em nossa programao. V at a seo var (antes de implementation) da uCalculadora e insira as seguintes linhas de cdigo: visor: real; operacao: char; www.digito.pro.br

~5~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

Declarando as variveis

Vamos inicializar a varivel visor, pois ela ser um acumulador ( uma varivel que guarda o valor antigo mais o atual). Para a varivel visor receber o valor antigo da primeira vez, ela precisa receber um valor nulo, no caso 0.

Selecione o frmCalculadora e na janela Object Inspector acesse o evento

www.digito.pro.br

~6~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557 OnShow (executado quando o formulrio exibido) e digite o cdigo baixo:

Visor:=0;

Esta linha far com que a varivel seja inicializada com zero quando o formulrio aparecer na tela. A varivel visor ir armazenar o valor que for digitado e posteriormente ser calculado com o ltimo valor digitado.

Vamos agora programar o boto + (mais). Insira o seguinte cdigo em seu evento OnClick:

www.digito.pro.br

~7~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

Programando o boto + (mais)

Faa o mesmo procedimento para as outras operaes (botes -, X e /), claro, substituindo pelos seus respectivos operadores: - para subtrao; * para multiplicao / para diviso.

Exibindo o resultado das operaes


Para exibir o resultado das operaes, precisamos criar um procedimento para cada uma delas. V at a seo Public da uCalculadora e declare cada uma das procedures:

www.digito.pro.br

~8~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

Declarao da procedure de cada operao

Vamos primeiro programar a procedure soma, digite o cdigo exibido abaixo:

Procedure soma

Esse procedimento verifica se o edt diferente de vazio, se sim, ele soma o que est no visor com o que est no edt, seno ele apenas mostra no edt o que est em visor.

Finalmente ele zera o visor, coloca um espao em operao e limpa a barra de

www.digito.pro.br

~9~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557 Status incializando-os para a prxima operao. Faa o mesmo para as procedures das outras operaes, lembre-se de mudar os operadores.

Aps programar as procedures, podemos ento apresentar o resultado. O resultado ser exibido quando o usurio clicar no boto = (btIgual). Portanto dgite o seguinte cdigo em seu evento OnClick:

Este cdigo ir chamar a procedure correspondente dependendo do valor da varivel operao. Caso a operao no tiver nenhum dos valores especificados, ser exibida uma mensagem de alerta.

Programando os demais botes

Vamos agora dar funcionalidade aos demais botes da calculadora (boto BackSpace, boto C, e boto ,). www.digito.pro.br

~ 10 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

O boto BackSpace ser utilizado para apagar os dgitos da direita para esquerda. Digite o seguinte cdigo em seu evento OnClick: procedure TfrmCalculadora.btBkClick(Sender: TObject); begin if edt.Text <> '' then begin edt.Text:=copy(edt.Text,1,length(edt.Text)-1); end; end;

Este cdigo ir copiar do primeiro at o penltimo dgito do edt, ou seja, estar excluindo o ltimo digito e assim apagando da direita para a esquerda.

O boto C ser utilizado para zerar a varivel visor, limpar a operao e limpar o edt liberando a calculadora para uma nova conta. Digite o seguinte cdigo em seu evento OnClick: procedure TfrmCalculadora.btCClick(Sender: TObject); begin edt.Clear; visor:=0; operacao:=' '; end;

O Boto , servir para inserir o smbolo decimal no edt. Para isto digite o seguinte cdigo no evento OnClick do boto , (btV): procedure TfrmCalculadora.btVClick(Sender: TObject); begin if pos(',',edt.Text) = 0 then edt.Text:=edt.Text+ ','; end; www.digito.pro.br ~ 11 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

Este cdigo ir inserir uma vrgula no edt caso j no exista uma.

Para concluir nossa calculadora, falta programar o Menu Finalizar > Sair que criamos anteriormente. Para isso, d um duplo dique sobre o objeto MainMenu, selecione o menu Sair e acesse o seu evento OnClick. Digite o seguinte cdigo para fechar a calculadora: procedure TfrmCalculadora.Sail1Click(Sender: TObject); begin close; end;

Pronto, nossa calculadora est pronta. Execute o projeto para gerar o executvel na pasta onde foi salvo o projeto. Abaixo segue o cdigo completo da uCalculadora:

unit uCalculadora; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, StdCtrls;

www.digito.pro.br

~ 12 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557

type TfrmCalculadora = class(TForm) MainMenu1: TMainMenu; edt: TEdit; btBk: TButton; btC: TButton; btD: TButton; bt7: TButton; bt8: TButton; bt9: TButton; bt4: TButton; bt5: TButton; bt6: TButton; bt1: TButton; bt2: TButton; bt3: TButton; bt0: TButton; btV: TButton; btIgual: TButton; btMais: TButton; btMenos: TButton; btX: TButton; StatusBar1: TStatusBar; Sair1: TMenuItem; Sail1: TMenuItem; procedure bt1Click(Sender: TObject); procedure bt2Click(Sender: TObject); procedure bt3Click(Sender: TObject); procedure bt4Click(Sender: TObject); procedure bt5Click(Sender: TObject); procedure bt6Click(Sender: TObject); procedure bt7Click(Sender: TObject); procedure bt8Click(Sender: TObject); procedure bt9Click(Sender: TObject); procedure btMaisClick(Sender: TObject); procedure btMenosClick(Sender: TObject); procedure btXClick(Sender: TObject); procedure btDClick(Sender: TObject); procedure btIgualClick(Sender: TObject); procedure btBkClick(Sender: TObject); procedure btCClick(Sender: TObject); procedure btVClick(Sender: TObject); procedure Sail1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure soma; procedure subtracao; procedure multiplicacao; procedure divisao; end; var frmCalculadora: TfrmCalculadora; visor:real; operacao:char;

www.digito.pro.br

~ 13 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557
implementation {$R *.dfm} procedure TfrmCalculadora.bt1Click(Sender: TObject); begin edt.Text:=edt.Text+'1'; end; procedure TfrmCalculadora.bt2Click(Sender: TObject); begin edt.Text:=edt.Text+'2'; end; procedure TfrmCalculadora.bt3Click(Sender: TObject); begin edt.Text:=edt.Text+'3'; end; procedure TfrmCalculadora.bt4Click(Sender: TObject); begin edt.Text:=edt.Text+'4'; end; procedure TfrmCalculadora.bt5Click(Sender: TObject); begin edt.Text:=edt.Text+'5'; end; procedure TfrmCalculadora.bt6Click(Sender: TObject); begin edt.Text:=edt.Text+'6'; end; procedure TfrmCalculadora.bt7Click(Sender: TObject); begin edt.Text:=edt.Text+'7'; end; procedure TfrmCalculadora.bt8Click(Sender: TObject); begin edt.Text:=edt.Text+'8'; end; procedure TfrmCalculadora.bt9Click(Sender: TObject); begin edt.Text:=edt.Text+'9'; end; procedure TfrmCalculadora.btMaisClick(Sender: TObject); begin if edt.Text <> '' then begin if visor = 0 then visor:=strToFloat(edt.Text) else visor:=visor+strToFloat(edt.Text); // edt.Clear;

www.digito.pro.br

~ 14 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557
operacao:='+'; StatusBar1.Panels[0].Text:=' Somando '; end else MessageDlg('Informe um valor antes somar!',mtWarning,[mbok],0); end; // // Soma // procedure TfrmCalculadora.soma; var resultado:real; begin if edt.Text <> '' then begin resultado:=visor+strtofloat(edt.Text); edt.Text:=floattostr(resultado); end else edt.Text:=floattostr(visor); visor:=0; operacao:=' '; StatusBar1.Panels[0].Text:=' '; end; // // Subtrao // procedure TfrmCalculadora.subtracao; var resultado:real; begin if edt.Text <> '' then begin resultado:=visor-strtofloat(edt.Text); edt.Text:=floattostr(resultado); end else edt.Text:=floattostr(visor); visor:=0; operacao:=' '; StatusBar1.Panels[0].Text:=' '; end; // // Multiplicao // procedure TfrmCalculadora.multiplicacao; var resultado:real; begin if edt.Text <> '' then begin resultado:=visor*strtofloat(edt.Text); edt.Text:=floattostr(resultado); end else edt.Text:=floattostr(visor); visor:=0; operacao:=' '; StatusBar1.Panels[0].Text:=' ';

www.digito.pro.br

~ 15 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557
end; // // Diviso // procedure TfrmCalculadora.divisao; var resultado:real; begin if edt.Text <> '' then begin resultado:=visor/strtofloat(edt.Text); edt.Text:=floattostr(resultado); end else edt.Text:=floattostr(visor); visor:=0; operacao:=' '; StatusBar1.Panels[0].Text:=' '; end; procedure TfrmCalculadora.btMenosClick(Sender: TObject); begin if edt.Text <> '' then begin if visor = 0 then visor:=strToFloat(edt.Text) else visor:=visor-strToFloat(edt.Text); // edt.Clear; operacao:='-'; StatusBar1.Panels[0].Text:=' Subtraindo '; end else MessageDlg('Informe um valor antes subtrair!',mtWarning,[mbok],0); end; procedure TfrmCalculadora.btXClick(Sender: TObject); begin if edt.Text <> '' then begin if visor = 0 then visor:=strToFloat(edt.Text) else visor:=visor*StrToFloat(edt.Text); // edt.Clear; operacao:='*'; StatusBar1.Panels[0].Text:=' Multiplicando '; end else MessageDlg('Informe um valor antes multiplicar!',mtWarning,[mbok],0); end; procedure TfrmCalculadora.btDClick(Sender: TObject); begin if edt.Text <> '' then begin

www.digito.pro.br

~ 16 ~

cursos@digito.pro.br

DGITO INFORMTICA Diassis Bonfim Macedo


diassis@digito-tec.com.br / (77) 3454-1557
if visor = 0 then visor:=strToFloat(edt.Text) else visor:=visor/strToFloat(edt.Text); // edt.Clear; operacao:='/'; StatusBar1.Panels[0].Text:=' Dividindo '; end else MessageDlg('Informe um valor antes dividir!',mtWarning,[mbok],0); end; procedure TfrmCalculadora.btIgualClick(Sender: TObject); begin case operacao of '+': soma; '-': subtracao; '*': multiplicacao; '/': divisao; else MessageDlg('Voc precisa escolher uma Operao!',mtWarning,[mbOk],0); end; end; procedure TfrmCalculadora.btBkClick(Sender: TObject); begin if edt.Text <> '' then begin edt.Text:=copy(edt.Text,1,length(edt.Text)-1); end; end; procedure TfrmCalculadora.btCClick(Sender: TObject); begin edt.Clear; visor:=0; operacao:=' '; end; procedure TfrmCalculadora.btVClick(Sender: TObject); begin if pos(',',edt.Text) = 0 then edt.Text:=edt.Text+ ','; end; procedure TfrmCalculadora.Sail1Click(Sender: TObject); begin close; end; end.

www.digito.pro.br

~ 17 ~

cursos@digito.pro.br