2013-08-21 24 views
5

TListView araç ipuçlarını görüntüleyen bazı özel alanlarla çalışıyorum. Çünkü, tasarım gereği,'daki belirli alanları, Subitem için araç ipucundan daha fazla gösterecek şekilde tanımlayamıyorum.Bir kullanıcının bir TListView'da ne kadar ilerlediğini, ancak kullanıcı kaydırırken ne kadar hesaplama yapıldığını nasıl hesaplarsınız?

Bu nedenle, araç ipucu (ipucu) gibi kendi konumlarını içeren bir yapı oluşturdum. Bu bölüm iyi çalışıyor. Bununla birlikte, bu konumlar en üstte TListView içinde görelidir, bu nedenle kullanıcı bir kez kaydırdığında,hala TListView'un tam olarak görünürlüğünü belirtir, TListView'un nereye kaydırıldığına bakılmaksızın.

Bu mantıklı; ama Y-koordinatına, kullanıcının ne kadar ilerlediğini eklemek istiyorum. (Aynı şeyi X-koordinatı için de yapmak isterdim, ama bu daha az alakalı.) Ancak, toplayabildiğim kadarıyla, A) TListView'da bunu algılayacak hiçbir mekanizma yok ve B) hakkında konuşan çoğu rehber TListView ve kaydırma,veolarak gerçekleşen kaydırma işlemini kaydetmeye bakın, benim durumumda değil, farklı bir olay sırasında (bu durumda, fare hareketinde).

Kaydırma olayında değilken kullanıcının ne kadar kaydığını nasıl algılayacağım veya hesaplayayım?

+0

'TListView''ün' TopItem' özelliği hiç yardımcı olmaz mı? – lurker

+0

@mbratch: Bu kesinlikle ilginç bir özellik. Ama 'Position.Y', masanın içindeki pozisyonudur ve her bir öğenin yüksekliğini nasıl alacağımı bilmiyorum. – Svip

+1

@TLama: Teşekkür ederim, bu tam olarak ihtiyaç duyduğum gibi çalıştı. – Svip

cevap

6

Bir mekanizma var: ListView.ViewOrigin.

Liste görüntüsünün mantıksal kökenini belirlemek için ViewOrigin değerini okuyun. Liste görünümü kaydırılmadığında, ViewOrigin değeri (0,0). Aksi halde, yatay olarak kaydırılan piksel sayısını belirlemek için x koordinatını kullanın ve piksel sayısını görüntülemek için y koordinatı, dikey olarak kaydırılır. senin listview vsIcon veya vsSmallIcon görünüm tarzında ise

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


Bu

yalnızca çalışmalıdır. (Hangi görünüm stilini kullandığınızdan bahsetmiş görünmüyorsunuz). Yine de burada basit bir testle, aynı zamanda vsReport tarzında çalışıyor gibi görünüyor. ViewOrigin.Y, bir GetScrollInfo çağrısı tarafından alınan TScrollInfo 'nPos'unun tam olarak aynı değerini verir.