我要去ASK并回答我认为对MS Access中一些很酷的UI功能感兴趣的人有用的问题.
Answering own question

题:
如何在Microsoft Access中显示非阻塞“吐司”之类的通知?确实有一些动画,不应该阻止主机应用程序!

我的朋友问我关于ms访问的非阻塞吐司通知.我的第一个想法是,检查谷歌你会发现大量的样本.他对他得到的样品不满意.

他想要(JQuery)非阻塞通知.用户需要知道但不一定需要互动的东西.

由于在VBA中无法进行线程化,我想,如果你能编写自己的.dll怎么办?所以我最终编写了一个.NET DLL,可以通过(windows)VBA代码访问并显示Toast通知.
(实际的dll创建和从vba访问.NET dll是我将在稍后介绍的另一个主题)(You can read more in my blog根据您的意愿留下评论或建议.)

现在,您可以从这里下载我创建的DLL:
HERE

编辑:以上下载链接和GitHub链接已更新为我认为属于作者的工作链接.

如果您担心下载未知的DLL:VirusTotal Scan report

将DLL添加到应用程序的根文件夹,并将以下代码添加到您的应用程序.

'Module level public variable

Public gTOASTER As Object

' to save window metrics
Public Type RECT
    Left        As Long  ' x1
    Top         As Long  ' y1
    Right       As Long  ' x2
    Bottom      As Long  ' y2
End Type

#If VBA7 Then 
    Public Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongPtr
    Public Declare PtrSafe Function KRISH_VBA_TOOLS Lib "VBA_TOOLS.dll" () As Object
    Public Declare PtrSafe Function GetwindowRect Lib "user32" (ByVal hWnd As LongPtr,ByRef lpRect As RECT) As LongPtr 
#Else
    Public Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal strFilePath As String) As Long
    Public Declare Function KRISH_VBA_TOOLS Lib "VBA_TOOLS.dll" () As Object
    Public Declare Function GetwindowRect Lib "user32" (ByVal hWnd As LongPtr,ByRef lpRect As RECT) As LongPtr
#End If

Public Function FN_TOAST_DLL(iMessage As String,Optional iCLOSE_DURATION As Long = 3000,Optional iType As String = "success",Optional iANIME_DURATION As Long = 1000,Optional iFONT_COLOR As String = "#FFFFFF",Optional iX As Long = 0,Optional iY As Long = 0,Optional iANIME_DIRECTION As Integer = 1,Optional iPARENT_HWND As Long = 0)

On Error GoTo LABEL_EXIT_ROUTINE:

    If gTOASTER Is nothing Then
        LoadLibrary (FN_APP_GET_BASE_PATH & "VBA_TOOLS.dll")
        Set gTOASTER = KRISH_VBA_TOOLS()
        GoTo LABEL_TOAST
    Else
        GoTo LABEL_TOAST
    End If

    On Error GoTo 0
    Exit Function

LABEL_EXIT_ROUTINE:
    msgBox iMessage & vbnewline & err.description
    Exit Function

LABEL_TOAST:
    'set background color. (pass any html color code)
    Select Case iType
        Case "error"
            iType = "#F76160"
        Case "success"
            iType = "#26ad82"
        Case Else
            iType = "#26ad82"
    End Select

    'if parent object is provided show the toast on top of the parent. if custom x,y is provided use x,y coordinated. if none provided use access app's locaiton.
    Dim mRect As RECT
    If iPARENT_HWND <= 0 Then
        If iX = 0 And iY = 0 Then
            GetwindowRect Application.hWndAccessApp,mRect

            iANIME_DIRECTION = 0 'anim direction 0 to down and 1 to up
        End If
    Else ' iPARENT_HWND > 0 Then 'parent_hwnd is null
        GetwindowRect iPARENT_HWND,mRect
    End If

    'set up some offsets
    iX = mRect.Left + 360
    iY = mRect.Top + 1


    On Error Resume Next
    gTOASTER.FN_SHOW_TOAST iMessage,iCLOSE_DURATION,iType,iANIME_DURATION,iFONT_COLOR,iX,iY,iANIME_DIRECTION

End Function

Public Function FN_APP_GET_BASE_PATH()
    Dim FN As String
    FN = Application.CurrentProject.path
    If VBA.Right(Application.CurrentProject.path,1) <> "\" Then FN = FN & "\"
    FN_APP_GET_BASE_PATH = FN
End Function

如果要自定义fn_toast_dll函数,则从DLL中获取参数列表:

'    /// <summary>
'    ///
'    /// </summary>
'    /// <param name="iMessage">Message to display</param>
'    /// <param name="iDuration">Duration in Milliseconds to keep the toast before fading out..</param>
'    /// <param name="iBG_COLOR">HTML color code for your toast background...</param>
'    /// <param name="iANIME_DURATION">Millisecond value used to for fading in and out the Toast.. 1/4 is used to fade in rest to fade out..</param>
'    /// <param name="iFONT_COLOR">HTML Color code for the font..</param>
'    /// <param name="iX">x position on the screen. where the toast should appear</param>
'    /// <param name="iY">y position on the screen where the toast should appear</param>
'    /// <param name="iANIM_DIRECTION">{0,1} 0 will show/add further notifications downwards and 1 upwards.</param>
'    /// <returns></returns>

显示通知调用此方法:

FN_TOAST_DLL "hello this is a green test" ' By default a success message with 3 seconds will be "toasted"
FN_TOAST_DLL "hello this is an error",15000,"error"

用法:

您可以将此用于任何非交互式警报,例如登录成功,操作取消警报或任何用户无需按OK确认您的消息.

目标
我将在GitHub上传Dll项目,并请求其他VBA C#专家的贡献,使其更加更加漂亮,并且可供所有VBA开发人员使用.

这是我的GitHub链接:GitHub
请尽可能多地贡献,并为每个人提供:)
如果您能保留主要的班级名称,我会很高兴的.

一个样品:

像Microsoft Access(VBA)的通知一样非阻塞“吐司”的更多相关文章

  1. 尝试更改Bool属性时,ios – EXC_BAD_ACCESS错误

    我正在尝试更改Bool属性并且收到一个EXC_BAD_ACCESS错误.我正在使用XCode6和Swift.note属性保存不错,但已完成的属性会抛出EXC_BAD_ACCESS错误改变属性程序解决方法有同样的问题,解决方案确实是在@NSManaged属性中使用NSNumber.此外,您可以定义一个计算的Bool属性,以便您可以使用业务逻辑中的标量布尔值,而不能使用NSNumber.

  2. 微信三方登录相关(Swift)

    微信登录条件1.微信开放平台注册并认证成功2.相关应用的微信的APPID和secret3.遵循微信代理WXApiDelegate使用处编写相关登录代码WXApi.registerappletreq=SendAuthReq.init()req.scope="snsapi_userinfo"req.state="wulianwang"WXApi.send在回调方法中处理相关业务funconResp(_resp:BaseResp!,options:.mutableContainers)/**正确时返回的JSON

  3. Swift POST请求不起作用

    我正在尝试使用Swift发布帖子请求.我的目标是将accessstokenfacebook发布到服务器但不起作用.这是代码:答案如下:这样您可以使用POSTWeb服务:

  4. Swift 3.0字符串连接离开“可选”

    “随你”有人见过类似的东西?

  5. 如何知道Android手机中的位置区号和手机ID

    我想知道SIM卡中保存的位置区号和小区ID.如何在Android手机中获取位置区号和小区ID.最好的祝福.解决方法不要忘记设置ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION,否则您将获得SecurityExceptions.例如,将以下内容添加到应用清单中的元素:

  6. 如何在Android中自定义Toast的背景,背景颜色和文本颜色

    我想通过修改默认Toast来自定义我的吐司而不创建自定义布局.我希望红色为吐司的背景,白色为吐司的文字颜色,我想让我的吐司的背景更大,默认吐司.当我运行我的应用程序时,我的吐司没有任何变化,它仍然显示在默认的吐司中.这就是我自定义吐司的方式:解决方法您可以使用自定义视图为自定义视图充气并使用toast.setView(布局).例:还有你的xml更多信息@http://developer.andro

  7. Android Recycle View LogCat:找不到方法

    我使用Android支持库中的RecyclerView.在使用Android4.1.2的三星galaxyS2上运行时,一切正常但在Logcat中我看到了消息:我应该担心这个消息吗?

  8. android – 完成后退按钮两次按下时的活动?

    1)在你的课堂上做一个全球可修复的…2)然后实现onBackpressed这样的活动……4)当你的活动关闭时,用这个技巧隐藏吐司……5)实现你onPause()这样,当活动进入后台时杀死吐司希望这会有所帮助……本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  9. android – 如何检查吐司是否已经被驳回

    参见英文答案>toastissueinandroid3我想检查烤面包是否已经被关闭,因为用户点击鼠标,烤面包片显示,但是可能我用户不断点击,所以我需要检查,我不能使用对话框解决方法在再次显示之前,检查烤面包是否可见.

  10. 脚本中出现 window.open() access is denied - 拒绝访问 情况一则及分析

    昨天把blog页面另存在,在本地调试和改blog皮肤。包括把上面的function放在另外一个页面上运行,依然是正常,并把这个function单独改成了window.open还是拒绝访问。never-online'sTechBlogInCSDN-JS&DHTMLfunctionaddEvent{if{o.attachEvent;}else{o.addEventListener;}}functionfnRunHtmlCode{varwnd=window.open;wnd.document.open;wnd.

随机推荐

  1. static – 在页面之间共享数据的最佳实践

    我想知道在UWP的页面之间发送像’selectedItem’等变量的最佳做法是什么?创建一个每个页面都知道的静态全局变量类是一个好主意吗?

  2. .net – 为Windows窗体控件提供百分比宽度/高度

    WindowsForm开发的新手,但在Web开发方面经验丰富.有没有办法为Windows窗体控件指定百分比宽度/高度,以便在用户调整窗口大小时扩展/缩小?当窗口调整大小时,可以编写代码来改变控件的宽度/高度,但我希望有更好的方法,比如在HTML/CSS中.在那儿?

  3. 使用Windows Azure查询表存储数据

    我需要使用特定帐户吗?>将应用程序部署到Azure服务后,如何查询数据?GoogleAppEngine有一个数据查看器/查询工具,Azure有类似的东西吗?>您可以看到的sqlExpressintance仅在开发结构中,并且一旦您表示没有等效,所以请小心使用它.>您可以尝试使用Linqpad查询表格.看看JamieThomson的thispost.

  4. windows – SetupDiGetClassDevs是否与文档中的设备实例ID一起使用?

    有没有更好的方法可以使用DBT_DEVICEARRIVAL事件中的数据获取设备的更多信息?您似乎必须指定DIGCF_ALLCLASSES标志以查找与给定设备实例ID匹配的所有类,或者指定ClassGuid并使用DIGCF_DEFAULT标志.这对我有用:带输出:

  5. Windows Live ID是OpenID提供商吗?

    不,WindowsLiveID不是OpenID提供商.他们使用专有协议.自从他们的“测试版”期结束以来,他们从未宣布计划继续它.

  6. 如果我在代码中进行了更改,是否需要重新安装Windows服务?

    我写了一个Windows服务并安装它.现在我对代码进行了一些更改并重新构建了解决方案.我还应该重新安装服务吗?不,只需停止它,替换文件,然后重新启动它.

  7. 带有双引号的字符串回显使用Windows批处理输出文件

    我正在尝试使用Windows批处理文件重写配置文件.我循环遍历文件的行并查找我想要用指定的新行替换的行.我有一个’函数’将行写入文件问题是%Text%是一个嵌入双引号的字符串.然后失败了.可能还有其他角色也会导致失败.如何才能使用配置文件中的所有文本?尝试将所有“在文本中替换为^”.^是转义字符,因此“将被视为常规字符你可以尝试以下方法:其他可能导致错误的字符是:

  8. .net – 将控制台应用程序转换为服务?

    我正在寻找不同的优势/劣势,将我们长期使用的控制台应用程序转换为Windows服务.我们为ActiveMQ使用了一个叫做java服务包装器的东西,我相信人们告诉我你可以用它包装任何东西.这并不是说你应该用它包装任何东西;我们遇到了这个问题.控制台应用程序是一个.NET控制台应用程序,默认情况下会将大量信息记录到控制台,尽管这是可配置的.任何推荐?我们应该在VisualStudio中将其重建为服务吗?我使用“-install”/“-uninstall”开关执行此操作.例如,seehere.

  9. windows – 捕获外部程序的STDOUT和STDERR *同时*它正在执行(Ruby)

    哦,我在Windows上:-(实际上,它比我想象的要简单,这看起来很完美:…是的,它适用于Windows!

  10. windows – 当我试图批量打印变量时,为什么我得到“Echo is on”

    我想要执行一个简单的批处理文件脚本:当我在XP中运行时,它给了我预期的输出,但是当我在Vista或Windows7中运行它时,我在尝试打印值时得到“EchoisOn”.以下是程序的输出:摆脱集合表达式中的空格.等号(=)的两侧可以并且应该没有空格BTW:我通常在@echo关闭的情况下启动所有批处理文件,并以@echo结束它们,所以我可以避免将代码与批处理文件的输出混合.它只是使您的批处理文件输出更好,更清洁.

返回
顶部