VB 版 (精华区)

发信人: zxfsnow (别怕我伤心), 信区: VB
标  题: 来自VB论坛的一些问题解答 
发信站: 哈工大紫丁香 (2000年05月31日12:31:31 星期三), 转信

发信人: ming (继续睡觉..zzZZ), 信区: VB
标  题: 来自VB论坛的一些问题解答
发信站: 虎踞龙盘东南站 (Mon Feb 14 13:24:22 2000), 转信

发信人: erain (红花会主), 信区: VisualBasic
标  题: 来自VB论坛的一些问题解答
发信站: BBS 水木清华站 (Wed Jan  5 21:52:00 2000) WWW-POST

1.怎样将VB某些控件的缺省菜单屏蔽掉而使用自己的弹出菜单,例如文本框控件
〖答〗Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
      If Button = vbRightButton Then
            Text1.Enabled = False
            Text1.Enabled = True
            Text1.SetFocus
            PopupMenu mnuUserDefine
      End If
End Sub

2.怎样将我自已的命令加入窗体的控制菜单栏。
〖答〗建一个Project,包含一个Form(Frmmain)和一个Module(MSysMenu)
   Frmmain:
        Option Explicit

        Private Sub Form_Load()
              Dim hSysMenu As Long
              'Get Handle Of System Menu
              hSysMenu = GetSystemMenu(hwnd, 0&)
              'Append separator and menu item with ID IDM_ABOUT
               Call AppendMenu(hSysMenu, MF_SEPARATOR, 0&, 0&)
               Call AppendMenu(hSysMenu, MF_STRING, IDM_ABOUT, "About...")
               Call AppendMenu(hSysMenu, MF_STRING, IDM_EXIT, "Exit")
               Show
              ' Install system menu window procedure
              procOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf
SysMenuProc)
        End Sub
    MSysMenu:
           Option Explicit
           Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA
"                     (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal
Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
           Declare Function AppendMenu Lib "user32" Alias "AppendMenuA"
(ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal
lpNewItem As String) As Long
           Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long,
ByVal bRevert 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
           Public Const MF_STRING = &H0&
           Public Const MF_SEPARATOR = &H800&
           Public Const GWL_WNDPROC = (-4)
           Public Const WM_SYSCOMMAND = &H112
           Public procOld As Long
          'User's menu
           Public Const IDM_ABOUT = &H2000
           Public Const IDM_EXIT = &H2001

Public Function SysMenuProc(ByVal hwnd As Long, ByVal iMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
              ' Ignore everything but system commands
             If iMsg = WM_SYSCOMMAND Then
                ' Check for one special menu item
                      Select Case wParam
                      Case IDM_ABOUT
                           MsgBox "Hi"
                           Exit Function
                      Case IDM_EXIT
                            Unload FrmMain
                            Exit Function
                       End Select
             End If
            ' Let old window procedure handle other messages
            SysMenuProc = CallWindowProc(procOld, hwnd, iMsg, wParam,
lParam)
End Function


3.如何在VB 中通过编程获得 WINDOWS的工作目录路径? 在API 中有一个函数 GETPATH
是否可以用?如何使用?
〖答〗Private Const MAX_PATH = 260
Private Declare Function GetWindowsDirectory Lib "kernel32" Alias _
"GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal _
nSize As Long) As Long
Public Function GetWinPath()
        Dim sWinPath As String
        Dim lResult As Long
        sWinPath = String(MAX_PATH, 0)
        lResult = GetWindowsDirectory(sWinPath, MAX_PATH)
        If lResult <> 0 Then
              GetWinPath = Left(sWinPath, InStr(sWinPath, Chr(0)) - 1)
        Else
              GetWinPath = ""
        End If
End Function

4.从数据库查得的结果须用另外一个窗口中的MSFlexGrid中显示出来,但继续在其父窗口
中操作时此窗口就被覆盖,请问:如何才可象Winamp一样使其总在最前面呢?
〖答〗Type Rect
     Height As Integer
     Left As Integer
     Top As Integer
     Width As Integer
End Type
Global Const HWND_TOPMOST = -1
Global Const HWND_NOTOPMOST = -2
Global Const SWP_NOACTIVATE = &H10
Global Const SWP_SHOWWINDOW = &H40
Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal
hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long,
ByVal cy As Long, ByVal wFlags As Long)

Public Sub StayOnTop(hWnd As Long, size As Rect)
       SetWindowPos hWnd, HWND_TOPMOST, size.Left / 15, size.Top / 15,
size.Width / 15, size.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
End Sub

Public Sub NotStayOnTop(hWnd As Long, size As Rect)
       SetWindowPos hWnd, HWND_NOTOPMOST, size.Left / 15, size.Top / 15,
size.Width / 15, size.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
End Sub


5.有一个窗口,里面有很多的TEXTBOX,几个COMBNOBOX,COMBOBOX中有一为空,现在想在一
个按钮中,将这些控件全部清空。(用FROM.cls方法不起作用)
〖答〗
Dim i As Integer
For i = 0 To Form1.Controls.Count - 1
        If TypeOf Form1.Controls(i) Is TextBox Then
                Form1.Controls(i).Text = ""
        ElseIf TypeOf Form1.Controls(i) Is ComboBox Then
                Form1.Controls(i).Clear
        End If
Next i


6.

--
       巧者劳而智者忧,无能者无所求,饱食而遨游,泛若不系之舟。

    请稍候,正在返璞归真中......
   __________________________________________________________________
  |||||||||||                   20%                                  |
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



--

 以科计为本,以产业报国!
  超越自我,飞跃无限!
  

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.245毫秒