VBS中如何添加窗体

ybxyl 2011-07-31 04:27:18
本人用一款叫 ansoft maxwell的 电磁场有限元计算软件 ,这个软件支持使用 VBS脚本 ,下面是这个软件一个脚本的代码 ,它的输入参数是用“Inputbox”函数传递进去的 ,本人想做一个界面 ,里面有文本框,在文本框里输入参数,从而替代原来脚本所使用的 “Inputbox”,不知道如何实现 ,想在这里问问大家,小弟先谢谢您的热心帮助了!


下面是这个脚本的源代码, 红色的部分,就是我要做个有文本框的界面的地方

Dim oAnsoftApp
Dim oDesktop
Dim oProject
Dim oDesign
Dim oEditor
Dim oModule
Set oAnsoftApp = CreateObject("AnsoftMaxwell.MaxwellScriptInterface")
Set oDesktop = oAnsoftApp.GetAppDesktop()
oDesktop.RestoreWindow
Set oProject = oDesktop.GetActiveProject()
Set oDesign = oProject.GetActiveDesign()
dim TimeSelect
dim TimeSelectSub
dim FileInc
Dim project_path
i = 0
j = 0
'find the directory where the vb script is located (Project Directory Location)
project_path = oProject.GetPath()
'Prompt User for Input Data
StartTimein = Inputbox("Enter the Starting Time (sec)" &chr(13) & "(as defined in Saved Fields)")
EndTimein = Inputbox("Enter the End Time (sec)" &chr(13) & "(as defined in Saved Fields)")
dtin = Inputbox("Enter the Time Step (sec)" &chr(13) & "(as defined in Saved Fields)")
NamedExpression = Inputbox("Enter the name of the Named Expression" &chr(13) & "(e.g. AverageLoss_1)")
TotalTimeSteps = (int(((EndTimein - StartTimein)/dtin)+1)*100)/100
TotalSteps_s = "FYI: The total number of Field Solutions used for Averaging is " & TotalTimeSteps &chr(13) &chr(13) & _
"Click OK to Continue, Hit Esc to interrupt script."
msgbox (TotalSteps_s)
StartTime=StartTimein*1e9 'Converts to ns for use in the Fields Calculator
EndTime=EndTimein*1e9
dt=dtin*1e9

Set oModule = oDesign.GetModule("FieldsReporter")
oModule.EnterQty "TotalLoss" 'Load Core Loss and Smooth it
oModule.CalcOp "Smooth"
For n = StartTime to EndTime Step dt
TimeSelect = n
TimeSelectSub = CStr(TimeSelect) & "ns"
i = 1+i
FileInc = i
Filename = "\Test_" & CStr(FileInc) & ".fld"
'Save Fields to a File in Fields Calculator
oModule.CalculatorWrite project_path & Filename, _
Array("Solution:=", "Setup1 : Transient"), _
Array("Time:=", TimeSelectSub)
Next

'ReLoad Saved Core Loss Fields and Add Fields together
j=j+1
FileInc = j
Filename = "\Test_" & CStr(FileInc) & ".fld"
oModule.CalculatorRead project_path & Filename, _
"Setup1 : Transient", "Fields", _
Array("Time:=", TimeSelectSub)
For j = 2 to i
FileInc = j
Filename = "\Test_" & CStr(FileInc) & ".fld"
oModule.CalculatorRead project_path & Filename, _
"Setup1 : Transient", "Fields", _
Array("Time:=", TimeSelectSub)
oModule.CalcOp "+"
Next

'Divide all fields by total number of ouput field results, i
oModule.EnterScalar CStr(i)
oModule.CalcOp "/"
oModule.AddNamedExpression NamedExpression, "Fields"
msgbox ("The Script is Complete. " &chr(13) & _
"After selecting the geometry to plot the averaged field," &chr(13) & _
"the Named Expression can be selected under Field Overlays -> Fields -> Named Expressions.")

...全文
1452 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybxyl 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 pctgl 的回复:]
从你上面那堆代码来看,写这个dll应该没问题
[/Quote]
那些vbs 主体内容是 录制 VBS做的 我只是在录制的基础上 改改而已
PctGL 2011-08-10
  • 打赏
  • 举报
回复
从你上面那堆代码来看,写这个dll应该没问题
春风老少年 2011-08-10
  • 打赏
  • 举报
回复
我记得以前用win2000的时候看到过系统自带的能建立窗口的脚本,好像是wsh写的。
反正当时感觉很神奇,就是一个vbs或者js文件,点了以后就出现个窗体,里面有好多类似vb的控件
好像一个正常的应用程序一样,可以执行。以前乱翻windows文件夹发现的,现在不记得怎么找了
ybxyl 2011-08-10
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 pctgl 的回复:]
用vb写个 atx dll,里面画好你想要的窗口,在写一个 类,调整适用范围为 公开,在vbs里面createobject 那个类。。。。 自己去发挥吧
[/Quote]
谢谢 PctGL的思路

可惜小弟干的是电机 对程序这东西只懂得皮毛 你说的方法 似乎要画很长时间去研究 唉! 自叹所学有限
PctGL 2011-08-09
  • 打赏
  • 举报
回复
用vb写个 atx dll,里面画好你想要的窗口,在写一个 类,调整适用范围为 公开,在vbs里面createobject 那个类。。。。 自己去发挥吧
ybxyl 2011-08-09
  • 打赏
  • 举报
回复
依旧期待大家的回答
ybxyl 2011-08-08
  • 打赏
  • 举报
回复
还请大家说说
ybxyl 2011-08-06
  • 打赏
  • 举报
回复
恳请大家能继续说说 小弟再次谢谢您的热心帮助!
qweasd448 2011-08-03
  • 打赏
  • 举报
回复
VBS好像不能调用API。。。
  • 打赏
  • 举报
回复
我的意思是建个dll,以后用vbs调用。
ybxyl 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 patrickkong 的回复:]
我的意思是建个dll,以后用vbs调用。
[/Quote]
谢谢您的回复 ,但因为软件只支持vbs 所以这个方法似乎不行
ybxyl 2011-08-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 patrickkong 的回复:]
建个dll么,
[/Quote]
这个有限元软件软件 只支持VBS的
stoppinging 2011-08-02
  • 打赏
  • 举报
回复
我也想知道啊
  • 打赏
  • 举报
回复
建个dll么,
ybxyl 2011-08-02
  • 打赏
  • 举报
回复
还请大家说说 谢谢您了
ybxyl 2011-08-01
  • 打赏
  • 举报
回复
StartTimein = Inputbox("Enter the Starting Time (sec)" &chr(13) & "(as defined in Saved Fields)")
EndTimein = Inputbox("Enter the End Time (sec)" &chr(13) & "(as defined in Saved Fields)")
dtin = Inputbox("Enter the Time Step (sec)" &chr(13) & "(as defined in Saved Fields)")
NamedExpression = Inputbox("Enter the name of the Named Expression" &chr(13) & "(e.g. AverageLoss_1)")



就是这个地方的代码
几罗星人 2011-08-01
  • 打赏
  • 举报
回复
我看楼上的回答者,是不懂,人家问的是VBS,不是VB。VBS是VB Script,就是用Basic语言写成的脚本命令。
VBS本身无法添加窗口,因为VBS是脚本语言,并非真正的编译。再加上你用InputBox是同步的,在用户还没有单击确定之前,程序不会继续执行下去,你说对吗;但是你用窗口,那是异步的,窗口一出现,程序就继续向下执行,这时候用户都没有输入值,非得出错不可。
杨聪头 2011-08-01
  • 打赏
  • 举报
回复
我了个去这么长,物理没学好电磁啥的看不懂,代码我就不看了。。。
依楼主大概意思,应该是新建个窗体,工程——添加窗体——窗体,这样就可以了,然后新建个text文本框和一个确认按钮一个取消按钮就可以了
确认按钮的功能是把text文本框中你输入的值传递给form1,这个楼主应该会的吧,大概就是

Private Sub Command1_Click()
form1.[变量]=text1.text
form2.hide
form1.show
End Sub

然后用下面这段代码代替原来inputbox的那段:

form1.hide
form2.show

杨聪头 2011-08-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiluoxingren 的回复:]
我看楼上的回答者,是不懂,人家问的是VBS,不是VB。VBS是VB Script,就是用Basic语言写成的脚本命令。
VBS本身无法添加窗口,因为VBS是脚本语言,并非真正的编译。再加上你用InputBox是同步的,在用户还没有单击确定之前,程序不会继续执行下去,你说对吗;但是你用窗口,那是异步的,窗口一出现,程序就继续向下执行,这时候用户都没有输入值,非得出错不可。
[/Quote]
我又孤陋寡闻了=。=没看到是VBS
刚学到多媒体还木有学VBS。。。
  • 打赏
  • 举报
回复
createobject.
没看到红的。

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧