本文實例程式碼可以實現讓VB的TextBox文字方塊垂直居中顯示效果。這裡需要注意:Form_Load()窗體程式碼中的多行屬性設定必須為真,即Text1.MultiLine = True,該屬性為唯讀屬性,請在設計時修改,換行會被之後的程式碼屏蔽,不想屏蔽可自行修改,呼叫此函數就好了。
具體的功能代碼如下:
'================================================== ==============================='| 模組名稱| TextBoxMiddle'| 說明| 文字方塊居中顯示'==== ================================================== ===========================Option ExplicitPrivate Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd TypePrivate Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByValnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Anynd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) hw LongPrivate hw Function "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As LongPrivate Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam Long Long, Func As Long, ByVal hwnd As Long, Bysg Msg As Long, ByVal wParam Long Long,, ByVal lParivam, Longnd Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As LongHB, ByVal NewLongA" (ByVal hwnd As Long, ByVal nIndex As LongHB, EM_SETRECTNP = &HB4Private Const GWL_WNDPROC = (-4)Private Const WM_CHAR = &H102Private Const WM_PASTE As Long = &H302Private prevWndProc As LongPublic ClipText As StringPublic Sub DisableAbTextTargetTargetTargetBox, SetWindowLong TargetTextBox.hwnd, GWL_WNDPROC, AddressOf WndProcEnd SubPrivate Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim Temp As String SelectVal wParam As Long, ByVal lParam As Long) As Long Dim Temp As String Select Select Msg WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) Case WM_PASTE ClipText = Clipboard.GetText Temp = Replace(ClipText, Chr(10), "") Temp = Replace(Temp, Chr(13), "") Clipboard.Clear Clipboard.SetText Temp WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) Clipboard.Clear Clipboard.SetText ClipText Case Else WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) End SelectEnd FunctionSub VerMiddleText(mForm As form, mText As TextBox) If mText.MultiLine = False The RLine = False The RECT tmpTop As Long, tmpBot As Long SendMessage mText.hwnd, EM_GETRECT, 0, rc With mForm.Font .Name = mText.Font.Name .Size = mText.Font.Size .Bold = mText.Font.Bold End With tmpTop = ((rc.Bottom - rc.Top ) - _ (mText.Parent.TextHeight("H ") / Screen.TwipsPerPixelY)) / 2 + 2 tmpBot = ((rc.Bottom - rc.Top) + _ (mText.Parent.TextHeight("H ") / Screen.TwipsPerPixelY)) / 2 + 2 rc.Top = tmpTop rc.Bottom = tmpBot mText.Alignment = vbCenter SendMessage mText.hwnd, EM_SETRECTNP, 0&, rc mText.Refresh DisableAbility mTextEnd Sub'//////////////////////////////////////////////// ///////'以下為窗體代碼'//////////////////////////////////////////////// ///////Private Sub Form_Load() '================注意! ! ! ================= '多行屬性必須為真,暨Text1.MultiLine = True '此屬性為唯讀屬性,請在設計時修改'換行會被之後的程式碼屏蔽,不想屏蔽可自行修改'========================================= == '呼叫此函數就好了VerMiddleText Me, Text1 Caption = Len(Text1)End Sub