假如程序已经生成exe文件,有一个文本框 ,我输入 command1.height=800
想通过这个语句来调整command1控件的属性height=800有什么方法可行吗?我一直找不到方法。就是不知有没有什么办法在工程生成exe文件后还能让工程读懂vb语句。像数据库查询语句还有一个execute命令可以运行如“select * from aaa” 等等形式的语句,但执行vb原码好像没有接口,不知高手有没有办法。
有的朋友说可以用翻译软件的原理,但那翻译方式是带词库,当输入口得到一个语句或词时就查词库再将翻译结果用一种方式显示出来。而我的意思是让VB生成的EXE文件能读懂VB语句,即在程序内部不预置任何扫描类的条件,就用一个方法来运行输入的VB语句。如设置一个文本框为VB语句的入口,(生成好的EXE文件)将VB原代码如"command1.left=450"填在文本框,再点按一个回车就解释运行这个语句,将command1控件的左边位置移到450的地方。应当能行,这属于解释再运行方式,只是这种方法可能并不公开,不知各位有何良策。
想通过这个语句来调整command1控件的属性height=800有什么方法可行吗?我一直找不到方法。就是不知有没有什么办法在工程生成exe文件后还能让工程读懂vb语句。像数据库查询语句还有一个execute命令可以运行如“select * from aaa” 等等形式的语句,但执行vb原码好像没有接口,不知高手有没有办法。
有的朋友说可以用翻译软件的原理,但那翻译方式是带词库,当输入口得到一个语句或词时就查词库再将翻译结果用一种方式显示出来。而我的意思是让VB生成的EXE文件能读懂VB语句,即在程序内部不预置任何扫描类的条件,就用一个方法来运行输入的VB语句。如设置一个文本框为VB语句的入口,(生成好的EXE文件)将VB原代码如"command1.left=450"填在文本框,再点按一个回车就解释运行这个语句,将command1控件的左边位置移到450的地方。应当能行,这属于解释再运行方式,只是这种方法可能并不公开,不知各位有何良策。
'调用 ExecuteCode 过程strCode为你要执行的语句!Private Function GetObjByName(ByVal strName As String) As Object
Dim obj As Object
For Each obj In Me.Controls
If obj.Name = strName Then
Set GetObjByName = obj
Exit Function
End If
Next
End FunctionPrivate Function GetObjName(ByVal strCode As String) As String
Dim lP As Long
GetObjName = ""
lP = InStr(1, strCode, ".")
If lP > 0 Then
GetObjName = Mid(strCode, 1, lP - 1)
Exit Function
End If
End FunctionPrivate Function GetObjPropertyName(ByVal strCode As String) As String
Dim lP1 As Long, lP2 As Long
GetObjPropertyName = ""
lP1 = InStr(1, strCode, ".")
If lP1 > 0 Then
lP2 = InStr(1, strCode, "=")
If lP2 > 0 And lP2 > lP1 Then
GetObjPropertyName = Mid(strCode, lP1 + 1, lP2 - lP1 - 1)
Exit Function
End If
End If
End FunctionPrivate Function GetObjPropertyValue(ByVal strCode As String) As String
Dim lP As Long
GetObjPropertyValue = ""
lP = InStr(1, strCode, "=")
If lP > 0 Then
GetObjPropertyValue = Mid(strCode, lP + 1)
Exit Function
End If
End FunctionPrivate Sub ExecuteCode(ByVal strCode As String)
Dim obj As Object
Dim strObjName As String
Dim strObjPName As String
Dim strObjPValue As String
strObjName = GetObjName(strCode)
strObjPName = GetObjPropertyName(strCode)
strObjPValue = GetObjPropertyValue(strCode)
Set obj = GetObjByName(strObjName)
Call SetObjProperty(obj, strObjPName, strObjPValue)
End SubPrivate Sub SetObjProperty(obj As Object, ByVal strPN As String, ByVal strPV As String)
Select Case LCase(strPN)
Case "left"
obj.Left = strPV
Case "top"
obj.Top = strPV
Case "width"
obj.Width = strPV
Case "height"
obj.Height = strPV
Case "text"
obj.Text = strPV
Case "backcolor"
obj.BackColor = strPV
'还有其它属性,你自己添吧,太多了!
End Select
End Sub
command1.left=val(text1)
行了吧
你可以使用microsoft script Control控件 ,简单示例:新建工程
Private Sub Command1_Click()
ScriptControl1.Run "B1_click"
End SubPrivate Sub Command2_Click()ScriptControl1.AddCode Text1.Text
ScriptControl1.Run "Main"
End SubPrivate Sub Form_Load()
Label1.Caption = "用下面的 picturebox 扮演 form1做演示"
Label4.Caption = "要执行的代码"
Text1.Text = "Sub Main()" & vbCrLf
Text1.Text = Text1.Text & "Form1.BackColor = vbWhite" & vbCrLf
Text1.Text = Text1.Text & "End Sub" & vbCrLf
Text1.Text = Text1.Text & "" & vbCrLf
Text1.Text = Text1.Text & "Sub B1_click()" & vbCrLf
Text1.Text = Text1.Text & "b1.Caption = " & Chr(34) & "clicked" & Chr(34) & vbCrLf
Text1.Text = Text1.Text & "MsgBox " & Chr(34) & "B1CLICKED" & Chr(34) & vbCrLfScriptControl1.AddObject "form1", usrfrm
ScriptControl1.AddObject "b1", Command1
End Sub
写的可能不大清楚如果不明白给我发消息我给你例子代码
控件文件名为msscript.ocx
另外我上面的代码有误你只要了解他的机制就可以
参考
SCRIPTEX.EXE Uses the ScriptControl with Visual Basic(msdn的例子)
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q189/4/84.asp&NoWebContent=1
HOWTO: Call Functions Using the Script Control(说明及例子)
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q184/7/40.asp&NoWebContent=1
使用Microsoft script control 是一个简单的好方法!
Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As LongPublic Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End FunctionPrivate Sub Command1_Click()
ExecuteLine "msgbox (1+2)*3/4"
ExecuteLine "dim a as integer"
ExecuteLine "a = 10"
ExecuteLine "Print a"
ExecuteLine "form2.show"
End Sub看看这个能不能达到你的要求~~