Академический Документы
Профессиональный Документы
Культура Документы
Private mdblResult
As Double As Double
Private mdblSavedNumber Private mstrDot Private mstrOp Private mstrDisplay Private mblnDecEntered Private mblnOpPending Private mblnNewEquals
End Sub
Select Case KeyCode Case vbKeyBack: Case vbKeyDelete: Case vbKeyEscape: intIndex = 0 intIndex = 1 intIndex = 2
Case vbKey0, vbKeyNumpad0: intIndex = 18 Case vbKey1, vbKeyNumpad1: intIndex = 13 Case vbKey2, vbKeyNumpad2: intIndex = 14 Case vbKey3, vbKeyNumpad3: intIndex = 15 Case vbKey4, vbKeyNumpad4: intIndex = 8 Case vbKey5, vbKeyNumpad5: intIndex = 9 Case vbKey6, vbKeyNumpad6: intIndex = 10 Case vbKey7, vbKeyNumpad7: intIndex = 3 Case vbKey8, vbKeyNumpad8: intIndex = 4 Case vbKey9, vbKeyNumpad9: intIndex = 5
Case vbKeyDecimal: Case vbKeyAdd: Case vbKeySubtract: Case vbKeyMultiply: Case vbKeyDivide: Case Else: End Select
Exit Sub
End Sub
Select Case Chr$(KeyAscii) Case "S", "s": intIndex = 7 Case "P", "p": intIndex = 12 Case "R", "r": intIndex = 17 Case "X", "x": intIndex = 11 Case "=": Case Else: intIndex = 22 Exit Sub
End Select
End Sub
mintCurrKeyIndex = Index
strPressedKey = cmdCalc(Index).Caption
Select Case strPressedKey Case "0", "1", "2", "3", "4", _ "5", "6", "7", "8", "9" If mblnOpPending Then mstrDisplay = "" mblnOpPending = False
End If If mblnEqualsPressed Then mstrDisplay = "" mblnEqualsPressed = False End If mstrDisplay = mstrDisplay & strPressedKey Case "." If mblnOpPending Then mstrDisplay = "" mblnOpPending = False End If If mblnEqualsPressed Then mstrDisplay = "" mblnEqualsPressed = False End If If InStr(mstrDisplay, ".") > 0 Then Beep Else mstrDisplay = mstrDisplay & strPressedKey End If Case "+", "-", "X", "/" mdblResult = Val(mstrDisplay) mstrOp = strPressedKey mblnOpPending = True mblnDecEntered = False
mblnNewEquals = True Case "%" mdblSavedNumber = (Val(mstrDisplay) / 100) * mdblResult mstrDisplay = Format$(mdblSavedNumber) Case "=" If mblnNewEquals Then mdblSavedNumber = Val(mstrDisplay) mblnNewEquals = False End If Select Case mstrOp Case "+" mdblResult = mdblResult + mdblSavedNumber Case "-" mdblResult = mdblResult - mdblSavedNumber Case "X" mdblResult = mdblResult * mdblSavedNumber Case "/" If mdblSavedNumber = 0 Then mstrDisplay = "ERROR" Else mdblResult = mdblResult / mdblSavedNumber End If Case Else mdblResult = Val(mstrDisplay) End Select
If mstrDisplay <> "ERROR" Then mstrDisplay = Format$(mdblResult) End If mblnEqualsPressed = True Case "+/-" If mstrDisplay <> "" Then If Left$(mstrDisplay, 1) = "-" Then mstrDisplay = Right$(mstrDisplay, 2) Else mstrDisplay = "-" & mstrDisplay End If End If Case "Backspace" If Val(mstrDisplay) <> 0 Then mstrDisplay = Left$(mstrDisplay, Len(mstrDisplay) - 1) mdblResult = Val(mstrDisplay) End If Case "CE" mstrDisplay = "" Case "C" mstrDisplay = "" mdblResult = 0 mdblSavedNumber = 0 Case "1/x" If Val(mstrDisplay) = 0 Then
mstrDisplay = "ERROR" Else mdblResult = Val(mstrDisplay) mdblResult = 1 / mdblResult mstrDisplay = Format$(mdblResult) End If Case "sqrt" If Val(mstrDisplay) < 0 Then mstrDisplay = "ERROR" Else mdblResult = Val(mstrDisplay) mdblResult = Sqr(mdblResult) mstrDisplay = Format$(mdblResult) End If End Select
If mstrDisplay = "" Then lblDisplay = "0." Else mstrDot = IIf(InStr(mstrDisplay, ".") > 0, "", ".") lblDisplay = mstrDisplay & mstrDot If Left$(lblDisplay, 1) = "0" Then lblDisplay = Mid$(lblDisplay, 2) End If End If
End Sub