Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Calculator
Message
 
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Titre:
Versions des environnements
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP SP3
Network:
Windows XP
Database:
Visual FoxPro
Application:
Desktop
Divers
Thread ID:
01597934
Message ID:
01598917
Vues:
76
J'aime (1)
>I am confused about the Windows calculator. I would like to employ it to return a result back to a text box that had focus before the calculator was invoked. I believe I want to use the dblclick method to invoke the calculator. Where I am confused is that the window that pops up is not modal. I want the window to close and be able to populate the value property of the text box that had focus. So what event takes place when I close the window?
>
>To me, the VFP explanation was too vague for _calvalue and _calcmem.
>
>Thank you in advance.

It's fairly easy to build your own calculator. I made one that is included in my applications. It also is more handy than the normal calculator because it allows you to enter multiple amounts and edit them as you go, and also you can enter complete formulas.
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
Christian Isberner
Software Consultant
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform