VB - Uma calculadora simples para você usar.


Esta precisando de uma calculdora simples para usar como utilitário no seu programa VB. Então siga-me...

- Inicie um novo projeto no VB e mude o nome do formulário padrão para frmcalculadora.

- Insira uma caixa de texto e alguns botões de comando conforme layout abaixo:

- Agora insira o seguinte código no formulário:

' Atencao : Partes deste programa foram adaptadas de programas de exemplo
' fornecidos pela Microsoft juntamente com o produto.
' ------------------------------------------------------------------------

Dim Op1 As Double           ' Primeiro operando.
Dim Op2 As Double           ' Segundo operando.
Dim FlagDecimal As Integer  ' Flag do Ponto Decimal.
Dim NumOps As Integer       ' Numero de Operandos.
Dim UltimaEntrada As String ' Indica a ultima tecla pressionada.
Dim FlagOperacao As String  ' Indica a operacao pendente
Const VERDADEIRO = -1
Const FALSO = 0

' Procedure para a tecla C (Cancela).
' Reseta o display e inicializa variaveis.
'
Private Sub Cancel_Click()
  Number(0).SetFocus 'Volta o Controle para matriz de Numeros
  Visor.Caption = "0."
  Form_Load
End Sub

' Procedure para a tecla CE (Cancela Entrada).
'
Private Sub CancelEntry_Click()
  Number(0).SetFocus 'Volta o Controle para matriz de Numeros
  Visor.Caption = "0."
  FlagDecimal = FALSO
  UltimaEntrada = "CE"
End Sub

' Procedure para a tecla de ponto decimal (.) .
' Se a ultima tecla pressiona fou operador, initializa
' Visor com "0." Senao, adiciona um ponto decimal no display.
'
Private Sub Decimal_Click()
  If UltimaEntrada <> "NUMS" Then
    Visor.Caption = "0."
  ElseIf FlagDecimal = FALSO Then
    Visor.Caption = Visor.Caption + "."
  End If

  FlagDecimal = VERDADEIRO
  UltimaEntrada = "NUMS"
End Sub

' Rotina de Inicializacao para o formulario
' Inicia todas as variaveis
'
Private Sub Form_Load()
  CENTRALIZA_FORM Me
  FlagDecimal = FALSO
  NumOps = 0
  UltimaEntrada = "NONE"
  FlagOperacao = " "
End Sub

Private Sub mnuSair_Click()
  End
End Sub

' Procedure para as teclas de numeros (0-9).
' Adiciona o novo numero ao numero do display.
'
Private Sub Number_Click(Index As Integer)
  If UltimaEntrada <> "NUMS" Then
    Visor.Caption = ""
    FlagDecimal = FALSO
  End If
  If Len(Visor.Caption) <= 15 Then 'Limita entrada valores a 15 digitos(inclusive pto decimal)
     Visor.Caption = Visor.Caption + Number(Index).Caption
  End If
  UltimaEntrada = "NUMS"
  Operator(4).SetFocus 'Posiciona o Foco na operação de igual
End Sub

Private Sub Number_KeyPress(Index As Integer, KeyAscii As Integer)
'*** FAZ LEITURA DE TECLAS PRESSIONADAS ***
  If KeyAscii = 61 Then
     Operator_Click (4) 'Sinal de Igual
  ElseIf KeyAscii = 67 Or KeyAscii = 99 Then
     Cancel_Click 'Botao de Limpar
  ElseIf KeyAscii = 37 Then
     Percent_Click 'Sinal de Porcentagem
  ElseIf KeyAscii = 42 Or KeyAscii = 120 Or KeyAscii = 88 Then
     Operator_Click (2) 'Sinal de Multiplicação
  ElseIf KeyAscii = 43 Then
     Operator_Click (1) 'Sinal de Mais
  ElseIf KeyAscii = 45 Then
     Operator_Click (3) 'Sinal de Igual
  ElseIf KeyAscii = 46 Then
     Decimal_Click      'Ponto decimal
  ElseIf KeyAscii = 47 Then
     Operator_Click (0) 'Sinal de Divisao
  ElseIf KeyAscii = 48 Then
     Number_Click (0)
  ElseIf KeyAscii = 49 Then 
     Number_Click (1)
  ElseIf KeyAscii = 50 Then
     Number_Click (2)
  ElseIf KeyAscii = 51 Then
     Number_Click (3)
  ElseIf KeyAscii = 52 Then
     Number_Click (4)
  ElseIf KeyAscii = 53 Then
    Number_Click (5)
  ElseIf KeyAscii = 54 Then
    Number_Click (6)
  ElseIf KeyAscii = 55 Then
    Number_Click (7)
  ElseIf KeyAscii = 56 Then
    Number_Click (8)
  ElseIf KeyAscii = 57 Then
    Number_Click (9)
  End If


End Sub

' Procedure para os teclas de operadores (+, -, x, /, =).
' Se a tecla pressiona imediatamente foi parte de um
' numero, incrementa a variavel NumOps. Se um operando esta presente,
' "seta" Op1. Se dois operandos estao presentes, "seta" Op1 igual ao
' resultado da operacao em Op1 com a string entrada por ultimo e mostra
' o resultado.
'
Private Sub Operator_Click(Index As Integer)
Operator(4).SetFocus   'Volta o Controle para matriz de Numeros
  If UltimaEntrada = "NUMS" Then
    NumOps = NumOps + 1
  End If
  If NumOps = 1 Then
    Op1 = Val(Visor.Caption)
  ElseIf NumOps = 2 Then
    Op2 = Val(Visor.Caption)
  Select Case FlagOperacao
    Case "+"
     Op1 = Op1 + Op2
    Case "-"
     Op1 = Op1 - Op2
    Case "X"
     Op1 = Op1 * Op2
    Case "/"
    If Op2 = 0 Then
      MsgBox "Erro, Divisão por zero impossível", 48, "Spasso Calc"
    Else
      Op1 = Op1 / Op2
    End If
    Case "="
     Op1 = Op2
  End Select
  Visor.Caption = Format$(Op1)
NumOps = 1
End If

UltimaEntrada = "OPS"
FlagOperacao = Operator(Index).Caption
End Sub

Private Sub Operator_KeyPress(Index As Integer, KeyAscii As Integer)
'*** FAZ LEITURA DE TECLAS PRESSIONADAS ***
If KeyAscii = 61 Then
  Operator_Click (4) 'Sinal de Igual
ElseIf KeyAscii = 67 Or KeyAscii = 99 Then
  Cancel_Click      'Botao de Limpar
ElseIf KeyAscii = 37 Then
  Percent_Click     'Sinal de Porcentagem
ElseIf KeyAscii = 42 Or KeyAscii = 120 Or KeyAscii = 88 Then
  Operator_Click (2) 'Sinal de Multiplicação
ElseIf KeyAscii = 43 Then
  Operator_Click (1) 'Sinal de Mais
ElseIf KeyAscii = 45 Then
  Operator_Click (3) 'Sinal de Igual
ElseIf KeyAscii = 46 Then
  Decimal_Click 'Ponto decimal
ElseIf KeyAscii = 47 Then
  Operator_Click (0) 'Sinal de Divisao
ElseIf KeyAscii = 48 Then
  Number_Click (0)
ElseIf KeyAscii = 49 Then  
  Number_Click (1)
ElseIf KeyAscii = 50 Then
  Number_Click (2)
ElseIf KeyAscii = 51 Then
  Number_Click (3)
ElseIf KeyAscii = 52 Then
  Number_Click (4)
ElseIf KeyAscii = 53 Then
  Number_Click (5)
ElseIf KeyAscii = 54 Then
  Number_Click (6)
ElseIf KeyAscii = 55 Then
  Number_Click (7)
ElseIf KeyAscii = 56 Then
  Number_Click (8)
ElseIf KeyAscii = 57 Then
  Number_Click (9)
End If

End Sub

' Procedure para a tecla de percentagem (%).
' Computa and mostra a percentagem do primeiro operando.
'
Private Sub Percent_Click()
   Visor.Caption = Format$(Op1 * Val(Visor.Caption) / 100)
End Sub

Public Sub CENTRALIZA_FORM(Formulario As Form)
On Error Resume Next  'Evita erro caso o usuário minimize o Form
With Formulario
  .Left = (Screen.Width - .Width) / 2 'Alinha o form no horizontalmente no centro
  .Top = (Screen.Height - .Height) / 2 'Alinha o form no verticalmente no centro
End With

Para usar a calculadora no seu projeto basta incluir o formulário nele e pronto !!!


José Carlos Macoratti