โค้ดตัวอย่างในบทความนี้สามารถบรรลุผลของการจัดกึ่งกลางกล่องข้อความ VB ในแนวตั้ง หมายเหตุที่นี่: การตั้งค่าแอตทริบิวต์หลายบรรทัดในโค้ดฟอร์ม Form_Load() จะต้องเป็นจริง นั่นคือ Text1.MultiLine = True คุณลักษณะนี้เป็นแอตทริบิวต์แบบอ่านอย่างเดียว โปรดแก้ไขเมื่อถึงเวลาออกแบบ โดยโค้ดที่ตามมา ไม่ต้องการ โล่สามารถแก้ไขได้ด้วยตัวเองเพียงแค่เรียกใช้ฟังก์ชันนี้
รหัสฟังก์ชันเฉพาะมีดังนี้:
'=================================================' = ============================='| ชื่อโมดูล|. TextBoxMiddle'| '==== ============================================= ===== =========================== ตัวเลือก ExplicitPrivate ประเภท RECT ซ้ายยาวที่สุด ตราบเท่าที่ด้านขวายาวตราบเท่าที่ประเภท LongEndPrivate Declare Function SendMessage Lib "user32" นามแฝง "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function SetWindowText Lib "user32 นามแฝง "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As LongPrivate ประกาศฟังก์ชัน CallWindowProc Lib "user32" นามแฝง "CallWindowProcA" (ByVal lpPrevWndFunc ตราบเท่าที่ ByVal hwnd ตราบใดที่ ByVal Msg ตราบใดที่ ByVal wParam ตราบเท่าที่ ByVal lParam ตราบใดที่ LongPrivate ประกาศฟังก์ชัน GetWindowLong Lib นามแฝง "user32" "GetWindowLongA " (ByVal hwnd ตราบใดที่ ByVal nIndex As Long) As LongPrivate ประกาศฟังก์ชัน SetWindowLong Lib "user32" นามแฝง "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const EM_GETRECT = &HB2Private Const EM_SETRECTNP = &HB4Private Const GWL_WNDPROC = (-4) เอกชน WM_CHAR = &H102Private Const WM_PASTE As Long = &H302Private prevWndProc As LongPublic ClipText As StringPublic Sub DisableAbility (TargetTextBox As TextBox) prevWndProc = GetWindowLong (TargetTextBox.hwnd, GWL_WNDPROC) SetWindowLong TargetTextBox.hwnd, GWL_WNDPROC, AddressOf WndProcEnd ฟังก์ชัน SubPrivate WndProc (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim Temp As String Select Case Msg Case WM_CHAR ถ้า wParam <> 13 จากนั้น WndProc = CallWindowProc (prevWndProc , hwnd, Msg, wParam, lParam) กรณี WM_PASTE ClipText = Clipboard.GetText Temp = แทนที่ (ClipText, Chr (10), "") Temp = แทนที่ (Temp, Chr (13), "") Clipboard.Clear Clipboard.SetText Temp WndProc = CallWindowProc (prevWndProc, hwnd, Msg , wParam, lParam) คลิปบอร์ด ล้างคลิปบอร์ด SetText ClipText Case Else WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) สิ้นสุด SelectEnd FunctionSub VerMiddleText (mForm As form, mText As TextBox) ถ้า mText.MultiLine = False จากนั้นออกจาก Sub Dim rc As RECT, tmpTop As Long, tmpBot As ส่งข้อความยาว mText.hwnd, EM_GETRECT, 0, rc ด้วย mForm.Font .Name = mText.Font.Name .Size = mText.Font.Size .Bold = mText.Font.Bold จบด้วย 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 ส่งข้อความ mText.hwnd, EM_SETRECTNP, 0&, rc mText.Refresh DisableAbility mTextEnd ย่อย'//////////////////////////////////////////////// /// ///////'ต่อไปนี้เป็นแบบฟอร์ม รหัส'//////////////////////////////////////////////// /// ///////ส่วนตัว Sub Form_Load() '================ โปรดทราบ! - - ================= 'แอตทริบิวต์หลายบรรทัดจะต้องเป็นจริง และ Text1.MultiLine = True 'แอตทริบิวต์นี้เป็นแอตทริบิวต์แบบอ่านอย่างเดียว โปรดแก้ไขในขณะออกแบบ' การบล็อครหัส หากไม่ต้องการบล็อคสามารถแก้ไขได้ด้วยตัวเอง'=============================== ============= == 'เพียงเรียกใช้ฟังก์ชันนี้ VerMiddleText Me, Text1 Caption = Len(Text1)End Sub