Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 窗体  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702053
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

如何用弹出窗体代替快捷菜单?

作者:cg1  摘自:access911.net  :cg1  更新日期:2005-12-19  浏览人次:

 

问题:

如何用弹出窗体代替快捷菜单?

 

回答:

原理非常简单,鼠标点击某个窗体主体或者某个控件时,接收鼠标的 MouseDown 事件的BUTTON 参数,如果是 2 就打开一个预先设计好的弹出模式窗体,新弹出的窗体去掉边框控制栏弄得像一个快捷菜单一样就可以了。

其实有关技巧在本站的其他文章中已经详细论述过,这里再做个示例给大家

以下是窗体部分的代码
Option Compare Database

'************ 代码开始 **********
Const SW_HIDE = 0
Const SW_SHOWNORMAL = 1
Const SW_SHOWMINIMIZED = 2
Const SW_SHOWMAXIMIZED = 3

Private Declare Function apiShowWindow Lib "user32" _
    Alias "ShowWindow" (ByVal hwnd As Long, _
    ByVal nCmdShow As Long) As Long

'fSetAccessWindow (SW_HIDE)

Function fSetAccessWindow(nCmdShow As Long)

' 使用举例
' 最大化 Access 窗口
'    fSetAccessWindow(SW_SHOWMAXIMIZED)
' 最小化 Access 窗口
'    fSetAccessWindow(SW_SHOWMINIMIZED)
' 隐藏 Access 窗口
'    fSetAccessWindow(SW_HIDE)
' 正常显示 Access 窗口
'    fSetAccessWindow(SW_SHOWNORMAL)
'
    Dim loX As Long
    Dim loFORM As Form
On Error Resume Next
    Set loFORM = Screen.ActiveForm
    If Err <> 0 Then ' 没有活动窗体 no ActiveFORM
        If nCmdShow = SW_HIDE Then
            MsgBox "除非屏幕上有一个窗口,否则不能隐藏 Access 主窗口!" _
                & vbCr & vbCr _
                & "Cannot hide Access unless " _
                & "a FORM is on screen"
        Else
            loX = apiShowWindow(hWndAccessApp, nCmdShow)
            Err.Clear
        End If
    Else
        If nCmdShow = SW_SHOWMINIMIZED And loFORM.Modal = True Then
            MsgBox "不能由屏幕上的 " & (loFORM.Caption + " ") & "窗体最小化 Access 主窗口!" _
                & vbCr & vbCr _
                & "Cannot minimize Access with " _
                & (loFORM.Caption + " ") _
                & "FORM on screen"
        ElseIf nCmdShow = SW_HIDE And loFORM.PopUp <> True Then
            MsgBox "不能由屏幕上的 " & (loFORM.Caption + " ") & "窗体隐藏 Access 主窗口!" _
                & vbCr & vbCr _
                & "Cannot hide Access with " _
                & (loFORM.Caption + " ") _
                & "FORM on screen"
        Else
            loX = apiShowWindow(hWndAccessApp, nCmdShow)
        End If
    End If
    fSetAccessWindow = (loX <> 0)
End Function

Private Sub Command5_Click()
fSetAccessWindow (0)

End Sub

Private Sub Form_Close()
    DoCmd.Quit
End Sub

'************ 代码结束 **********


Private Sub 主体_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
        ShowPopup
    End If
End Sub


以下新建一个模块,然后 COPY 进去就可以了

Option Compare Database

' NOTE: Some of the following Windows API functions may be
' defined in an existing Microsoft Access library. If so, the new
' declarations would cause a duplication procedure name error. If
' this error occurs, remove the offending declare statement from
' your code or convert the declaration to a comment.

Option Explicit
Type POINTAPI
    X As Long
    Y As Long
End Type

Global Const GWL_STYLE = (-16)
Global Const WS_DLGFRAME = &H400000


Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) _
     As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong _
    As Long) As Long
'------------------
Function ShowPopup()
   Dim coord As POINTAPI
   Dim attr&

   GetCursorPos coord
   DoCmd.OpenForm "弹出菜单"

   attr& = GetWindowLong(Forms![弹出菜单].hwnd, GWL_STYLE)
   attr& = SetWindowLong(Forms![弹出菜单].hwnd, GWL_STYLE, attr& And Not WS_DLGFRAME)

   'DoCmd.MoveSize (coord.x * 14), (coord.y * 14 - 4600), , 5000
   DoCmd.MoveSize (coord.X * 14), (coord.Y * 14)
End Function

Function ItemSelected(WhichItem As String)
   DoCmd.Close
   MsgBox "The selected item was " & Trim(WhichItem)
End Function


http://access911.net/down/eg/PopUPReplaceShortMenu.rar
 (19KB)

 

本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     没有手动相关文章
     如何让 ACCESS 2000 支持弹出式报表?(思路及实现)
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利