许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  程序与Femap软件交互:创新方式大揭秘

程序与Femap软件交互:创新方式大揭秘

阅读数 4
点赞 0
article_banner

如果不使用Femap自带的API程序窗口,根据API帮助文档的介绍,程序和Femap软件之间可以有四种交互形式,分别是:

1)程序和Femap是两个独立的应用;

2)将Femap作为一个隐藏的服务器;

3)将自己写的程序作为一个插件嵌入到Femap软件中;

4)将Femap软件嵌入到自己编写的程序中。

下面对这四种方式进行简单介绍。

一、作为两个独立应用运行(Running as two separate applications)

这是最简单的交互方法,因为FEMAP和您自己的应用程序都不需要真正了解其他应用程序的用户界面,所以不需要额外的设置。只需启动应用程序,然后“get”或“create”上述的FEMAP对象。如果使用GetObject附加到正在运行的会话,则无需再做其他操作。如果使用CreateObject,程序将启动一个新的FEMAP会话,但FEMAP将不可见。要使您的FEMAP会话可见,在调用createObject之后,您必须调用“feAppVisible”。无论是GetObject还是CreateObject,具体代码可以看我前面的文章。

二、把Femap软件作为一个隐藏服务器运行(Running FEMAP as a hidden server)

如果您希望您的应用程序是用户唯一可见的用户界面,那么这个过程非常类似于作为两个独立的应用程序运行。但是,在本例中,您永远不会希望使用GetObject附加到现有的FEMAP—您将使用CreateObject来创建一个新的、隐藏的FEMAP对象。简单的使用方法:

Dim App as Object

Set App = CreateObject(“femap.model”)

此时将启动一个新的FEMAP会话,通过这个API,您可以访问任何可用的功能。您必须开发自己的用户界面来向用户展示您想要的功能,然后调用FEMAP API函数来实现该功能。

在这种模式下运行FEMAP时,通常不希望调用大量的用于用户数据输入的对话框API,但是如果您一定要调用函数去显示出对话框,可以使用“DialogAutoAnswer”变量进行设置,即使Femap处于隐藏状态对话框也能在屏幕上显示出来,尽管对话框出现在屏幕上的位置可能是随机的。

三、将您的程序作为Femap的一个插件(Running your application as a FEMAP add-in)

如果你想让你的应用程序成为一个FEMAP“插件”,那么你需要遵循几个额外的步骤。在这种情况下,用户可见的整体界面将是FEMAP。您的应用程序将成为该接口的一部分。您可能希望将您自己的应用程序的主窗口作为Femap的一个对话框来构建。

首先,按照上面描述的步骤作为两个独立的、可见的应用程序运行。即调用GetObject或CreateObject附加到FEMAP,如果创建了一个新的FEMAP会话,则调用feAppVisible。最后,您将希望调用feAppRegisterAddInPane(),详细的参数可查看Help。在这个调用中,您将指定句柄给您自己的应用程序窗体,以及在FEMAP用户界面中您希望将其放置的位置。在这个调用中,您将指定应用程序窗口的句柄,以及在FEMAP用户界面中您希望将其放置的位置。

例如这种,“插件”应用程序被添加到FEMAP用户界面左上角的一个窗格中:

Help中给出的代码如下:

rc=App.feAppRegisterAddInPane(True, Form1.DefInstance.Handle.ToInt32, 0, False, False, 3, 2)

但是上述的代码对于VBA来说是不适用的,主要问题是VBA不能直接获取窗体的句柄,VBA获取窗体句柄的方法可自行百度。VBA可用的代码如下(注意,您需要引用Femap类库,具体方法可以参考我前面的文章):

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Dim app As femap.Model

Private Sub CommandButton1_Click()

Set app = CreateObject("femap.model")

app.feAppVisible (True)

Dim rc As Integer

rc = app.feAppRegisterAddInPane(True, FindWindow(vbNullString, "UserForm1"), 0, False, False, 3, 2)

End Sub

点击“Start”按钮后窗体就会嵌入到Femap程序中。

如果你已经将你的应用程序注册为一个FEMAP插件,记得在它退出之前再次调用“feAppRegisterAdd­InPane”来“注销”你的应用程序。

四、将Femap软件嵌入到您自己的程序中

除了将应用程序嵌入到FEMAP用户界面中,您可能还希望将部分FEMAP嵌入到您的界面中。要做到这一点,需要嵌入整个FEMAP窗口,然后可以选择性地关闭/隐藏用户界面的各个部分,直到只剩下您想要的部分。最有用的功能可能是FEMAP图形窗口可以直接嵌入到您的某个窗口中。这可以为您提供FEMAP的所有图形功能,而无需您自己重新实现它们,并且只需一个非常简单的设置。

同样,您将使用GetObject或CreateObject连接到FEMAP会话。在大多数情况下,您通常使用CreateObject,并让创建的FEMAP会话可以嵌入到您的应用程序中。要将FEMAP窗口嵌入到应用程序中,只需调用feAppEmbed()方法。和上部分一样,注意窗体句柄的获取问题,Help中给出的例子是不适用的,需做同样的修改。

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Dim app As femap.Model

Private Sub CommandButton2_Click()

Dim rc As Long

Set App = CreateObject("femap.model")

rc = App.feAppEmbed(FindWindow(vbNullString, "UserForm1"), 250, 0, 1300, 900)

End Sub

或者,通过更多的调用,您可以关闭FEMAP界面的各个部分,只留下图形窗口。例如:

rc = femap.feAppManageToolbars("", False)

rc = femap.feAppManageStatusBar(False)

rc = femap.feAppManagePanes("", 0)

rc = femap.feAppManageGraphicsTabs(False)

rc = femap.feAppEmbed(Me.Handle, 120, 10, 660, 420)

注意,如果希望在此模式下运行,则无需调用feAppVisible(),因为调用feAppEmbed()将自动使窗口可见,而首先调用feAppVisible()只会导致不必要的窗口闪烁。


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空