>M1 = CREATEOBJECT("cALC") >M1.sHOW(1) > > > >************************************************** >*-- Class: calc >*-- ParentClass: form >*-- BaseClass: form >*-- Time Stamp: 08/06/05 15:31:14 >* >DEFINE CLASS calc AS form > > Top = 0 > Left = 0 > Height = 344 > Width = 189 > DoCreate = .T. > ShowTips = .T. > BorderStyle = 1 > Caption = "Calculator" > Closable = .F. > FontSize = 8 > MaxButton = .F. > MinButton = .F. > KeyPreview = .T. > BackColor = RGB(116,116,116) > memoval = 0 > result = 0 > znak = ("") > br_rows = 0 > Name = "calc" > blockade = .F. > fl_znak = .F. > memoclick = .F. > > ADD OBJECT b7 AS commandbutton WITH ; > Top = 215, ; > Left = 40, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "7", ; > TabIndex = 10, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B7" > > > ADD OBJECT b8 AS commandbutton WITH ; > Top = 215, ; > Left = 68, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "8", ; > TabIndex = 11, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B8" > > > ADD OBJECT b9 AS commandbutton WITH ; > Top = 215, ; > Left = 96, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "9", ; > TabIndex = 12, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B9" > > > ADD OBJECT b4 AS commandbutton WITH ; > Top = 241, ; > Left = 40, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "4", ; > TabIndex = 7, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B4" > > > ADD OBJECT b5 AS commandbutton WITH ; > Top = 241, ; > Left = 68, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "5", ; > TabIndex = 8, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B5" > > > ADD OBJECT b6 AS commandbutton WITH ; > Top = 241, ; > Left = 96, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "6", ; > TabIndex = 9, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B6" > > > ADD OBJECT b1 AS commandbutton WITH ; > Top = 267, ; > Left = 40, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "1", ; > TabIndex = 4, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B1" > > > ADD OBJECT b2 AS commandbutton WITH ; > Top = 267, ; > Left = 68, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "2", ; > TabIndex = 5, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B2" > > > ADD OBJECT b3 AS commandbutton WITH ; > Top = 267, ; > Left = 96, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "3", ; > TabIndex = 6, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B3" > > > ADD OBJECT b0 AS commandbutton WITH ; > Top = 292, ; > Left = 40, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "0", ; > TabIndex = 1, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B0" > > > ADD OBJECT b00 AS commandbutton WITH ; > Top = 292, ; > Left = 68, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "00", ; > TabIndex = 2, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "B00" > > > ADD OBJECT plus AS commandbutton WITH ; > Top = 267, ; > Left = 129, ; > Height = 50, ; > Width = 25, ; > Caption = "+", ; > TabIndex = 13, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "PLUS" > > > ADD OBJECT minus AS commandbutton WITH ; > Top = 241, ; > Left = 129, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "-", ; > TabIndex = 15, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "MINUS" > > > ADD OBJECT multi AS commandbutton WITH ; > Top = 215, ; > Left = 129, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "*", ; > TabIndex = 17, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "MULTI" > > > ADD OBJECT divide AS commandbutton WITH ; > Top = 241, ; > Left = 157, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "/", ; > TabIndex = 16, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "DIVIDE" > > > ADD OBJECT memorecall AS commandbutton WITH ; > Top = 189, ; > Left = 40, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "MR", ; > TabIndex = 23, ; > SpecialEffect = 2, ; > Name = "MEMORECALL" > > > ADD OBJECT memominus AS commandbutton WITH ; > Top = 189, ; > Left = 68, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "M-", ; > TabIndex = 21, ; > SpecialEffect = 2, ; > Name = "MEMOMINUS" > > > ADD OBJECT memoplus AS commandbutton WITH ; > Top = 189, ; > Left = 96, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "M+", ; > TabIndex = 22, ; > SpecialEffect = 2, ; > Name = "MEMOPLUS" > > > ADD OBJECT percent AS commandbutton WITH ; > Top = 189, ; > Left = 157, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "%", ; > TabIndex = 19, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "PERCENT" > > > ADD OBJECT bpoint AS commandbutton WITH ; > Top = 292, ; > Left = 96, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = ".", ; > TabIndex = 3, ; > SpecialEffect = 2, ; > ForeColor = RGB(0,0,255), ; > Name = "BPOINT" > > > ADD OBJECT ac AS commandbutton WITH ; > Top = 189, ; > Left = 6, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "AC", ; > TabIndex = 27, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,0), ; > Name = "AC" > > > ADD OBJECT off AS commandbutton WITH ; > Top = 215, ; > Left = 6, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "OFF", ; > TabIndex = 26, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,0), ; > Name = "OFF" > > > ADD OBJECT back AS commandbutton WITH ; > Top = 241, ; > Left = 6, ; > Height = 25, ; > Width = 25, ; > FontName = "Symbol", ; > FontSize = 8, ; > Caption = CHR(172), ; > TabIndex = 25, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,0), ; > Name = "BACK" > > > ADD OBJECT bc AS commandbutton WITH ; > Top = 267, ; > Left = 6, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "C", ; > TabIndex = 24, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,0), ; > Name = "BC" > > > ADD OBJECT equal AS commandbutton WITH ; > Top = 267, ; > Left = 157, ; > Height = 50, ; > Width = 25, ; > Caption = (ALLTRIM("=")), ; > TabIndex = 14, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "EQUAL" > > > ADD OBJECT plusminus AS commandbutton WITH ; > Top = 189, ; > Left = 129, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "+/-", ; > TabIndex = 20, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "PLUSMINUS" > > > ADD OBJECT sqrt AS commandbutton WITH ; > Top = 215, ; > Left = 157, ; > Height = 25, ; > Width = 25, ; > FontName = "Symbol", ; > FontSize = 8, ; > Caption = CHR(214), ; > TabIndex = 18, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,255), ; > Name = "SQRT" > > > ADD OBJECT enter AS textbox WITH ; > Alignment = 1, ; > Enabled = .F., ; > Height = 22, ; > Left = 40, ; > TabIndex = 29, ; > Top = 154, ; > Width = 142, ; > DisabledBackColor = RGB(170,170,255), ; > DisabledForeColor = RGB(0,0,0), ; > Name = "Enter" > > > ADD OBJECT text1 AS textbox WITH ; > FontSize = 8, ; > Alignment = 2, ; > Enabled = .F., ; > Height = 22, ; > Left = 6, ; > TabIndex = 30, ; > Top = 154, ; > Width = 27, ; > DisabledBackColor = RGB(192,192,192), ; > DisabledForeColor = RGB(0,0,0), ; > Name = "Text1" > > > ADD OBJECT lenta AS editbox WITH ; > Alignment = 1, ; > Height = 136, ; > Left = 6, ; > ReadOnly = .T., ; > ScrollBars = 0, ; > TabStop = .F., ; > Top = 11, ; > Width = 177, ; > DisabledBackColor = RGB(170,170,255), ; > DisabledForeColor = RGB(0,0,0), ; > Name = "Lenta" > > > ADD OBJECT fillbutt AS commandbutton WITH ; > Top = 292, ; > Left = 6, ; > Height = 25, ; > Width = 25, ; > FontSize = 8, ; > Caption = "F", ; > TabIndex = 24, ; > SpecialEffect = 2, ; > ForeColor = RGB(255,0,0), ; > Name = "FILLBUTT" > > PROCEDURE calculate > SET EXACT ON > DO CASE > CASE thisform.Znak = "*" > thisform.Result = thisform.Result * VAL(thisform.Enter.Value) > CASE thisform.Znak = "+" > thisform.Result = thisform.Result + VAL(thisform.Enter.Value) > CASE thisform.Znak = "-" > thisform.Result = thisform.Result - VAL(thisform.Enter.Value) > CASE thisform.Znak = "/" > thisform.Result = thisform.Result / VAL(thisform.Enter.Value) > CASE thisform.Znak = "*%" > thisform.Result = thisform.Result * VAL(thisform.Enter.Value) / 100 > CASE thisform.Znak = "+%" > thisform.Result = thisform.Result + (thisform.Result*VAL(thisform.Enter.Value) / 100) > CASE thisform.Znak = "-%" > thisform.Result = thisform.Result - (thisform.Result*VAL(thisform.Enter.Value) / 100) > CASE thisform.Znak = "/%" > thisform.Result = thisform.Result / VAL(thisform.Enter.Value) / 100 > ENDCASE > > asd = ALLTRIM(STRTRAN(STR(thisform.Result,16,7),"0"," ")) > m_point = AT(".",asd) > m_point = IIF(m_point=LEN(asd),0,LEN(asd)-m_point) > thisform.Enter.Value = ALLTRIM(STR(thisform.Result,16,m_point)) > thisform.fl_znak = .f. > ENDPROC > > > PROCEDURE makelenta > #DEFINE CRLF CHR(13)+CHR(10) > LPARAMETERS m_znak > > LOCAL m_sels,m_len > IF thisform.br_rows = 0 > thisform.Lenta.Value = ALLTRIM(thisform.Enter.Value)+" "+m_znak > ELSE > thisform.Lenta.Value = thisform.Lenta.Value + CRLF + ALLTRIM(thisform.Enter.Value)+" "+m_znak > ENDIF > thisform.br_rows = thisform.br_rows + 1 > IF thisform.br_rows > 7 > thisform.Lenta.ScrollBars = 2 > ENDIF > m_len = LEN(thisform.Lenta.Value) > m_sels = RAT(CHR(10),thisform.Lenta.Value) > thisform.Lenta.SelStart = m_sels+1 > thisform.Lenta.SelLength = m_len - m_sels > ENDPROC > > > > PROCEDURE KeyPress > LPARAMETERS nKeyCode, nShift > LOCAL oButton > oButton = "" > DO CASE > CASE nKeyCode < 0 > CASE nKeyCode = 27 .AND. nShift = 0 && ESC > oButton = "thisform.OFF" > CASE BETWEEN(nKeyCode, 48, 57) .AND. nShift = 0 && press some digit > oButton = "thisform.B"+CHR(nKeyCode) > CASE INLIST(nKeyCode, 44, 46) .AND. nShift = 0 && Decimal point (no matter if it is point or comma > oButton = "thisform.BPOINT" > CASE nKeyCode = 127 .AND. nShift = 0 && BackSpace > oButton = "thisform.BACK" > CASE nKeyCode = 42 .AND. nShift = 0 && * > oButton = "thisform.MULTI" > CASE nKeyCode = 47 .AND. nShift = 0 && / > oButton = "thisform.DIVIDE" > CASE nKeyCode = 45 .AND. nShift = 0 && - > oButton = "thisform.MINUS" > CASE nKeyCode = 43 .AND. nShift = 0 && + > oButton = "thisform.PLUS" > CASE INLIST(nKeyCode, 13, 61) .AND. nShift = 0 && Enter or = > NODEFAULT > oButton = "thisform.EQUAL" > CASE UPPER(CHR(nKeyCode)) == "C" .AND. nShift = 0 && C (Clear) > oButton = "thisform.BC" > CASE UPPER(CHR(nKeyCode)) == "A" .AND. nShift = 0 && A (ll Clear) > oButton = "thisform.AC" > CASE UPPER(CHR(nKeyCode)) == "O" .AND. nShift = 0 && O (off) > oButton = "thisform.OFF" > CASE UPPER(CHR(nKeyCode)) == "F" .AND. nShift = 0 && F (Copy to Clipboard) > oButton = "thisform.FILLBUTT" > CASE nKeyCode = 37 && % (Percent pressed) > oButton = "thisform.PERCENT" > CASE nKeyCode = 92 .AND. nShift = 0 && \ (SQRT) > oButton = "thisform.SQRT" > CASE nKeyCode = 43 .AND. nShift # 0 && Shift + (change the sign) > oButton = "thisform.PLUSMINUS" > ENDCASE > IF NOT EMPTY(oButton) > &oButton..SetFocus() > &oButton..Click() > ENDIF > ENDPROC > > > PROCEDURE Init > LPARAMETERS m_top,m_left > this.Top = IIF(TYPE("m_top") # "N" ,0,m_top) > this.Left = IIF(TYPE("m_left") # "N",0,m_left) > ENDPROC > > PROCEDURE PressDidit(lcDigit) > thisform.MemoClick = .f. > IF .NOT. thisform.Blockade > IF .NOT. thisform.fl_znak > thisform.Enter.Value = lcDigit > thisform.fl_znak = .t. > ELSE > IF LEN(thisform.Enter.Value) < 16 > thisform.Enter.Value = thisform.Enter.Value + lcDigit > ENDIF > ENDIF > ENDIF > > PROCEDURE b7.Click > thisform.PressDidit("7") > ENDPROC > > > PROCEDURE b8.Click > thisform.PressDidit("8") > ENDPROC > > > PROCEDURE b9.Click > thisform.PressDidit("9") > ENDPROC > > > PROCEDURE b4.Click > thisform.PressDidit("4") > ENDPROC > > > PROCEDURE b5.Click > thisform.PressDidit("5") > ENDPROC > > > PROCEDURE b6.Click > thisform.PressDidit("6") > ENDPROC > > > PROCEDURE b1.Click > thisform.PressDidit("1") > ENDPROC > > > PROCEDURE b2.Click > thisform.PressDidit("2") > ENDPROC > > > PROCEDURE b3.Click > thisform.PressDidit("3") > ENDPROC > > > PROCEDURE b0.Click > thisform.PressDidit("0") > ENDPROC > > > PROCEDURE b00.Click > thisform.PressDidit("00") > ENDPROC > > PROCEDURE SignPress(lcSign) > IF .NOT. thisform.Blockade > thisform.MemoClick = .f. > thisform.MakeLenta(lcSign) > IF EMPTY(thisform.Znak) > thisform.Result = VAL(thisform.Enter.Value) > ELSE > ThisForm.Calculate() > ENDIF > thisform.Znak = lcSign > thisform.fl_znak = .f. > ENDIF > RETURN > > PROCEDURE plus.Click > thisform.SignPress("+") > ENDPROC > > > PROCEDURE minus.Click > thisform.SignPress("-") > ENDPROC > > > PROCEDURE multi.Click > thisform.SignPress("*") > ENDPROC > > > PROCEDURE divide.Click > thisform.SignPress("/") > ENDPROC > > > PROCEDURE memorecall.Click > LOCAL asd, m_point > IF .NOT. thisform.Blockade > IF thisform.MemoClick > thisform.Text1.Value ="" > thisform.MemoVal = 0 > thisform.MemoClick = .f. > ELSE > IF ROUND(thisform.MemoVal,14) = INT(thisform.MemoVal) > m_point = 0 > ELSE > asd = ALLTRIM(STRTRAN(STR(thisform.MemoVal,16,7),"0"," ")) > m_point = AT(".",asd) > m_point = IIF(m_point=LEN(asd),0,LEN(asd)-m_point) > ENDIF > thisform.Enter.Value = ALLTRIM(STR(thisform.MemoVal,16,m_point)) > thisform.MemoClick = .t. > ENDIF > thisform.fl_znak = .f. > ENDIF > ENDPROC > > > PROCEDURE memominus.Click > IF .NOT. thisform.Blockade > IF .NOT. EMPTY(thisform.Znak) > thisform.Calculate() > thisform.MemoVal = thisform.MemoVal - thisform.Result > ELSE > thisform.MemoVal = thisform.MemoVal - thisform.Result > ENDIF > thisform.Text1.Value = "M" > thisform.MemoClick = .f. > thisform.fl_znak = .f. > ENDIF > ENDPROC > > > PROCEDURE memoplus.Click > IF .NOT. thisform.Blockade > IF .NOT. EMPTY(thisform.Znak) > thisform.Calculate() > thisform.MemoVal = thisform.MemoVal + thisform.Result > ELSE > thisform.MemoVal = thisform.MemoVal + thisform.Result > ENDIF > thisform.Text1.Value = "M" > thisform.MemoClick = .f. > thisform.fl_znak = .f. > ENDIF > ENDPROC > > > PROCEDURE percent.Click > IF .NOT. thisform.Blockade > thisform.MemoClick = .f. > thisform.MakeLenta("%") > IF .NOT. EMPTY(Thisform.Znak) > thisform.Znak = thisform.Znak + "%" > ThisForm.Calculate() > ENDIF > thisform.MakeLenta("=") > thisform.Znak = "" > thisform.fl_znak = .f. > ENDIF > ENDPROC > > > PROCEDURE bpoint.Click > thisform.MemoClick = .f. > IF EMPTY(AT(".",thisform.Enter.Value)) .OR.; > .NOT. thisform.fl_znak > IF EMPTY(thisform.Enter.Value) .OR.; > .NOT. thisform.fl_znak > thisform.Enter.Value = "0." > thisform.fl_znak = .t. > ELSE > thisform.Enter.Value = thisform.Enter.Value + "." > ENDIF > ENDIF > ENDPROC > > > PROCEDURE ac.Click > thisform.Enter.Value = "" > thisform.Result = 0 > thisform.Blockade = .f. > thisform.fl_znak = .f. > thisform.Znak = .f. > thisform.Text1.DisabledForeColor = RGB(0,0,0) > thisform.Text1.Value = "" > thisform.Lenta.Value = "" > thisform.br_rows = 0 > thisform.MemoVal = 0 > thisform.Lenta.ScrollBars = 0 > thisform.MemoClick = .f. > ENDPROC > > > PROCEDURE off.Click > thisform.Hide() > ENDPROC > > > PROCEDURE back.Click > LOCAL m_len > m_len = LEN(thisform.Enter.Value) > thisform.MemoClick = .f. > IF m_len = 1 > thisform.Enter.Value = "" > ELSE > thisform.Enter.Value = LEFT(thisform.Enter.Value,LEN(thisform.Enter.Value)-1) > ENDIF > ENDPROC > > > PROCEDURE bc.Click > thisform.Enter.Value = "" > thisform.Blockade = .f. > thisform.fl_znak = .f. > thisform.MemoClick = .f. > IF thisform.Text1.Value = "E" > thisform.Text1.DisabledForeColor = RGB(0,0,0) > thisform.Text1.Value = IIF(EMPTY(thisform.MemoVal),"","M") > ENDIF > ENDPROC > > > PROCEDURE equal.Click > IF .NOT. EMPTY(thisform.Znak) .AND. .NOT. thisform.Blockade > thisform.MemoClick = .f. > thisform.MakeLenta("=") > IF thisform.fl_znak .OR. .NOT. EMPTY(thisform.Znak) > ThisForm.Calculate() > ENDIF > thisform.MakeLenta("T"+CHR(13)+CHR(10)) > thisform.Znak = "" > ENDIF > ENDPROC > > > PROCEDURE plusminus.Click > LOCAL m_point,m_len > m_len = LEN(thisform.Enter.Value) > m_point = AT(".",thisform.Enter.Value) > m_point = IIF(m_point#0,m_len-m_point+IIF(VAL(thisform.Enter.Value)<0,0,1),0) > thisform.MemoClick = .f. > IF .NOT. EMPTY(VAL(thisform.Enter.Value)) > thisform.Enter.Value = ALLTRIM(STR(VAL(thisform.Enter.Value) * (-1),m_len+1,m_point)) > ENDIF > ENDPROC > > > PROCEDURE sqrt.Click > thisform.MemoClick = .f. > thisform.MakeLenta("SQRT") > thisform.Result = SQRT(VAL(thisform.Enter.Value)) > thisform.Enter.Value = ALLTRIM(STR(thisform.Result,19,2)) > thisform.fl_znak = .f. > thisform.MakeLenta("T") > ENDPROC > > > PROCEDURE fillbutt.Click > IF .NOT. thisform.Blockade > thisform.MemoClick = .f. > IF EMPTY(thisform.Znak) > thisform.Result = VAL(thisform.Enter.Value) > ELSE > ThisForm.Calculate() > ENDIF > thisform.Znak = "" > thisform.fl_znak = .f. > asd = ALLTRIM(STRTRAN(STR(thisform.Result,16,7),"0"," ")) > m_point = AT(".",asd) > m_point = IIF(m_point=LEN(asd),0,LEN(asd)-m_point) > _CLIPTEXT = ALLTRIM(STR(thisform.Result,16,m_point)) > ENDIF > thisform.Off.Click() > ENDPROC > >ENDDEFINE >