none
VB6 組合鍵顯示方刮號特殊符號問題 RRS feed

  • 問題

  • 各位大大好

    我用VB6進行程式編寫

    程式中使用標準視窗Form1

    Form1中有RichTextBox,和TexttBox可以讓使用者輸入文字
    這次的程式我想要自己寫組合鍵
    並且顯示我想顯示的字元或符號在TextBox和RichTextBox上

    這個程式我要在程式啟動後去攔截Shift+K和Shift+L組合鍵
    並且把Shift+K和Shift+L分別改為左方括弧"["和右方括弧"]"

    當我點選RichTextBox時,程式會Focus在RichTextBox上
    此時我只要按Shift+K,原本要出現K或k
    但是我想讓RichTextBox上顯示出左方括弧"[",並且不會出現不該出現的字
    其餘的功能就與原本按鍵輸入一樣,只有在組合鍵按下去的時後有作用,只用單一按鍵不會有作用。
    只是加入Shift+K和Shift+L組合鍵增加左方括弧"["和右方括弧"]"的功能
    由於RichTextBox和TextBox是未知的數量。
    想請教有什麼方式可以讓我的組合鍵在任何RichTextBox和TextBox上都有作用?

    我下面寫的程式一.中我是
    原本是先測試括弧可以用,但用這程式執行不出方括弧

    我改用程式二的方式把輸入的文字改為方括弧
    但是這在輸入時都會閃一下原本的輸入文字
    而且一次是整份文件只要有K或L的全部修改,而我要的功能是只修改我當下輸入的那個字元
    這部分我可以怎麼改呢?

    程式一

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        If Shift = ShiftConstants.vbShiftMask Then
            Select Case KeyCode
                Case vbKeyK
                    SendKeys "{BACKSPACE}{(}"
                Case vbKeyL
                    SendKeys "{BACKSPACE}{)}"
            End Select
        End If
        
    End Sub

    程式二

    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
        Dim i As Long
        Dim ctrl As Control
        
        On Error Resume Next
        If Shift = ShiftConstants.vbShiftMask Then
            For Each ctrl In Me.Controls
                Select Case TypeName(ctrl)
                    Case "TextBox"
                        i = ctrl.SelStart    '記錄游標位置
                        ctrl.Text = Replace(ctrl.Text, "K", "[")
                        ctrl.Text = Replace(ctrl.Text, "L", "]")
                        ctrl.SelStart = i    '給定游標位置
                    Case "RichTextBox"
                        i = ctrl.SelStart
                        ctrl.Text = Replace(ctrl.Text, "K", "[")
                        ctrl.Text = Replace(ctrl.Text, "L", "]")
                        ctrl.SelStart = i
                End Select
            Next
        End If
    End Sub


    2013年10月17日 上午 02:11

解答

  • VB6 太久了... 印象中王國榮有本 VB6 與 Windows API 的書中有類似範例。

    好像是做 WndProc 攔截 WM_ key 相關事件,變更完後再返回。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2013年10月17日 下午 02:00