Altaf Patni
asked on
How to Calculate
Hi i want make a calculator, using visual basic 6.0
> 2 textboxes and 1 command button
in first textbox input will be like this 180.25*10-26+400/2 (etc...)
and answer will be on second text box on command button Clicked
How can i do this
please assist me
> 2 textboxes and 1 command button
in first textbox input will be like this 180.25*10-26+400/2 (etc...)
and answer will be on second text box on command button Clicked
How can i do this
please assist me
ASKER
Thanks for reply
But its giving me error
compile error : user defined type not defined
and highlighted on
ScriptEngine As New MSScriptControl.ScriptCont rolClass
Private Sub Command1_Click()
Dim ScriptEngine As New MSScriptControl.ScriptCont rolClass
ScriptEngine.Language = "VBScript"
Dim problem As String
problem = Text1.Text
Dim answer As String
answer = ScriptEngine.Eval(problem)
MessageBox.Show (answer)
End Sub
But its giving me error
compile error : user defined type not defined
and highlighted on
ScriptEngine As New MSScriptControl.ScriptCont
Private Sub Command1_Click()
Dim ScriptEngine As New MSScriptControl.ScriptCont
ScriptEngine.Language = "VBScript"
Dim problem As String
problem = Text1.Text
Dim answer As String
answer = ScriptEngine.Eval(problem)
MessageBox.Show (answer)
End Sub
Right...as stated in the linked answer, you need to add a REFERENCE to the Microsoft Script Control 1.0.
ASKER
Sir
I already added
Microsoft Script Control 1.0.
*Haven't code in VB6 in literally years...
Try it like this:
Dim ScriptEngine As New ScriptControl
Or maybe:
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
Try it like this:
Dim ScriptEngine As New ScriptControl
Or maybe:
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
ASKER
Compile Error
Invalid use of new keyword
Highlighted on ScriptEngine As New ScriptControl
and when i am using
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
Highlighted on New ScriptControl
Invalid use of new keyword
Highlighted on ScriptEngine As New ScriptControl
and when i am using
Dim ScriptEngine As ScriptControl
Set ScriptEngine = New ScriptControl
Highlighted on New ScriptControl
You could just add the Script Control directly to your form like any other control:
http://support.microsoft.com/kb/184740
http://support.microsoft.com/kb/184740
ASKER
sir
Getting Run Time Error '424'
Object Required
and on debug highlighted to ScriptEngine.Language = "VBScript"
Using following code
With ScriptControl1
ScriptEngine.Language = "VBScript"
Dim problem As String
problem = Text1.Text
Dim answer As String
answer = ScriptEngine.Eval(problem)
MessageBox.Show (answer)
End With
Getting Run Time Error '424'
Object Required
and on debug highlighted to ScriptEngine.Language = "VBScript"
Using following code
With ScriptControl1
ScriptEngine.Language = "VBScript"
Dim problem As String
problem = Text1.Text
Dim answer As String
answer = ScriptEngine.Eval(problem)
MessageBox.Show (answer)
End With
"With ScriptControl1"
Your control is called ScriptControl1.
...so change all "ScriptEngine" to "ScriptControl1".
Your control is called ScriptControl1.
...so change all "ScriptEngine" to "ScriptControl1".
ASKER
Getting Wrong Answer
Private Sub Command1_Click()
Text2.Text = ""
With ScriptControl1
ScriptControl1.Language = "VBScript"
Dim problem As String
problem = Text1.Text
Dim answer As String
answer = ScriptControl1.Eval(proble
Text2.Text = answer
End With
End Sub
input is in text one
150+150+150*3-100
and aswer should be 1250 instead of 650
How are you getting 1250?
That would be interpreted as:
150+150+(150*3)-100
150+150+450-100
650
In the absence of parenthesis, Multiplication/Division is always calculated before Addition/Subtraction.
That would be interpreted as:
150+150+(150*3)-100
150+150+450-100
650
In the absence of parenthesis, Multiplication/Division is always calculated before Addition/Subtraction.
ASKER
oh ok but sir
i want it like that
150+150+150*3-100 = 1250
instead of 650
then you need to add parenthesis to force the addition to occur before the multiplication:
(150+150+150)*3-100 = 1250
(150+150+150)*3-100 = 1250
See:
http://msdn.microsoft.com/en-us/library/6s7zy3d1(VS.85).aspx
"When multiplication and division occur together in an expression, each operation is evaluated as it occurs from left to right. When addition and subtraction occur together in an expression, each operation is evaluated in order of appearance from left to right. Parentheses can be used to override the order of precedence and force some parts of an expression to be evaluated before others. Operations within parentheses are always performed before those outside. Within parentheses, however, operator precedence is maintained."
http://msdn.microsoft.com/en-us/library/6s7zy3d1(VS.85).aspx
"When multiplication and division occur together in an expression, each operation is evaluated as it occurs from left to right. When addition and subtraction occur together in an expression, each operation is evaluated in order of appearance from left to right. Parentheses can be used to override the order of precedence and force some parts of an expression to be evaluated before others. Operations within parentheses are always performed before those outside. Within parentheses, however, operator precedence is maintained."
ASKER
Please show me sir how to do that
Are you kidding me?.... =\
Place this:
(150+150+150)*3-100
into your Text1 control and see what the answer is.
Place this:
(150+150+150)*3-100
into your Text1 control and see what the answer is.
Please read:
http://en.wikipedia.org/wiki/Order_of_operations
http://en.wikipedia.org/wiki/Order_of_operations
ASKER
No Sir I am Not kidding
your solution is absolutely correct
but my requirement is not 650 is 1250
so is there any way to remove operator ( ) and calculate complete line
ASKER
i am gonna use only 4 following operators
+ - * /
+ - * /
How do you know the answer is 1250?
mlmcc
mlmcc
If you want to use a custom precedence for operators (without parenthesis) then you can't use the Script Control.
You'd either have to use a different canned control or write your own lexical parser from scratch.
Can you give more details about how this is going to be used?
You'd either have to use a different canned control or write your own lexical parser from scratch.
Can you give more details about how this is going to be used?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Sir Thats it
Word to word
A simple expression evaluator by Francesco Balena
Thank you So much Sir
https://www.experts-exchange.com/questions/24624683/How-to-convert-a-string-formula-into-an-int.html#25014454