يمكن للتعليمات البرمجية الموجودة في هذه المقالة تحقيق تأثير توسيط مربع النص VB TextBox عموديًا. لاحظ هنا: يجب أن يكون إعداد السمة متعددة الأسطر في كود النموذج Form_Load() صحيحًا، أي Text1.MultiLine = True. هذه السمة هي سمة للقراءة فقط. يرجى تعديلها في وقت التصميم من خلال الرموز اللاحقة، لا تريد تعديل الدرع بنفسك، فقط اتصل بهذه الوظيفة.
رموز الوظائف المحددة هي كما يلي:
'======================================================================== = =========================================================================== '==== ============================================= ===== =================== الخيار ExplicitPrivate نوع RECT يسار كأعلى طويل طويل لليمين وأسفل بطول LongEnd TypePrivate أعلن عن وظيفة SendMessage Lib "user32" الاسم المستعار "SendMessageA" (ByVal hwnd As Long، ByVal wMsg As Long، ByVal wParam As Long، lParam As Any) كما LongPrivate أعلن عن وظيفة SetWindowText Lib "user32 "الاسم المستعار "SetWindowTextA" (ByVal hwnd As Long، ByVal lpString As String) باسم LongPrivate أعلن عن وظيفة CallWindowProc Lib "user32" الاسم المستعار "CallWindowProcA" (ByVal lpPrevWndFunc As Long، ByVal hwnd As Long، ByVal Msg As Long، ByVal wParam As Long، ByVal lParam As Long) كما LongPrivate أعلن عن وظيفة GetWindowLong Lib "user32" الاسم المستعار "GetWindowLongA" (ByVal hwnd As Long، ByVal nIndex 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.h , GWL_WNDPROC، عنوان وظيفة 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 = 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 أخرى WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) End SelectEnd FunctionSub VerMiddleText(mForm As form, mText As TextBox) إذا mText.MultiLine = False ثم قم بالخروج من Sub Dim rc كـ RECT، tmpTop As Long، tmpBot As رسالة طويلة SendMessage mText.hwnd، EM_GETRECT, 0, rc مع 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&، اتفاقية روتردام mText.Refresh DisableAbility mTextEnd الفرعية'//////////////////////////////////////////////// /// ///////'ما يلي هو النموذج شفرة'//////////////////////////////////////////////// /// ///////خاص Sub Form_Load() '=========انتباه! ! ! ================= 'يجب أن تكون السمة متعددة الأسطر صحيحة، وText1.MultiLine = True 'هذه السمة هي سمة للقراءة فقط، يرجى تعديلها في وقت التصميم' حظر التعليمات البرمجية، إذا كنت لا ترغب في حظره، فيمكنك تعديله بنفسك'===================== ============= == 'فقط قم باستدعاء هذه الوظيفة VerMiddleText Me, Text1 Caption = Len(Text1)End Sub