Làm sao để có thể dùng chuột điều chỉnh kích thước một cửa sổ Form ?

  • Thread starter Thread starter BNTT
  • Ngày gửi Ngày gửi
Liên hệ QC

BNTT

Bùi Nguyễn Triệu Tường
Thành viên danh dự
Tham gia
3/7/07
Bài viết
4,946
Được thích
23,208
Nghề nghiệp
Dạy đàn piano
Xin cho hỏi: Có lệnh nào cho phép thay đổi được kích thước của một cửa sổ Form đang mở, giống như chúng ta thường dùng chuột rà vào các cạnh của một cửa sổ rồi dùng chuột kéo để điều chỉnh kích thước của nó ?
 
Em thấy dùng các thuộc tính của Form là được, ví dụ :

Frm1.Width = 500
Frm1.Height = 500


Ý anh có phải vậy không?
 
Upvote 0
Em thấy dùng các thuộc tính của Form là được, ví dụ :

Frm1.Width = 500
Frm1.Height = 500


Ý anh có phải vậy không?
Đó là cố định kích thước Form.
Ý mình là khi một cửa sổ Form đang mở, mình có thể rà chuột vào các cạnh của nó kể kéo nó to ra, nhỏ lại... Giống như cái cửa sổ Firefox mà mình đang dùng để mở GPE nè...
 
Upvote 0
Xin cho hỏi: Có lệnh nào cho phép thay đổi được kích thước của một cửa sổ Form đang mở, giống như chúng ta thường dùng chuột rà vào các cạnh của một cửa sổ rồi dùng chuột kéo để điều chỉnh kích thước của nó ?

phải thế này không anh

PHP:
Private Sub m_objResizer_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    If Button = 1 Then
        m_sngLeftResizePos = X
        m_sngTopResizePos = Y
        m_blnResizing = True
    End If
    
End Sub

PHP:
Private Sub m_objResizer_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

    If Button = 1 Then
        With m_objResizer
            .Move .Left + X - m_sngLeftResizePos, .Top + Y - m_sngTopResizePos
            Me.Width = Me.Width + X - m_sngLeftResizePos
            Me.Height = Me.Height + Y - m_sngTopResizePos
            .Left = Me.InsideWidth - .Width
            .Top = Me.InsideHeight - .Height
        End With
    End If
    
End Sub

PHP:
Private Sub m_objResizer_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        m_blnResizing = False
    End If
End Sub

PHP:
Private Sub UserForm_Initialize()

    m_AddResizer
    
End Sub

PHP:
Private Sub UserForm_Terminate()

    Me.Controls.Remove MResizer
    
End Sub
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Cảm ơn Thuyyeu99. Đọc qua thì có thể mường tượng được cái Code của bạn sẽ làm gì.
Nhưng cho mình hỏi, đoạn này:
PHP:
Private Sub UserForm_Initialize()
      m_AddResizer
End Sub
m_AddResizer ở đâu ra mà gọi nó chạy ?
 
Upvote 0
Cảm ơn Thuyyeu99. Đọc qua thì có thể mường tượng được cái Code của bạn sẽ làm gì.
Nhưng cho mình hỏi, đoạn này:
PHP:
Private Sub UserForm_Initialize()
      m_AddResizer
End Sub
m_AddResizer ở đâu ra mà gọi nó chạy ?

Xin lỗi anh em chép thiếu. Cái này là em suu tầm chứ không phải của em

PHP:
Option Explicit

Private Const MResizer = "ResizeGrab"
Private WithEvents m_objResizer As MSForms.Label
Private m_sngLeftResizePos As Single
Private m_sngTopResizePos As Single
Private m_blnResizing As Single

Private Sub m_AddResizer()
'
' add resizing control to bottom righthand corner of userform
'
    Set m_objResizer = Me.Controls.Add("Forms.label.1", MResizer, True)
    With m_objResizer
        With .Font
            .Name = "Marlett"
            .Charset = 2
            .Size = 14
            .Bold = True
        End With
        .BackStyle = fmBackStyleTransparent
        .AutoSize = True
        .BorderStyle = fmBorderStyleNone
        .Caption = "o"
        .MousePointer = fmMousePointerSizeNWSE
        .ForeColor = RGB(100, 100, 100)
        .ZOrder
        .Top = Me.InsideHeight - .Height
        .Left = Me.InsideWidth - .Width
    End With
    
End Sub
 
Upvote 0
Spam 1 chút, bạn thuyyeu99 dạo này quá tiến bộ.
Chúc thành công nhiều hơn nữa.
Nhờ mod xóa hộ sau 3 h.
Cám ơn!
 
Upvote 0
Dùng Chuột để Resize Userform

Xin cho hỏi: Có lệnh nào cho phép thay đổi được kích thước của một cửa sổ Form đang mở, giống như chúng ta thường dùng chuột rà vào các cạnh của một cửa sổ rồi dùng chuột kéo để điều chỉnh kích thước của nó ?

Cái này giải pháp dùng hàm API là gọn nhất. Anh paste đoạn code em viết dưới đây vào Userform là được.
Mã:
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongW" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongW" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const GWL_STYLE As Long = -16
Private Const WS_THICKFRAME As Long = &H40000
Private Const WS_SIZEBOX As Long = WS_THICKFRAME

Private hFrm&, OldStyle&

Private Sub UserForm_Initialize()
    hFrm = FindWindow("ThunderDFrame", Me.Caption)
    OldStyle = GetWindowLong(hFrm, GWL_STYLE)
    Call SetWindowLong(hFrm, GWL_STYLE, OldStyle Or WS_SIZEBOX)
End Sub

Private Sub UserForm_Terminate()
    Call SetWindowLong(hFrm, GWL_STYLE, OldStyle)
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom