Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Скроллинг в ListView. Добавлено: 09.12.07 20:16  

Автор вопроса:  b.a.m | ICQ: 291657044 
Нужна помощь при работе с ListView. Допустим в свойствах ListVies поле View = lvwReport. При этом в ListView много записей и часть из них не отображается на экране. При пролистывании ListView с помощью скроллинга верхние запись уходят с поля видимости. Подскажите, как определить те поля, которые скрыты? и как, вообще, отлавливать, что применен скроллинг?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 10.12.07 01:43
К листу на апи от sne я приделал вот такую функу
'ONLY VERTICAL: USE IF THERE'S NOT H-SCROLLING
Public Property Get ItemVisible(ByVal iIndex As Long) As Boolean
Dim rc1 As RECT, rc2 As RECT
rc1.Left = LVIR_BOUNDS
Call SendMessage(hListView, LVM_GETITEMRECT, iIndex, rc1)
Call GetClientRect(hLVParent, rc2)
If 0 < rc1.Bottom Then _
    If rc2.Bottom > rc1.Top Then ItemVisible = True
'If 0 < rc1.Bottom Then _
'    If rc2.Bottom > rc1.Top Then _
'        If 0 < rc1.Right Then _
'            If rc2.Right < rc1.Left Then ItemVisible = True
End Property

Ответить

Номер ответа: 2
Автор ответа:
 b.a.m



ICQ: 291657044 

Вопросов: 2
Ответов: 6
 Профиль | | #2 Добавлено: 11.12.07 19:29
Winand, спасибо, конечно, но можешь по подробнее расписать, а то я не врубился, что ты имеешь ввиду под "К листу на апи от sne я приделал вот такую функу "?

Ответить

Номер ответа: 3
Автор ответа:
 Mr.Smile



ICQ: 427682013 

Вопросов: 14
Ответов: 464
 Профиль | | #3 Добавлено: 12.12.07 13:12
А что тут непонятного? sne написал свой ListView на API, представленный в виде класса (без использования OCX)

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 12.12.07 18:58
b.a.m, я думаю можно и с OCX-контролом юзать.
Вот таким образом:
Option Explicit
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Const LVM_FIRST         As Long = &H1000
Private Const LVM_GETITEMRECT   As Long = (LVM_FIRST + 14)
Private Const LVIR_BOUNDS       As Long = &H0

Private Sub Command1_Click()
Debug.Print ItemVisible(84)
End Sub

Private Sub Form_Load()
Dim i As Long
For i = 0 To 99
    lv.ListItems.Add , , i
Next i
End Sub

Public Property Get ItemVisible(ByVal iIndex As Long) As Boolean
Dim rc1 As RECT, rc2 As RECT
rc1.Left = LVIR_BOUNDS
Call SendMessage(lv.hwnd, LVM_GETITEMRECT, iIndex, rc1)
Call GetClientRect(lv.hwnd, rc2)
Debug.Print rc1.Left, rc1.Top, rc1.Right, rc1.Bottom
Debug.Print rc2.Left, rc2.Top, rc2.Right, rc2.Bottom
If 0 < rc1.Bottom Then _
    If rc2.Bottom > rc1.Top Then _
        If 0 < rc1.Right Then _
            If rc2.Right > rc1.Left Then ItemVisible = True
'If 0 < rc1.Bottom Then _
'    If rc2.Bottom > rc1.Top Then ItemVisible = True
End Property

(В первом варианте 'rc2.Right > rc1.Left')

Ответить

Номер ответа: 5
Автор ответа:
 b.a.m



ICQ: 291657044 

Вопросов: 2
Ответов: 6
 Профиль | | #5 Добавлено: 12.12.07 19:48
Winand? спасибо, что потратил время и объяснил! Большое СПАСИБО!!!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам