iCAx开思网

标题: 请问该怎样把SmarTeam按钮和代码联系起来? [打印本页]

作者: hun    时间: 2004-4-24 10:00
标题: 请问该怎样把SmarTeam按钮和代码联系起来?
我在SmarTeam菜单栏上做了一个按钮,请问该怎样把这个按钮和代码联系起来?我在做毕业设计,请各位大哥大姐帮帮忙,我用的是VB。
作者: hun    时间: 2004-4-24 23:09
高手请帮帮忙,如上所述。我在建立代码文件的时候是建立BS文件还是建立EBS文件呢?
作者: mwd121    时间: 2004-4-25 13:54
1、先在脚本维护中添加用户自定义的程序,注意用户自定义程序的应用范围;
2、在菜单编辑器中菜单命令-》“用户定义的命令”右键添加中新用户定义的命令,注意命令所应用的上下文环境
3、再在菜单脚本中相应地方添加新菜单项
4、保存
作者: mwd121    时间: 2004-4-25 13:55
代码文件后缀是BS或EBS都可以。
作者: hun    时间: 2004-4-25 20:02
谢谢高手mwd121的指点,现在有几个问题要问,希望能继续指教。
1、SmarTeam的例子是没有main()函数的,我在运行的时候它提示没有进入点,我在写代码的时候是不是也不用main()的?
2、命令所应用的上下文环境具体该怎么设置呢?
3、我在测试的时候不能调用Windows的的shell(),提示我没有声明shell(),我该怎么声明shell()或者加载哪个库呢?
     我要在SmarTeam上设置一个按钮,用来启动一个已经编译好的程序。高手能否做一个手把手教的过程示范一下。若不方便在上面发,可发到我的邮箱去,以救我一命(过几天就要写论文了,还没有把程序做出来)。不胜感激。我的邮箱是songxiaoju@sina.com.
作者: mwd121    时间: 2004-4-26 08:09
1、不需要有main()函数;
2、命令所应用的上下文环境在菜单编辑器中菜单命令-》“用户定义命令”的“新用户定义的命令”中的关联属性页中设定,其中正关联表示该命令可用的情况,负关联表示命令不可用的情况;
3、是要声明才能使用,我一般用ShellExecute函数,其声明如下:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
作者: hun    时间: 2004-4-26 09:09
谢谢mwd121,这个世界还有这等好人,想不到在这里遇上。我先试试。
作者: hun    时间: 2004-4-26 09:14
能不能就ShellExsecute函数举个例子呢?我的VB很烂。
作者: mwd121    时间: 2004-4-26 17:14
例子如下:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long
  
Dim Scr_hDC As Long
Dim WorkDir As String
Dim r As Long
  
Scr_hDC = GetDesktopWindow()
WorkDir = "d:\Work"
r = ShellExecute(Scr_hDC, "Open", DocumentName, 0&, WorkDir, 3)
作者: hun    时间: 2004-4-26 18:41
我现在编了一个函数,但是我这里写不了函数名,又没有自动生成,我在编译的时候,它提示如下消息:There are no legal entry points in the file AnsysEncap.bs。请问我该怎么做呢?
还有就是WorkDir = "d:\Work" 和DocumentName具体代表什么?解决以上问题其他就好解决了。希望mwd121能继续指点。谢谢。
作者: mwd121    时间: 2004-4-27 08:33
根据提示,估计是你的函数定义有问题!
WorkDir代表的是路径
DocumentName代表的是要打开的文件名称,我忘了写了!
作者: hun    时间: 2004-4-27 23:06
mwd121请问我的代码错在哪里呀?我就是编译不过.
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long  
Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long  
  
Sub Click()
Dim Scr_hDC As Long  
Dim WorkDir As String  
Dim r As Long  
  
Scr_hDC = GetDesktopWindow()  
WorkDir = "d:\Work"  
r = ShellExecute(Scr_hDC, "Open","g:\gg\Pro.exe", 0&, WorkDir, 3)  
End Sub
还有就是我在建立文件的时候,在函数(Function)那一栏就是写不上函数名,我编译的时候他提示我没有合法的入口ID.
mwd121,麻烦你给我做一个手把手教的过程吧,我真的没有办法了.求你了.
作者: mwd121    时间: 2004-4-28 08:24
你的函数定义确实有问题,我帮你改了一下,你再试试!
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long  
Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long  
  
Function Click(ApplHndl As Long,Sstr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long ) As Integer
Dim Scr_hDC As Long  
Dim WorkDir As String  
Dim r As Long  
  
Scr_hDC = GetDesktopWindow()  
WorkDir = "d:\Work"  
r = ShellExecute(Scr_hDC, "Open","g:\gg\Pro.exe", 0&, WorkDir, 3)  
Click= Err_None
End Function
作者: mwd121    时间: 2004-4-28 08:27
smarteam二次开发的程序在不同的地方有不同的入口函数,必须符合该函数参数定义才能编译通过!
作者: hun    时间: 2004-4-28 09:48
我原来那个sub Click是我利用新建文件时生成的,想不到还会有错。谢谢指点。我先试试。
作者: hun    时间: 2004-4-28 10:11
已经通过编译。我已经按照上面一步步的做了,只是没有设置上下文环境,但我点击SmarTeam上的按钮的时候没有任何反应呀。本以为可以的了,现在不行,那我该怎么办呀?mwd121,麻烦你试一下,看是什么原因,是不是有什么细节没有搞好。
是不是Declare Function GetDesktopWindow Lib "user32" Alias "GetDesktopWindow" () As Long 的“user32"错了?
作者: hun    时间: 2004-4-28 10:20
应该是GetDesktopWindow错了吧,我Smarteam搜索不到这个函数,如果是这个错了,那又该用哪个函数获得SmarTeam的句柄。麻烦mwd121,帮看一看,并把声明和代码写出来好吗?你现在是唯一可以救我的人了!!!!!
作者: mwd121    时间: 2004-4-28 11:25
对不起,原来你是要运行程序,还是用shell好了,我原来认为你是要运行程序打开一个文档之类的呢!
程序如下:
Function Click(ApplHndl As Long,Sstr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long ) As Integer
Dim RetVal12
RetVal12=shell("c:\winnt\System32\calc.exe",1)
Click= Err_None  
End Function
作者: hun    时间: 2004-4-28 13:20
我改了,但是还是不行。是不要获取句柄之类的,从而把控制权转移。在VB上很容易实现的情况到了Smarteam这里怎么就这么难了,这样走不通,我都不知道该怎么下手了。我认为你提供的代码就应该可以实现的了,但还是没有把程序运行起来。真没有办法了。
mwd121,如果你有耐心你就帮我做一个手把手教的过程吧,我都不好意思问你了,我也不懂该怎么问了。
我的要求就是在SmarTeam的菜单栏上的帮助(help)之前加一个按钮,点击按钮来运行一个已经编译好的程序而已。
mwd121,如果方便的话,你就把整个过程贴出来吧。
谢谢了。
作者: mwd121    时间: 2004-4-28 13:41
我的可以呀!步骤如下:
第一步:
作者: mwd121    时间: 2004-4-28 13:43
第二步:
作者: mwd121    时间: 2004-4-28 13:46
第三步:
你应该加在系统脚本下的某个用户组中,我由于是练习,为了不影响别人就加在私有脚本下了。
作者: mwd121    时间: 2004-4-28 13:47
在第三步时菜单项类型选择是子菜单项
作者: mwd121    时间: 2004-4-28 13:49
第四步:
作者: mwd121    时间: 2004-4-28 13:51
第五步:
保存所有脚本(当然也可右击你刚才添加菜单的那个用户组,选保存)
作者: mwd121    时间: 2004-4-28 13:54
运行显示如下:
作者: mwd121    时间: 2004-4-28 13:55
点击后显示:
作者: mwd121    时间: 2004-4-28 13:56
程序如下:
Option Explicit
Function AutoExecute(ApplHndl As Long,Sstr As String,FirstPar As Long,SecondPar As Long,ThirdPar As Long ) As Integer
Dim RetVal12
RetVal12=shell("c:\winnt\System32\calc.exe",1)
msgbox "11111"
AutoExecute = Err_None
End Function
作者: mwd121    时间: 2004-4-28 13:57
应该搞定了吧!
作者: hun    时间: 2004-4-29 21:09
行了,其实是因为我以为在上面直接用一个按钮就 行了,想不到还要作一个子菜单。非常感谢你的 指点,以后有问题再向你请教,希望还能得到你的指教。
作者: ancientman    时间: 2004-6-17 11:06
楼上的大侠,,,你有smarteam的中文版啊?能不能给我一个啊,,我可以付钱的,我现在用英文版的,头看得很疼!或者能否给我点中文资料呢?看英文很多专业名词看不懂,真痛苦啊!我也要做的二次开发,现在刚刚处于入门阶段,希望能交你这个朋友!




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3