Как изменить значение дефолтного свойства объекта? - VB

Узнай цену своей работы

Формулировка задачи:

Требуется помощь. Суть такова: имеется код на Visual Basic 6.0, динамически добавляющий на форму RichTextBox. По умолчанию свойство RichTextBox' а Appearance равно 1 (rtfThreeD). Но для добавляемого RichTextBox' а необходимо, чтобы это свойство было 0 (rtfFlat). Если RichTextBox добавить на форму во время разработки, то у него можно изменить это свойство, однако в рун-тайме компилятор пишет, что свойство Appearance -

ReadOnly

. Как можно назначить другое дефолтное значение свойства для всех добавляемых контролов?

Решение задачи: «Как изменить значение дефолтного свойства объекта?»

textual
Листинг программы
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
 
Private Const WS_EX_CLIENTEDGE As Long = &H200&
 
Private Const SWP_FRAMECHANGED As Long = &H20
Private Const SWP_NOMOVE As Long = &H2
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOZORDER As Long = &H4
 
Private Const GWL_EXSTYLE As Long = &HFFFFFFEC
Private Const GWL_WNDPROC As Long = &HFFFFFFFC
 
Private Sub cmdChange_Click()
    Dim prev As Long, os As Long
    os = GetWindowLong(rtb.hwnd, GWL_EXSTYLE) And WS_EX_CLIENTEDGE
    prev = SetWindowLong(rtb.hwnd, GWL_WNDPROC, AddressOf WndProc)
    SetWindowLong rtb.hwnd, GWL_EXSTYLE, Not os And WS_EX_CLIENTEDGE
    SetWindowLong rtb.hwnd, GWL_WNDPROC, prev
    SetWindowPos rtb.hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED Or SWP_NOMOVE Or SWP_NOSIZE Or SWP_NOZORDER
End Sub

Оцени полезность:

12   голосов , оценка 3.833 из 5