Ẩn thanh cuộn ListBox (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

dinhthientan

Thành viên mới
Tham gia
10/9/08
Bài viết
35
Được thích
6
Kính gửi các anh chị trên Diễn đàn. Tôi có tạo một Form có 02 ListBox & 01 thanh cuộn điều khiển cả 02 ListBox này. Tôi đã tìm kiếm nhiều trên các trang web nhưng không thể ẩn được thanh cuộn của 02 ListBox. Rất mong các anh chị giúp code ẩn thanh cuộn của 02 ListBox này. Tôi sử dụng Win 8.1 (64bit). Cảm ơn các anh chị
 

File đính kèm

có một cách đơn giản là che thanh cuộn đi bằng cách nhét listbox vào trong một frame (không có caption, border) với height = height của listbox nhưng width nhỏ hơn.
 
Upvote 0
Kính gửi các anh chị trên Diễn đàn. Tôi có tạo một Form có 02 ListBox & 01 thanh cuộn điều khiển cả 02 ListBox này. Tôi đã tìm kiếm nhiều trên các trang web nhưng không thể ẩn được thanh cuộn của 02 ListBox. Rất mong các anh chị giúp code ẩn thanh cuộn của 02 ListBox này. Tôi sử dụng Win 8.1 (64bit). Cảm ơn các anh chị
Mình nghĩ không che được, chỉ cho chiều cao Lb nhiều hơn danh sách
 
Upvote 0
Mình nghĩ không che được, chỉ cho chiều cao Lb nhiều hơn danh sách

Tôi nghĩ là làm được (search google sẽ thấy)
Mấy trò này tôi không khoái lắm nên chưa nghiên cứu... bởi làm xong thì điều nghịch lý xảy ra: Code màu mè còn dài hơn code chính
 
Upvote 0
Khai báo API FindWindowEx của bạn còn thiếu ByVal hWnd2 As Long.
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Trong đó: hWnd1 là handle của userform, tìm được bằng hàm FindWindow; hWnd2=0; lpsz1 là Class name của listbox ("F3 Server 60000000"); lpsz2=vbNullString. Khi gọi hàm FindWindowEx(hWnd1, 0, "F3 Server 60000000"", vbNullString) mình chỉ tìm được handle của listbox2, còn listbox1 không biết tìm bằng cách nào? Vì vậy mình chỉ tắt được scroll bar của listbox2.
Còn vấn đề của bạn có thể giải quyết theo cách đơn giản như sau: listbox có chiều cao chứa được 10 dòng, đầu tiên gán RowSource="A1:A10", khi con trỏ đến dòng trên cùng hoặc dưới cùng, bấm nút lên hay xuống thì thay đổi lại RowSource cho phù hợp hoặc xóa toàn bộ listbox rồi nạp 10 dòng thủ công.
 
Upvote 0
Khai báo API FindWindowEx của bạn còn thiếu ByVal hWnd2 As Long.
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Trong đó: hWnd1 là handle của userform, tìm được bằng hàm FindWindow; hWnd2=0; lpsz1 là Class name của listbox ("F3 Server 60000000"); lpsz2=vbNullString. Khi gọi hàm FindWindowEx(hWnd1, 0, "F3 Server 60000000"", vbNullString) mình chỉ tìm được handle của listbox2, còn listbox1 không biết tìm bằng cách nào? Vì vậy mình chỉ tắt được scroll bar của listbox2.

Cái chỗ màu đỏ ấy không phải cố định đâu! Ít nhất trên máy tôi nó khác. Vì vậy mà rất khó để viết thành 1 Function/Sub tổng quát dùng cho mọi máy
(Khó thôi chứ không phải là không được)
-----------------------------
Còn vấn đề của bạn có thể giải quyết theo cách đơn giản như sau: listbox có chiều cao chứa được 10 dòng, đầu tiên gán RowSource="A1:A10", khi con trỏ đến dòng trên cùng hoặc dưới cùng, bấm nút lên hay xuống thì thay đổi lại RowSource cho phù hợp hoặc xóa toàn bộ listbox rồi nạp 10 dòng thủ công.
Đây là ý tưởng hay nè!
 
Upvote 0
Khai báo API FindWindowEx của bạn còn thiếu ByVal hWnd2 As Long.
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Trong đó: hWnd1 là handle của userform, tìm được bằng hàm FindWindow; hWnd2=0; lpsz1 là Class name của listbox ("F3 Server 60000000"); lpsz2=vbNullString. Khi gọi hàm FindWindowEx(hWnd1, 0, "F3 Server 60000000"", vbNullString) mình chỉ tìm được handle của listbox2, còn listbox1 không biết tìm bằng cách nào? Vì vậy mình chỉ tắt được scroll bar của listbox2.
Còn vấn đề của bạn có thể giải quyết theo cách đơn giản như sau: listbox có chiều cao chứa được 10 dòng, đầu tiên gán RowSource="A1:A10", khi con trỏ đến dòng trên cùng hoặc dưới cùng, bấm nút lên hay xuống thì thay đổi lại RowSource cho phù hợp hoặc xóa toàn bộ listbox rồi nạp 10 dòng thủ công.

tắt scrollbar bằng cách nào vậy bạn ?
 
Upvote 0
Máy em dùng Excel 2003 thì class name như vậy, không biết của người khác thế nào?
Còn nếu tìm được hwnd_list của listbox bằng hàm FindWindowEx như trên (mình mới chỉ tìm được listbox2) thì dùng hàm ShowScrollBar(hwnd_list,3,FALSE) để tắt cả 2 scrollbar đi.
 
Upvote 0
Máy em dùng Excel 2003 thì class name như vậy, không biết của người khác thế nào?
Còn nếu tìm được hwnd_list của listbox bằng hàm FindWindowEx như trên (mình mới chỉ tìm được listbox2) thì dùng hàm ShowScrollBar(hwnd_list,3,FALSE) để tắt cả 2 scrollbar đi.
cái đó không đúng đâu nha bạn . con số trong classname được tính ngẫu nhiên và thay đổi sau khi khởi động lại máy
 
Upvote 0
cái đó không đúng đâu nha bạn . con số trong classname được tính ngẫu nhiên và thay đổi sau khi khởi động lại máy
Máy tôi khởi động lại vài lần rồi class name vẫn là F3 Server 60000000. Nếu version Excel khác nhau thì class name khác nhau nhưng mình không biết nếu cùng version nhưng ở các máy khác nhau thì class name có khác nhau không? Mình dùng 2003.
 
Upvote 0
Máy tôi khởi động lại vài lần rồi class name vẫn là F3 Server 60000000. Nếu version Excel khác nhau thì class name khác nhau nhưng mình không biết nếu cùng version nhưng ở các máy khác nhau thì class name có khác nhau không? Mình dùng 2003.
máy tôi chỉ cần tắt file excel mở lại là thay đổi rồi chứ chưa cần khởi động lại máy . nhưng chuyện đó không quan trọng . vì ta tìm hwnd bằng cách khác . file này tôi dùng cách khác để lấy hwnd nhưng gọi hàm ShowScrollBar không có tác dụng

trong 2 cái child hwnd tìm được có 1 cái là listbox , cái kia không phải . tôi gọi hàm đó cho cả 2 mà vẫn không được . bạn làm được thì sửa dùm tôi . máy bạn 32 bit thì thay những cái LongPtr => Long
 

File đính kèm

Upvote 0
có một cách đơn giản là che thanh cuộn đi bằng cách nhét listbox vào trong một frame (không có caption, border) với height = height của listbox nhưng width nhỏ hơn.
Tôi đã làm theo cách của Jack nt. Tôi nghĩ cũng tạm ổn.
 

File đính kèm

Upvote 0
máy tôi chỉ cần tắt file excel mở lại là thay đổi rồi chứ chưa cần khởi động lại máy . nhưng chuyện đó không quan trọng . vì ta tìm hwnd bằng cách khác . file này tôi dùng cách khác để lấy hwnd nhưng gọi hàm ShowScrollBar không có tác dụng
Đúng là ShowScrollbar không có tác dụng ở VBA còn VB6 chạy tốt.
 
Upvote 0

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

Back
Top Bottom