zoukankan      html  css  js  c++  java
  • 【转】VB 技巧一

    改变 ListIndex而不发生 Click 事件

        在修改 Combo 或 Listview 的ListIndex 时, 会发生 Click 事件, 下面的函数可以阻止该事件。
        声明:
    Private Declare Function SendMessage Lib _
    "user32" Alias "SendMessageA" (ByVal _
    hWnd As Long, ByVal wMsg As Long, ByVal _
    wParam As Long, lParam As Any) As Long
    Const CB_GETCURSEL = &H147
    Const CB_SETCURSEL = &H14E
    Const LB_SETCURSEL = &H186
    Const LB_GETCURSEL = &H188
        函数:
    Public Function SetListIndex(lst As Control, _
    ByVal NewIndex As Long) As Long
     
    If TypeOf lst Is ListBox Then
    Call SendMessage(lst.hWnd, _
    LB_SETCURSEL, NewIndex, 0&)
    SetListIndex = SendMessage(lst.hWnd, _
    LB_GETCURSEL, NewIndex, 0&)
    ElseIf TypeOf lst Is ComboBox Then
    Call SendMessage(lst.hWnd, _
    CB_SETCURSEL, NewIndex, 0&)
    SetListIndex = SendMessage(lst.hWnd, _
    CB_GETCURSEL, NewIndex, 0&)
    End If
    End Function
    调整 Combo 下拉部分的宽度
        声明:
    Private Declare Function SendMessage Lib _
    "USER32" Alias "SendMessageA" _
    (ByVal hwnd As Long, ByVal Msg As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Const CB_GETDROPPEDWIDTH = &H15F
    Private Const CB_SETDROPPEDWIDTH = &H160
    Private Const CB_ERR = -1
        函数:
    ' 取得 Combo 下拉的宽度
    ' 可以利用该函数比例放大或缩小宽度
    Public Function GetDropdownWidth(cboHwnd As Long) As Long
    Dim lRetVal As Long
    lRetVal = SendMessage(cboHwnd, CB_GETDROPPEDWIDTH, 0, 0)
    If lRetVal <> CB_ERR Then
    GetDropdownWidth = lRetVal
    '单位为 pixels
    Else
    GetDropdownWidth = 0
    End If
    End Function
    '设置 Combo 下拉的宽度
    '单位为 pixels
    Public Function SetDropdownWidth(cboHwnd As _
    Long, NewWidthPixel As Long) As Boolean
    Dim lRetVal As Long
    lRetVal = SendMessage(cboHwnd, _
    CB_SETDROPPEDWIDTH, NewWidthPixel, 0)
    If lRetVal <> CB_ERR Then
    SetDropdownWidth = True
    Else
    SetDropdownWidth = False
    End If
    End Function
    Combo的自动查询技术
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Const CB_FINDSTRING = &H14C
    Private Sub Combo1_Change()
    Dim iStart As Integer
    Dim sString As String
    Static iLeftOff As Integer
    iStart = 1
    iStart = Combo1.SelStart
    If iLeftOff <> 0 Then
    Combo1.SelStart = iLeftOff
    iStart = iLeftOff
    End If
    sString = CStr(Left(Combo1.Text, iStart))
    Combo1.ListIndex = SendMessage(Combo1.hwnd, _
    B_FINDSTRING, -1, ByVal CStr(Left( _
    ombo1.Text, iStart)))
     
    If Combo1.ListIndex = -1 Then
    iLeftOff = Len(sString)
    combo1.Text = sString
    End If
    Combo1.SelStart = iStart
    iLeftOff = 0
    End Sub
        静态变量 iLeftOff 指定了字符长度。
    自动选择 Text 的内容
        在使用 VFP 的应用进行录入时,每进入一个录入框,就自动选择该框中的所有内容。利用以下的代码,也可实现类似的功能。
    Private Sub MyTextBox_GotFocus()
    AutoSelect MyTextBox
    End Sub
     
    Sub AutoSelect(SelObject As Control)
    SelObject.SelStart = 0
    If TypeOf SelObject Is MaskEdBox Then
    SelObject.SelLength = Len(SelObject.FormattedText)
    Else
    If TypeOf SelObject Is TextBox Then
    SelObject.SelLength = Len(SelObject.Text)
    End If
    End If
    End Sub
  • 相关阅读:
    mysql----show slave status G 说明
    mysqldump 的方式来搭建master-->slave 的复制架构
    C++----练习--string 从文件中一个一个单词的读直到文件尾
    python 全排列combinations和permutations函数
    什么是restful api
    git知识点
    Hash算法解决冲突的方法
    python之单例设计模式
    Linux常用命令大全
    SQLAlchemy中时间格式化及将时间戳转成对应时间的方法-mysql
  • 原文地址:https://www.cnblogs.com/rosesmall/p/2735064.html
Copyright © 2011-2022 走看看