Vui lòng giúp tôi lấy tọa độ màn hình của hình chữ nhật biểu tượng trạng thái của TTreeNode
trong một TreeView
(Tôi có nghĩa là các biểu tượng được chỉ định trong thuộc tính TTreeView.StateImages
).Delphi, TTreeXem: làm thế nào để có được tọa độ màn hình của nút cho trước và biểu tượng của nó?
Có chức năng TTreeView.GetHitTestInfoAt(X, Y: integer): : THitTests
, nhưng đó không phải là điều tôi đang tìm kiếm; nó cho biết liệu các tọa độ đã cho có tương ứng với nhãn hoặc biểu tượng hay biểu tượng trạng thái của mục hay không, nhưng tôi cần biết phần nào của biểu tượng đã được nhấp.
(Lý do là tôi muốn triển khai các nút TreeView
có hai hộp kiểm cho mỗi mục và tôi sử dụng StateImages
để mô phỏng các hộp kiểm (một trạng thái là mục được chọn, trạng thái kia là mục không được chọn). hiểu, để biết một trong các hộp kiểm được nhấp vào, tôi cần phải so sánh các tọa độ con trỏ với tọa độ biểu tượng trạng thái. Làm thế nào tôi có thể nhận được chúng?)
Macro gọi dễ hơn nhiều so với việc gửi tin nhắn. Nhưng ngay cả khi đó, bạn không cần gửi thông điệp 'TVM_GETITEMRECT' rõ ràng vì Delphi có [' TTreeNode.DisplayRect'] (http://docwiki.embarcadero.com/Libraries/XE2/en/Vcl.ComCtrls.TTreeNode .DisplayRect) phương pháp mà nội bộ gọi macro tương ứng 'TVM_GETITEMRECT' tin nhắn và trả về hình chữ nhật bounding cho một nút cây. – TLama
Cảm ơn rất nhiều! Nó đã làm việc! Đây là mã tôi đã tạo: 'sử dụng CommCtrl; ... var R: TRect; pItemRect: con trỏ; bắt đầu pItemRect: = @R; HTREEITEM (pItemRect ^): = TreeView.Selected.ItemId; SendMessage (TreeView1.Handle, TVM_GETITEMRECT, WParam (true), LParam (pItemRect)); ... ' - đặt vào' R' tọa độ của văn bản mục đã chọn. Do đó, tọa độ X đúng của biểu tượng là 'R.Left - 4' (có 3 pixel trống giữa biểu tượng và văn bản). –
Bây giờ bạn có thể đơn giản hóa mã của bạn để sử dụng 'TreeView.Selected.DisplayRect' vì phương thức' DisplayRect' chỉ đơn thuần là một trình bao bọc cho thông báo 'TVM_GETITEMRECT'. Và hãy cẩn thận với mã như vậy vì không phải lúc nào cũng phải được chọn một số nút, do đó 'TTreeView.Selected' có thể là' nil'. Dù sao, nếu điều đó giải quyết được câu hỏi của bạn, đừng quên ['chấp nhận câu trả lời'] (http://meta.stackexchange.com/a/5235/179541). – TLama