Hỏi: Hiển thị thông tin khi chỉ chuột vào CommandButton (3 người xem)

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

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

pro8x

Thành viên hoạt động
Tham gia
3/11/11
Bài viết
142
Được thích
24
Xin chào mọi người trên 4r. Em có làm 1 form và khi di chuột vào botton trên form sẽ hiện thông tin ( Kiểu như comment trên cell vậy), Hiện tại em dang dùng Controltiptext nhưng có vấn đề là kiểu hiển thị này chỉ hiển thị trên 1 dòng, nếu thông tin dai thì sẽ rất khó xem, Mọi người chỉ em cách để hiển thị dưới dạng hình vuuông như comment trên cell được không ah
 

File đính kèm

Xin chào mọi người trên 4r. Em có làm 1 form và khi di chuột vào botton trên form sẽ hiện thông tin ( Kiểu như comment trên cell vậy), Hiện tại em dang dùng Controltiptext nhưng có vấn đề là kiểu hiển thị này chỉ hiển thị trên 1 dòng, nếu thông tin dai thì sẽ rất khó xem, Mọi người chỉ em cách để hiển thị dưới dạng hình vuuông như comment trên cell được không ah
Thử một phương án khác, dùng tạm một cái Label để chứa thông tin và sử dụng sự kiện MouseMove để ẩn/hiện Label này.
Bạn tham khảo trong file nhé.
 

File đính kèm

Upvote 0
Cảm ơn anh đã hướng dẫn, nhưng có cách khác không ạ, bởi vì file của em có tất cả 26 botton và mỗi botton lịa tương ứng với ghi chú ở 1 cell nhất định, nếu dùng label thì phẩi thêm nhiều Label lắm.
File e gửi 4r là file ví dụ ạ
 
Upvote 0
Cảm ơn anh đã hướng dẫn, nhưng có cách khác không ạ, bởi vì file của em có tất cả 26 botton và mỗi botton lịa tương ứng với ghi chú ở 1 cell nhất định, nếu dùng label thì phẩi thêm nhiều Label lắm.
File e gửi 4r là file ví dụ ạ
Thì cũng chỉ cần dùng một cái Label đó thôi chứ làm gì phải dùng đến 26 cái luôn dữ vậy?!
Với bài này, tôi nghĩ là nếu biết dùng đến ClassModule thì code sẽ gọn gàng, tiếc là tôi mù tịt món này.

Ý tưởng là: Đặt tên các CommandButton theo thứ tự, chẳng hạn Cmd1, Cmd2,..., tương ứng với các ô chứa thông tin Z1, Z2,... Sau đó dựa vào số thứ tự trong tên CommandButton để xác định địa chỉ ô chứa thông tin. Hoặc nếu không thể bố trí tương ứng thứ tự tên như vậy thì có thể sử dụng câu lệnh Select Case để quyết định lấy thông tin từ ô nào đưa vào Label1. Hoặc cũng có thể đưa địa chỉ ô chứa thông tin vào thuộc tính Tag của mỗi CommandButton này rồi dựa vào thuộc tính này để lấy thông tin.
 
Upvote 0
Hi, e không rành về vụ này lắm, CommandButton và cell theo thứ tự tăng dấn từ 1 đến 26, anh có thể sửa lại code giúp e, hoặc giải thích kỹ hơn đc k, vì e chưa hiểu cách lấy dữ liệu vào Label1 như thế nào khi chuột chỉ và CommandButton thay đỏi
 
Upvote 0
ah, Có phải mỗi 1 CommandButton lại có 1 sụ kiện Mousemove không bác
 
Upvote 0
Thì cũng chỉ cần dùng một cái Label đó thôi chứ làm gì phải dùng đến 26 cái luôn dữ vậy?!
Với bài này, tôi nghĩ là nếu biết dùng đến ClassModule thì code sẽ gọn gàng, tiếc là tôi mù tịt món này.

Ý tưởng là: Đặt tên các CommandButton theo thứ tự, chẳng hạn Cmd1, Cmd2,..., tương ứng với các ô chứa thông tin Z1, Z2,... Sau đó dựa vào số thứ tự trong tên CommandButton để xác định địa chỉ ô chứa thông tin. Hoặc nếu không thể bố trí tương ứng thứ tự tên như vậy thì có thể sử dụng câu lệnh Select Case để quyết định lấy thông tin từ ô nào đưa vào Label1. Hoặc cũng có thể đưa địa chỉ ô chứa thông tin vào thuộc tính Tag của mỗi CommandButton này rồi dựa vào thuộc tính này để lấy thông tin.
Em thử test vào file của e thì có vấn đề như sau:
1. Vì độ dài ngắn ghi chú khác nhau dẫn đến Label hiển thị bị thay dổi rất xấu.
2. Label bị Button che khuất
3. Label không hiện thị ngay tại vị trí Button chỉ mouse
 
Upvote 0
Thì cũng chỉ cần dùng một cái Label đó thôi chứ làm gì phải dùng đến 26 cái luôn dữ vậy?!
Với bài này, tôi nghĩ là nếu biết dùng đến ClassModule thì code sẽ gọn gàng, tiếc là tôi mù tịt món này.

Ý tưởng là: Đặt tên các CommandButton theo thứ tự, chẳng hạn Cmd1, Cmd2,..., tương ứng với các ô chứa thông tin Z1, Z2,... Sau đó dựa vào số thứ tự trong tên CommandButton để xác định địa chỉ ô chứa thông tin. Hoặc nếu không thể bố trí tương ứng thứ tự tên như vậy thì có thể sử dụng câu lệnh Select Case để quyết định lấy thông tin từ ô nào đưa vào Label1. Hoặc cũng có thể đưa địa chỉ ô chứa thông tin vào thuộc tính Tag của mỗi CommandButton này rồi dựa vào thuộc tính này để lấy thông tin.

giúp sức với bác 1 tay -0-/., hehe

Link: https://www.mediafire.com/?83vl1siqsdlo8la
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn bạn, đúng cài mình cần, cho mình hỏi thêm là có thể Fix kích thước của Label khi hiển thị không nhỉ, Còn vụ Label hiển thị bị Button che khuất nũa bạn

 
Upvote 0
ah, Có phải mỗi 1 CommandButton lại có 1 sụ kiện Mousemove không bác
Nếu không biết dùng ClassModule thì nó là như vậy, còn nếu biết dùng thì tất cả gom lại thành 1 sự kiện được khai báo trong ClassModule. Thú thật là nãy giờ tôi nghiên cứu topic này mà chưa "làm ăn" được gì với nó cả: Dùng Class Module để tạo sự kiện người dùng (như trên tôi đã nói là tôi mù tịt món này).
Em thử test vào file của e thì có vấn đề như sau:
1. Vì độ dài ngắn ghi chú khác nhau dẫn đến Label hiển thị bị thay dổi rất xấu.
2. Label bị Button che khuất
3. Label không hiện thị ngay tại vị trí Button chỉ mouse
1. Bạn nới rộng kích thước Label thêm cho phù hợp là được.
2. Bạn thêm câu lệnh .ZOrder vào trong câu lệnh With LblTip là được.
3. Không hiện ngay đó là do tôi đặt .Left = X + 50 : .Top = Y. Bạn chỉnh 2 câu lệnh này cho phù hợp là được.
 
Upvote 0
Xin chào mọi người trên 4r. Em có làm 1 form và khi di chuột vào botton trên form sẽ hiện thông tin ( Kiểu như comment trên cell vậy), Hiện tại em dang dùng Controltiptext nhưng có vấn đề là kiểu hiển thị này chỉ hiển thị trên 1 dòng, nếu thông tin dai thì sẽ rất khó xem, Mọi người chỉ em cách để hiển thị dưới dạng hình vuuông như comment trên cell được không ah

Mọi người định chơi class thì ta chơi ToolTip.

Làm chơi chút.
Thực ra tôi đã chơi từ lâu lắm rồi, từ hồi còn nghịch Delphi.

Tìm hiểu thêm trên trang

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250(v=vs.85).aspx

Có những code ví dụ, hướng dẫn.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mọi người định chơi class thì ta chơi ToolTip.

Làm chơi chút.
Thực ra tôi đã chơi từ lâu lắm rồi, từ hồi còn nghịch Delphi.

Tìm hiểu thêm trên trang

http://msdn.microsoft.com/en-us/library/windows/desktop/bb760250(v=vs.85).aspx

Có những code ví dụ, hướng dẫn.
Thiệt tình thì em không đủ trình để hiểu code trong file, nhưng mà em tải file về, mở Form lên, di chuyển chuột khắp nơi mà không thấy động tĩnh gì cả. Nhờ bác chỉ giúp cách khắc phục.
Cảm ơn bác!
 
Upvote 0
Anh NGHIAPHUC em mở file và thấy chạy bình thường mà, anh thử tải lại xem. Thank bạn siwtom nhé, rất đẹp
 
Upvote 0
à các anh cho e hỏi thêm chút, liệu có thể cho hiện ảnh thay vì chữ được không nhỉ ( trên cell là đường dẫn ảnh để tự load, hoặc chèn ảnh vào cell rùi load lên => Cái này e làm được, nên nếu được thì hướng dẫn em phần load lên trên form)
 
Upvote 0
Mình mở cũng không thấy động tĩnh gì, có phải là thiếu Controls gì không nhỉ?
Thiệt tình thì em không đủ trình để hiểu code trong file, nhưng mà em tải file về, mở Form lên, di chuyển chuột khắp nơi mà không thấy động tĩnh gì cả. Nhờ bác chỉ giúp cách khắc phục.
Cảm ơn bác!

Lạ hen, cũng là file đó, có máy thấy có máy không. Máy của anh hoạt động bình thường!
 

File đính kèm

  • Picture1.jpg
    Picture1.jpg
    22.2 KB · Đọc: 105
Upvote 0
Mình mở cũng không thấy động tĩnh gì, có phải là thiếu Controls gì không nhỉ?

Không phải.
Nói nôm na thì như thế này. ToolTop có thể tạo bằng nhiều cách. Trước tiên phải tạo một cửa sổ và nó sẽ quản lý các tool. Những tool này phải thêm vào tập các tool quản lý bởi cái cửa sổ kia. Có nhiều cách tạo tool. Tôi dùng cách như sau:
Nếu trong vùng client area của một cửa sổ nào đó ta muốn hiển thị tooltip thì ta cho thuộc tính hWnd của cấu trúc tagTOOLINFOW = handle của cửa sổ đó. Tiếp theo ta thiết lập thuộc tính rc của cấu trúc trên = vùng hình chữ nhật trong client area (thiết lập tọa độ (x, y) của góc trái bên trên và góc phải bên dưới) của cửa sổ có handle là hWnd. Và thiết lập thuộc tính lpszText = text cần hiển thị. Sau đó ta thêm tool có các thuộc tính như thế vào tập tool quản lý bởi cửa sổ tạo ban đầu. Do có 3 thông tin là hWnd, rc và lpszText nên "người quản lý" tool biết là khi trỏ chuột "đi vào" vùng có tọa độ được xác định bởi rc trong cửa sổ có handle là hWnd thì nó phải hiển thị tooltip có text = lpszText. Và khi trỏ chuột "đi ra khỏi" vùng rc thì nó phải "tắt" tooltip.
Nếu ta cần hiển thị những text khác nhau khi trỏ chuột đi vào những vùng khác nhau trong client area của cửa sổ có handle là hWnd thì với mỗi vùng ta tạo và thêm 1 tool với rc (xác định vùng hình chữ nhật) và lpszText (text cần hiển thị) khác nhau.

UserForm có class là "ThunderDFrame" (Office >= 2000). Vùng client area lại có một cửa sổ con (con của cửa sổ "ThunderDFrame") và trên nó các CommandButton, ComboBox, Image được vẽ. Ta phải thiết lập handle của cửa sổ con này cho thuộc tính hWnd kể trên.

Tôi kiểm tra trên XP Home Edition và Excel 2007 thì cửa sổ con có class là "F3 Server 60000000"

Tôi cũng đã kiểm tra trên Excel 2007 nhưng Windows 7 Starter thì cửa sỗ con không có class là "F3 Server 60000000". Vì thế không tìm thấy cửa sổ con nếu ta tìm theo class "F3 Server 60000000". Kết quả là tool của ta không có giá trị.

Tôi kiểm tra thì với Excel 2007 + Windows 7 Starter thì cửa sổ con có class là "F3 Server 6a070000"
Nếu tìm cửa sổ con có class như thế thì tooltip hiển thị bình thường.
------------
Tôi sửa code: trước tiên tìm cửa sổ con có class là "F3 Server 60000000", nếu không tìm thấy thì tìm cửa sổ con có class là "F3 Server 6a070000"

Chỉ có một nỗi lo là class của cửa sổ con thay đổi liên tục thì rách việc quá. Lúc đó có lẽ không tìm theo class mà tìm "con đầu lòng" chăng?

Tôi đã gửi lại tập tin ở bài #11. Bạn và bạn nghiaphuc kiểm tra và thông báo cho tôi nhé.
 
Upvote 0
Không phải.
Nói nôm na thì như thế này. ToolTop có thể tạo bằng nhiều cách. Trước tiên phải tạo một cửa sổ và nó sẽ quản lý các tool. Những tool này phải thêm vào tập các tool quản lý bởi cái cửa sổ kia. Có nhiều cách tạo tool. Tôi dùng cách như sau:
Nếu trong vùng client area của một cửa sổ nào đó ta muốn hiển thị tooltip thì ta cho thuộc tính hWnd của cấu trúc tagTOOLINFOW = handle của cửa sổ đó. Tiếp theo ta thiết lập thuộc tính rc của cấu trúc trên = vùng hình chữ nhật trong client area (thiết lập tọa độ (x, y) của góc trái bên trên và góc phải bên dưới) của cửa sổ có handle là hWnd. Và thiết lập thuộc tính lpszText = text cần hiển thị. Sau đó ta thêm tool có các thuộc tính như thế vào tập tool quản lý bởi cửa sổ tạo ban đầu. Do có 3 thông tin là hWnd, rc và lpszText nên "người quản lý" tool biết là khi trỏ chuột "đi vào" vùng có tọa độ được xác định bởi rc trong cửa sổ có handle là hWnd thì nó phải hiển thị tooltip có text = lpszText. Và khi trỏ chuột "đi ra khỏi" vùng rc thì nó phải "tắt" tooltip.
Nếu ta cần hiển thị những text khác nhau khi trỏ chuột đi vào những vùng khác nhau trong client area của cửa sổ có handle là hWnd thì với mỗi vùng ta tạo và thêm 1 tool với rc (xác định vùng hình chữ nhật) và lpszText (text cần hiển thị) khác nhau.

UserForm có class là "ThunderDFrame" (Office >= 2000). Vùng client area lại có một cửa sổ con (con của cửa sổ "ThunderDFrame") và trên nó các CommandButton, ComboBox, Image được vẽ. Ta phải thiết lập handle của cửa sổ con này cho thuộc tính hWnd kể trên.

Tôi kiểm tra trên XP Home Edition và Excel 2007 thì cửa sổ con có class là "F3 Server 60000000"

Tôi cũng đã kiểm tra trên Excel 2007 nhưng Windows 7 Starter thì cửa sỗ con không có class là "F3 Server 60000000". Vì thế không tìm thấy cửa sổ con nếu ta tìm theo class "F3 Server 60000000". Kết quả là tool của ta không có giá trị.

Tôi kiểm tra thì với Excel 2007 + Windows 7 Starter thì cửa sổ con có class là "F3 Server 6a070000"
Nếu tìm cửa sổ con có class như thế thì tooltip hiển thị bình thường.
------------
Tôi sửa code: trước tiên tìm cửa sổ con có class là "F3 Server 60000000", nếu không tìm thấy thì tìm cửa sổ con có class là "F3 Server 6a070000"

Chỉ có một nỗi lo là class của cửa sổ con thay đổi liên tục thì rách việc quá. Lúc đó có lẽ không tìm theo class mà tìm "con đầu lòng" chăng?

Tôi đã gửi lại tập tin ở bài #11. Bạn và bạn nghiaphuc kiểm tra và thông báo cho tôi nhé.
Bác ơi con đã test thử! không thấy có hiệu ứng gì bác ạ!
Bác xem video đính kèm nhé!
 

File đính kèm

Upvote 0
Bác ơi con đã test thử! không thấy có hiệu ứng gì bác ạ!
Bác xem video đính kèm nhé!

Bạn có thể giúp tôi được không?

1. Tải ReadClass.rar về và bung ra.
2. Nếu bạn có Visual Basic thì tự compile project. Nếu không thì đã có ReadClass.exe rồi.
3. Chạy ReadClass.exe
4. Mở tập tin ở bài #11
5. Đặt UserForm và ReadClass.exe ở bên cạnh nhau rồi đưa trỏ chuột vào vd. Image
5. Bạn chụp màn hình và gửi để tôi xem. Hoặc bạn ghi lại ở dòng thứ 2 nó viết là ClassName gì.

Mà bạn dùng Excel, Windows nào đấy?

À, bạn test thế nào đấy? Video chạy nhanh nên tôi không biết bạn có dừng không. Bạn đưa trỏ chuột vào Image, hoặc CommandButton hoặc ComboBox rồi dừng một tí xem có gì hiển thị không. Không phải click gì cả.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom