IF TYPE("_SCREEN.Calculators") <> "O" _SCREEN.AddObject("Calculators","Collection") ENDIF * LOCAL loCalculator loCalculator = CREATEOBJECT("Calculator") IF VARTYPE(loCalculator) = "O" loCalculator.Show() _SCREEN.Calculators.Add(loCalculator) ENDIF * DEFINE CLASS Calculator AS FORM * HEIGHT = 300 WIDTH = 362 Desktop = .T. Autocenter = .T. Borderstyle = 3 Backcolor = RGB(255,255,255) Desktop = .T. Maxbutton = .F. Showwindow = 2 Caption = "Calculator" Icon = "" SHOWTIPS = .T. KEYPREVIEW = .T. MINWIDTH = 362 MAXWIDTH = 362 MINHEIGHT = 300 SecurityID = 910000 HelpContextID = 910000 KEYPREVIEW = .T. * nm = 0 * ADD OBJECT imgBackground AS IMAGE WITH ; Picture = "YourBackground.JPG", ; TOP = -1, ; LEFT = -1, ; Visible = .F. * ADD OBJECT txtInput AS EDITBOX WITH ; LEFT = 6, ; WIDTH = 214, ; HEIGHT = 245, ; TOP = 12, ; FONTSIZE = 12, ; FONTNAME = "Courier New" * ADD OBJECT txtOutput AS TEXTBOX WITH ; LEFT = 6, ; WIDTH = 214, ; HEIGHT = 27, ; TOP = 267, ; FONTSIZE = 12, ; FONTNAME = "Courier New", ; VALUE = 0 * ADD OBJECT cmdCE AS cmdClick WITH ; LEFT = 228, ; TOP = 168, ; FORECOLOR = RGB(255,0,0), ; CAPTION = "CE" * ADD OBJECT cmdMC AS cmdClick WITH ; LEFT = 270, ; TOP = 168, ; CAPTION = "MC" * ADD OBJECT cmdMR AS cmdClick WITH ; LEFT = 228, ; TOP = 196, ; CAPTION = "MR" * ADD OBJECT cmdMPlus AS cmdClick WITH ; LEFT = 270, ; TOP = 196, ; CAPTION = "M+" * ADD OBJECT cmdMS AS cmdClick WITH ; LEFT = 312, ; TOP = 196, ; CAPTION = "MS" * ADD OBJECT cmdCopy AS cmdClick WITH ; LEFT = 228, ; TOP = 267, ; CAPTION = "", ; PICTURE = "Copy.BMP", ; TOOLTIPTEXT = "Copy", ; CAPTION = "Copy" * ADD OBJECT cmdPrint AS cmdClick WITH ; LEFT = 270, ; TOP = 267, ; CAPTION = "", ; PICTURE = "Print.BMP", ; TOOLTIPTEXT = "Print", ; Caption = "Print" * ADD OBJECT cmdPin AS cmdClick WITH ; LEFT = 312, ; TOP = 267, ; CAPTION = "", ; PICTURE = "Nail.BMP", ; TOOLTIPTEXT = "On Top" * ADD OBJECT cntShape AS SHAPE WITH ; LEFT = 228, ; TOP = 16, ; WIDTH = 126, ; HEIGHT = 80, ; BACKSTYLE = 0, ; BORDERSTYLE = 0, ; MOUSEPOINTER = 15 * PROCEDURE KeyPress LPARAMETERS nKeyAci, nShiftAltCtrl IF nKeyAci = 27 THIS.RELEASE() NODEFAULT ENDIF ENDPROC * PROCEDURE ERROR LPARAMETERS tcMessage, tnLineNr, tvparameter NODEFAULT ENDPROC * PROCEDURE cntShape.INIT THIS.TOOLTIPTEXT = "Visit www.levelextreme.com" ENDPROC * PROCEDURE Resize WITH THIS STORE .HEIGHT -55 TO ; .txtInput.HEIGHT STORE .HEIGHT - 33 TO ; .txtOutput.TOP, ; .cmdCopy.TOP, ; .cmdPrint.TOP, ; .cmdPin.TOP ENDWITH ENDPROC * PROCEDURE doPin WITH THIS .AlwaysOnTop = .AlwaysOnTop = .F. .cmdPin.Picture = IIF(.AlwaysOnTop,"Nail2.BMP","Nail.BMP") ENDWITH ENDPROC * PROCEDURE doCalc * LOCAL lcCalc, lnResult, llError, lnLines, lcNumbers * lcNumbers = "0123456789)(" lcCalc = "" * WITH THIS *-- Create an array with the lines and check whether at the end *-- or at the beginning is a number. *-- If both are numbers, we add a plus sign there. * lnLines = ALINES(laLines,ALLTRIM(.txtInput.Value),.T.) * *-- First remove any empty lines. FOR lnNr = lnLines TO 1 STEP -1 IF EMPTY(lalines[lnNr]) ADEL(laLines,lnNr) IF ALEN(laLines) > 1 DIMENSION laLines[ALEN(laLines)-1] ELSE laLines[1] = "0" ENDIF ENDIF ENDFOR * lnLines = ALEN(laLines) * FOR lnNr = 1 TO lnLines - 1 IF RIGHT(laLines[lnNr],1) $ lcNumbers AND ; LEFT(laLines[lnNr+1],1) $ lcNumbers laLines[lnNr] = laLines[lnNr] + " + " ENDIF * IF !EMPTY(ALLTRIM(laLines[lnNr])) lcCalc = lcCalc + " " + laLines[lnNr] ENDIF * ENDFOR * lcCalc = lcCalc + " " + laLines[lnLines] * IF NOT RIGHT(lcCalc,1) $ lcNumbers lcCalc = LEFT(lcCalc,LEN(lcCalc)-1) ENDIF * TRY lnResult = EVALUATE(lcCalc) CATCH TO loError llError = .T. FINALLY ENDTRY * IF NOT llError AND VARTYPE(lnResult) == "N" .txtOutput.VALUE = lnResult ELSE .txtOutput.Value = 100/0 ENDIF ENDWITH * RETURN .T. * ENDPROC * PROCEDURE doCE WITH THIS .txtInput.Value = "" .txtOutput.Value = 0 ENDWITH ENDPROC * PROCEDURE doCopy _CLIPTEXT = TRANSFORM(THIS.txtOutput.VALUE) ENDPROC * PROCEDURE doMC THIS.nM = 0 ENDPROC * PROCEDURE doMPlus THIS.nm = THIS.nm + THIS.txtOutput.VALUE ENDPROC * PROCEDURE doMR WITH THIS IF .nm <> 0 lcTextBegin = LEFT(.txtInput.VALUE,.txtInput.SelStart) lcTextEnd = SUBSTR(.txtInput.VALUE,.txtInput.SelStart + 1) .txtInput.VALUE = lcTextBegin + TRANSFORM(.nm) + lcTextEnd .txtInput.SETFOCUS() ENDIF ENDWIT ENDPROC * PROCEDURE doMS THIS.nm = THIS.txtOutput.VALUE ENDPROC * PROCEDURE nm_ASSIGN LPARAMETERS vNewVal THIS.nM = m.vNewVal STORE THIS.nM <> 0.00 TO ; THIS.cmdMR.FontBold ENDPROC * PROCEDURE doPrint PRIVATE pcCalculation, pnResult pcCalculation = ALLTRIM(THIS.txtInput.Value) pnResult = THIS.txtOutput.Value CREATE CURSOR cuDummy (CField1 C(10)) APPEND BLANK REPORT FORM calc TO PRINTER NOCONSOLE USE IN cuDummy ENDPROC * PROCEDURE txtInput.Interactivechange THISFORM.DoCalc() ENDPROC * PROCEDURE cntShape.CLICK * LOCAL lpOperation, lpFile, lpParameters LOCAL hwnd, lpDirectory, nShowCmd * DECLARE INTEGER ShellExecute IN Shell32.dll ; INTEGER hwnd, STRING lpOperation, STRING lpFile, ; STRING lpParameters, STRING lpDirectory, ; INTEGER nShowCmd * lpOperation = "OPEN" lpFile = "http://www.levelextreme.com" lpParameters = "" hwnd = _SCREEN.hwnd lpDirectory = SPACE(200) nShowCmd = 1 * =ShellExecute(hwnd, lpOperation,lpFile,lpParameters,lpDirectory,nShowCmd) * CLEAR DLLS "ShellExecute" * RETURN .T. * ENDPROC ENDDEFINE * * * DEFINE CLASS cmdClick AS CommandButton WIDTH = 42 HEIGHT = 27 FONTSIZE = 8 FONTNAME = "Tahoma" * PROCEDURE CLICK EVALUATE("THISFORM."+"Do"+SUBSTR(THIS.NAME,4)+"()") ENDPROC * ENDDEFINE