| VB问题全功略(20) [查找本页请按Ctrl+F] |
| 96、如何让二个文字框同步联动? 97、如何避免核取方块式的 ListBox 已选定的项目被更改? 98、如何隐藏及再显示鼠标 99、您是左撇子吗?交换鼠标的左右键! 100、资料的加密 / 解密 96、如何让二个文字框同步联动? 要作到这个动作,有的人会想要用 KeyDown 或 KeyPress 事件来处理,但是这都是错的,虽然第二个文字框终究会动,但是总是比第一个文字框慢了一拍,永远会漏掉最后一个字!为什么呢? 因为由键盘输入时,程序接收的顺序为 KeyDown --> KeyPress --> KeyUp,而在 KeyPress 时,才会传入 Keyascii〈此点可由各事件中传入的参数得知〉转换成文字,所以在 KeyDown 时,还抓不到输入的字,在 KeyPress 时,只有 Keyascii 则需要转换才抓得到,但是中文比较麻烦! 在 KeyUp 时虽然已经可以抓到键入的值,但是我认为倒不如在 Change 事件中来得简单!不管 User 输入什么,只有第一个文字框资料异动时,才需要处理。 Private Sub Text1_Change() Text2 = Text1 End Sub 如果不管第一个文字框输入什么,第二个文字框只要显示最后一个字,则程序要改成: Private Sub Text1_Change() Text2 = Right(Text1, 1) End Sub 97、如何避免核取方块式的 ListBox 已选定的项目被更改? 当 ListBox 的 Style 设定成〈1-项目包含核取方块〉,ListBox 控制项以每一个文字项目跟随一个核取方块的方式显示。您可透过选取各项目边的核取方块以选择 ListBox 中的多个项目。 但有时候,您这样子设定的目的是为了显示一些事先选定的项目,例如从资料库中抓出的资料或是一些安装软件的设定选项确认画面。您不希望因为使用者再去点选 ListBox 的项目而更动原来设定的项目,这时候,您不能将 Enabled 属性设成 False,因为这样子卷动杆就无法卷动,使用者就无法看到 ListBox 的其他项目;您也无法像 TextBox 一样设定成 Lock 状态,因为 ListBox 没有 Lock 属性。 以下的程序代码可以解决这个问题,在 Form 中放一个 CommandButton 及一个 ListBox,将 ListBox 的 Style 设定成〈1-项目包含核取方块〉: Dim isDisabled As Boolean '是否取消可选定状态 Private Sub Command1_Click() isDisabled = Not isDisabled End Sub Private Sub List1_ItemCheck(Item As Integer) If isDisabled Then List1.Selected(Item) = Not List1.Selected(Item) End If End Sub 当 isDisabled 设定成 True 时,使用者一旦选定 ListBox 的某一个项目,程序会立即反转它的状态,看起来就像没改变过选定状态一样!而同时 ListBox 还是可以卷动! 98、如何隐藏及再显示鼠标 很简单,只用到了一个 ShowCursor API,参数也很简单,只有一个 bShow,设定值如下: True:显示鼠标 / False:隐藏鼠标 Declare Function ShowCursor Lib "user32" Alias "ShowCursor" (ByVal bShow As Long) As Long 99、您是左撇子吗?交换鼠标的左右键! 很简单,只用到了一个 SwapMouseButton API,参数也很简单,只有一个 bSwap,设定值如下: True:左右键互换 / False:恢复正常 Declare Function SwapMouseButton Lib "user32" Alias "SwapMouseButton" (ByVal bSwap As Long) As Long 假设我是左撇子,则程序为: Dim RetVal As Long RetVal = SwapMouseButton(True) 100、资料的加密 / 解密 以下二个模组,一个处理加密,一个处理解密,加密处理必须传入参数 (就是要加密的字串),加密后将资料存到加密文件,要解密时,则从文件案中读出并解密: (假设文件案名称为 C:\加密文件.qwe, 您可以自行更改文件名或路径) '处理加密 Private Function Encrypt(varPass As String) If Dir("C:\加密文件.qwe") <> "" Then: Kill "C:\加密文件.qwe" Dim varEncrypt As String * 50 Dim varTmp As Double Open "C:\加密文件.qwe" For Random As #1 Len = 50 For I = 1 To Len(varPass) varTmp = Asc(Mid$(varPass, I, 1)) varEncrypt = Str$(((((varTmp * 1.5) / 2.1113) * 1.111119) * I)) Put #1, I, varEncrypt Next I Close #1 End Function '处理解密 Private Function Decrypt() As String Open "C:\加密文件.qwe" For Random As #1 Len = 50 Dim varReturn As String * 50 Dim varConvert As Double |
|
[木瓜软件工作室] 整理 |