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