ok, klein voorbeeldje:
Maak een nieuw form, plaats er een listview op en schrijf wat code om daar wat items in te zetten.
Declareer de functie SendMessage, die declaratie kun vinden in de API viewer die bij VB zit.
Visual Basic .NET:
1
| 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 |
Dan declareer je de Types en Constants die deze functie nodig heeft, ook te vinden in de API viewer en MSDN.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Private Type POINTAPI
x As Long
y As Long
End Type
Private Type LVHITTESTINFO
pt As POINTAPI
flags As Long
iItem As Long
iSubItem As Long
End Type
Private Const LVM_FIRST = &H1000&
Private Const LVM_SUBITEMHITTEST As Long = (LVM_FIRST + 57) |
In de ListView1_MouseDown event van de listview krijg je x en y coordinaten mee, deze zijn in twips, dus moet je omrekenen naar pixels.
Visual Basic .NET:
1
2
3
| Dim lvhi As LVHITTESTINFO
lvhi.pt.x = x / Screen.TwipsPerPixelX
lvhi.pt.y = y / Screen.TwipsPerPixelY |
Dan roep je SendMessage aan op deze manier:
Visual Basic .NET:
1
| SendMessage ListView1.hWnd, LVM_SUBITEMHITTEST, 0, lvhi |
En als laatste lees je de waardes uit de LVHITTESTINFO struct
Visual Basic .NET:
1
2
3
4
5
6
7
| If lvhi.iItem >= 0 And lvhi.iItem < ListView1.ListItems.Count Then
If lvhi.iSubItem = 0 Then
Text1.Text = ListView1.ListItems(lvhi.iItem + 1).Text
Else
Text1.Text = ListView1.ListItems(lvhi.iItem + 1).SubItems(lvhi.iSubItem)
End If
End If |
- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!