|
Bạn có thể
thực hiện ví dụ đơn giản như sau. Khởi động VB6 và
tạo một
project
mới thuộc loại Standard EXE. Chọn mục
Components
trên trình đơn
Project,
rồi đánh dấu chọn mục
Microsoft FlexGrid Control 6.0
trên hộp thoại
Components.
Bấm
OK
để thêm thành phần
MSFlexGrid
vào ứng dụng.
Trên
Form1
mặc định, vẽ một ComboBox có tên
Combo1,
một MSFlexGrid có tên
MSFlexGrid1.
Gõ đoạn mã 1 vào
Form1.
Xong, bạn ghi
project
lại,
compile
thành tập tin .EXE rồi chạy thử.
Hình 1

Đoạn mã 1
Option Explicit
Private Sub
Form_Unload(Cancel As
Integer)
If IsHooked Then
Unhook
' Ngừng kiểm tra các
message.
End If
End Sub
Private Sub
MSFlexGrid1_MouseUp(Button
As Integer, _
Shift As Integer, x As
Single, y As Single)
Static CurrentWidth As
Single
' Kiểm tra xem kích
thước bề ngang của ô có thay đổi không
If
MSFlexGrid1.CellWidth <> CurrentWidth Then
Combo1.Width = MSFlexGrid1.CellWidth
‘ Nếu có thì thay đổi
kích thước Combo1
CurrentWidth =
MSFlexGrid1.CellWidth
End If
End Sub
Private Sub
Form_Load()
gHW = MSFlexGrid1.hWnd
Hook
' Bắt đầu kiểm tra các
message.
MSFlexGrid1.AllowUserResizing = flexResizeColumns
MSFlexGrid1.Cols = 4
MSFlexGrid1.Rows = 6
MSFlexGrid1.RowHeightMin = Combo1.Height
Combo1.Visible = False
Combo1.ZOrder (0)
Combo1.Width =
MSFlexGrid1.CellWidth
' Tạo danh sách cho
Combo1.
Combo1.AddItem "Muc thu
nhat"
Combo1.AddItem "Muc thu
hai"
Combo1.AddItem "Muc thu
ba"
Combo1.AddItem "Muc thu
tu"
Combo1.AddItem "Muc thu
nam"
End Sub
Private Sub
MSFlexGrid1_Click()
' Xác định vị trí và
kích thước ComboBox, và hiển thị nó
Combo1.Width =
MSFlexGrid1.CellWidth
Combo1.Left =
MSFlexGrid1.CellLeft + MSFlexGrid1.Left
Combo1.Top =
MSFlexGrid1.CellTop + MSFlexGrid1.Top
Combo1.Text =
MSFlexGrid1.Text
Combo1.Visible = True
End Sub
Private Sub
Combo1_Click()
' Gán trị đã chọn vào
ô, rồi ẩn ComboBox đi.
MSFlexGrid1.Text =
Combo1.Text
Combo1.Visible = False
End Sub
Thêm một
module có tên
Module1 vào
project rồi gõ đoạn mã
sau đây vào:
Option Explicit
Declare
Function
CallWindowProc Lib
"user32" Alias _
"CallWindowProcA"
(ByVal lpPrevWndFunc As Long, _
ByVal hWnd As Long,
ByVal Msg As Long, _
ByVal wParam As Long,
ByVal lParam As Long) As Long
Declare
Function
SetWindowLong Lib
"user32" Alias _
"SetWindowLongA" (ByVal
hWnd As Long, _
ByVal nIndex As Long,
ByVal dwNewLong As Long) As Long
Private Const GWL_WNDPROC = -4
Private Const WM_SIZE = &H5
Private Const WM_PAINT = &HF
Private lpPrevWndProc As Long
Public IsHooked As Boolean
Public gHW As Long
Public Sub
Hook()
If Not IsHooked Then
lpPrevWndProc =
SetWindowLong(gHW, GWL_WNDPROC, AddressOf
WindowProc)
IsHooked = True
End If
End Sub
Public Sub
Unhook()
Dim temp As Long
temp =
SetWindowLong(gHW, GWL_WNDPROC, lpPrevWndProc)
IsHooked = False
End Sub
Function
WindowProc(ByVal hw As
Long, ByVal uMsg As _
Long, ByVal wParam As
Long, ByVal lParam As Long) As Long
WindowProc =
CallWindowProc(lpPrevWndProc, hw, _
uMsg, wParam, lParam)
If uMsg = WM_SIZE Or
uMsg = WM_PAINT Then
Form1.Combo1.Width =
Form1.MSFlexGrid1.CellWidth
Form1.Combo1.Left =
Form1.MSFlexGrid1.CellLeft + Form1.MSFlexGrid1.Left
Form1.Combo1.Top =
Form1.MSFlexGrid1.CellTop + Form1.MSFlexGrid1.Top
End If
End Function
|