2013-08-21 19 views
5

Tôi có một số TListView với một số khu vực chuyên biệt hiển thị các mẹo công cụ. Vì tôi không thể thiết kế xác định các khu vực cụ thể trên TListView để hiển thị nhiều hơn đầu công cụ trên mỗi Subitem.Cách tính toán mức độ người dùng đã cuộn trong TListView nhưng không phải khi người dùng đang cuộn?

Vì vậy, tôi đã tạo một cấu trúc có chứa vị trí của họ như ý chí làm đầu công cụ (gợi ý). Phần này hoạt động tốt. Tuy nhiên, các vị trí này tương đối bên trong số TListView ở trên cùng, vì vậy khi người dùng đã cuộn, MousePos vẫn đề cập đến hiển thị hoàn toàn của TListView, bất kể vị trí được cuộn đến TListView.

Điều đó có ý nghĩa; nhưng tôi muốn thêm vào tọa độ Y như thế nào đến nay người dùng đã cuộn xuống. (Tôi cũng muốn làm tương tự cho phối hợp X, nhưng điều đó ít liên quan hơn.) Nhưng theo như tôi có thể thu thập có A) không có cơ chế trên TListView để phát hiện điều này và B) hầu hết các hướng dẫn nói về TListView và cuộn tham chiếu đến việc di chuyển vì nó đang diễn ra và không phải trong trường hợp của tôi, trong một sự kiện khác (trong trường hợp này là di chuyển chuột).

Vậy làm thế nào tôi có thể phát hiện hoặc tính toán khoảng cách mà người dùng đã cuộn trong khi không có trong một sự kiện cuộn?

+0

Thuộc tính 'TopItem' của' TListView' có giúp ích gì không? – lurker

+0

@mbratch: Vâng, đó chắc chắn là một tài sản thú vị. Nhưng 'Position.Y' của nó là vị trí của nó trong bảng, và tôi không biết làm thế nào để có được chiều cao của mỗi mục. – Svip

+1

@TLama: Cảm ơn bạn, đã hoạt động chính xác như tôi cần. – Svip

Trả lời

6

Có một cơ chế: ListView.ViewOrigin.

Đọc ViewOrigin để xác định nguồn gốc hợp lý của hình ảnh danh sách. Khi chế độ xem danh sách không được cuộn, ViewOrigin là (0,0). Nếu không, sử dụng toạ độ x để xác định số pixel mà chế độ xem là được cuộn theo chiều ngang và toạ độ y để xác định số lượng pixel chế độ xem được cuộn theo chiều dọc.

var 
    Pt: TPoint; 
begin 
    Pt := ListView1.ViewOrigin; 


này chỉ nên làm việc nếu listview của bạn là trong vsIcon hoặc vsSmallIcon xem phong cách. (Bạn dường như không đề cập đến kiểu xem bạn đang sử dụng). Tuy nhiên với một thử nghiệm đơn giản ở đây, có vẻ như nó cũng hoạt động theo kiểu vsReport. ViewOrigin.Y cung cấp cùng một giá trị chính xác của 'nPos' của TScrollInfo được truy xuất bằng một cuộc gọi GetScrollInfo.