首页 > 其他分享 >AutoCAD VBA 模态窗体焦点处理

AutoCAD VBA 模态窗体焦点处理

时间:2024-07-13 10:29:55浏览次数:14  
标签:Function Dim VBA AutoCAD String ByVal Long 窗体 PtrSafe

引用的win32 api

Option Explicit
Declare PtrSafe Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Declare PtrSafe Function CoCreateGuid Lib "ole32.dll" (G As GUID) As Long
Declare PtrSafe Function StringFromGUID2 Lib "ole32.dll" (G As GUID, ByVal str As String, ByVal cchMax As Long) As Long
Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare PtrSafe Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
End Type

Private Function GetGUID() As String
    Dim G As GUID
    Dim S As String
    S = String(76, vbNullChar)
    CoCreateGuid G
    StringFromGUID2 G, S, Len(S)
    S = StrConv(S, vbFromUnicode)
    GetGUID = S
End Function

Public Function GetUserFormHandle(ByVal UF As Object)
    Dim S As String
    Dim OrigCaption As String
    S = GetGUID()
    OrigCaption = UF.Caption
    UF.Caption = S
    GetUserFormHandle = FindWindow(vbNullString, S)
    UF.Caption = OrigCaption
End Function

窗体里面的处理

 

Option Explicit
Private CurUserFormHwnd As Long
Private Sub CommandButton1_Click()
    Me.Hide
    VBA.AppActivate ThisDrawing.Application.Caption
    Dim pt As Variant
    pt = ThisDrawing.Utility.GetPoint(, "pick a point")
    ThisDrawing.ModelSpace.AddCircle pt, VBA.Val(Me.TextBox1.Text)
    ThisDrawing.Regen acActiveViewport
    Me.show 0
    Win32Api.SetParent CurUserFormHwnd, CLng(AcadApplication.hwnd)
End Sub

Private Sub UserForm_Initialize()
    CurUserFormHwnd = Win32Api.GetUserFormHandle(Me)
    Win32Api.SetParent CurUserFormHwnd, CLng(AcadApplication.hwnd)
End Sub

视频效果

 

标签:Function,Dim,VBA,AutoCAD,String,ByVal,Long,窗体,PtrSafe
From: https://www.cnblogs.com/NanShengBlogs/p/18299748

相关文章

  • VBA编程:从入门到高手之路
    引言VisualBasicforApplications(VBA)是MicrosoftOffice套件中内置的编程语言,广泛用于自动化办公任务,特别是在Excel中。本文将带您从VBA的基础知识开始,逐步深入到高级技巧,助您成为VBA编程高手。1.VBA基础1.1什么是VBA?VBA是一种事件驱动的编程语言,允许用户......
  • winform窗体DataGridView合并单元格处理
    文本是使用SunnyUI的UIDataGridView控件进行演示的,同样适用于System.Windows.Forms.DataGridView控件具体需求如下,下表是个成绩表,其中姓名、总分、平均分这三列信息重复,需要对数据表进行合并单元格处理。 实现该需求需要两个步骤:1.给表格添加单元格重绘事件 在方法uiDataG......
  • (八)ADO.NET用窗体应用程序写增删查改——改(1.1升级版)
    在1.0版本中,紧接前面两节“增”、“删”、“查”代码,这里新增“改”功能一、首先编辑好要修改的控件和相关属性,这里“编号”默认只读属性(ReadOnly)二、其次,修改下窗体显示的代码,让数据直接显示出来,这里我们用一个方法封装好,直接在窗体加载事件(Load)中调用即可。privatevoidFo......
  • C#开发一个混合Windows服务和Windows窗体的程序
    很多时候,我们希望服务程序可以直接运行,或者可以响应一些参数,这时候,混合Windows服务和Windows窗体的程序就排上用场了。要实现同时支持Windows服务和Windows窗体,需要在启动的第一步时判断当前运行环境是否为服务模式,可以从以下几个方面进行判断:会话ID:Process.SessionId,获取当前......
  • C#开发一个混合Windows服务和Windows窗体的程序
    很多时候,我们希望服务程序可以直接运行,或者可以响应一些参数,这时候,混合Windows服务和Windows窗体的程序就排上用场了。要实现同时支持Windows服务和Windows窗体,需要在启动的第一步时判断当前运行环境是否为服务模式,可以从以下几个方面进行判断:当前用户名称:Environment.UserName,......
  • VBA 定时自我删除
    1.利用ThisWorkbook的Workbook_Open事件,实现定时自我删除。注意:这是个狠角色,宏文件打开后自动运行,会把当前整个宏文件删除掉,回收站都没有的那种,谨慎使用。PrivateSubWorkbook_Open()DimdatKillAsDate'指定一个日期,例如2025年4月1日datKill=DateS......
  • VBA常用的字符串内置函数
    前言在VBA程序中,常用的内置函数可以按照功能分为字符串函数、数字函数、转换函数等等,本节主要会介绍常用的字符串的内置函数,包括Len()、Left()、Mid()、Right()、Split()、String()、StrConV()等。本节的练习数据表以下表为例:1.使用Len()计算字符串长度示例:Sheet1的A......
  • VBA:循环
    For循环ForEach循环用于遍历数据集中的所有元素,包括:数组,对象集。语法:ForEach[元素变量]In[元素集合]'循环执行的代码Next[元素变量]实例:循环打印所有工作表的名称SubprintCode()DimwsAsWorksheetForEachwsInWorksheetsDebug.Printws......
  • VBA: 过程和函数
    过程(sub)无参数过程SubSayHello()Msgbox"HelloWorld"EndSub有参数过程'声明一个过程SubSayHello(nameAsString)Msgbox"Hello"&nameEndSub'在另一个过程,调用上述过程,调用时,提供一个实际的name参数SubMyCode()SayHello"World2"......
  • VBA一键修改word表格样式
    一次修改文档中的表格样式一次修改文档中所有表格样式为美化文档,我们通常会将文档中的所有表格格式样式统一,如何快速快速搞定,这里小编教大家一招批量设置表格样式的技巧。第一步:直接按Alt+F11键,打开VBA代码窗口。第二步:在打开的VBA窗口中,右击Thisdocument,在弹出的菜单中选择......