Well, langt om længe kom jeg i tanke om at jeg havde lovet at lave en lille OCX fil - dog har jeg ikke adgang til en compiler, men her er sourcen som den ser ud ind til videre.
Der er kun få funktioner ind til videre og jeg gider ganske enkelt ikke se en linie kode mere i aften, men jeg vil arbejde videre med det så kontrollen får de samme (eller flere) funktioner som den fra MS.
Du kan cut'n paste den direkte over i Notepad og gemme den som ListView.ctl
- så er den lige til at importerer i dit VB project.
God fornøjelse. :o)
VERSION 5.00
Begin VB.UserControl ListView
BackColor = &H80000005&
BorderStyle = 1 'Fixed Single
ClientHeight = 1230
ClientLeft = 0
ClientTop = 0
ClientWidth = 1935
ScaleHeight = 1230
ScaleWidth = 1935
Begin VB.VScrollBar VScroll
Height = 1215
Left = 1680
TabIndex = 0
TabStop = 0 'False
Top = 0
Width = 255
End
Begin VB.VScrollBar VS
Height = 495
Left = 1800
TabIndex = 2
Top = 360
Width = 135
End
Begin VB.Label Item
AutoSize = -1 'True
BackColor = &H80000005&
Caption = "Dette er en tom label."
Height = 195
Index = 0
Left = 0
TabIndex = 1
Top = 0
Visible = 0 'False
Width = 1935
WordWrap = -1 'True
End
End
Attribute VB_Name = "ListView"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit
' Internørd - ListView Control
' Code By:
' Troels Windekilde - Internørd
' December 16, 1999
' E-mail: troels@winkill.dk
' Web:
www.winkill.dk'
' Any use of this code is at your own risk!
Private Const minWidth = 500
Private Const minHeight = 495
Private Const lineHeight = 195
Private Const borderSize = 30
Private selItem As Double
Private Sub Item_Click(Index As Integer)
mrkItem selItem, False
selItem = Index
mrkItem Index, True
End Sub
Private Sub UserControl_Initialize()
UserControl_Resize
End Sub
Private Sub UserControl_Resize()
On Error GoTo Err_Fatal
With UserControl
If .Width < minWidth Then .Width = minWidth
If .Height < minHeight Then .Height = minHeight
End With
VS.Left = -VS.Width
With VScroll
.Top = 0
.Left = UserControl.Width - (borderSize * 2) - .Width
.Height = UserControl.Height - (borderSize * 2)
.Width = 255
.Min = 1
.Max = (HUntil(Item.UBound) + Item(Item.UBound).Height) / lineHeight
If .Value > .Max Then .Value = .Max
.LargeChange = ((UserControl.Height - (borderSize * 2)) / lineHeight) - 1
End With
With Item(0)
.Width = UserControl.Width - (borderSize * 2)
If VScroll.Visible Then .Width = .Width - VScroll.Width
End With
If Item.UBound > 0 Then
Dim I As Double
For I = 1 To Item.UBound
With Item(I)
.Top = HUntil(I) + ((VScroll.Value - 1) * -lineHeight)
.Left = 0
.Width = Item(0).Width
.Visible = True
.Refresh
End With
DoEvents
Next I
End If
Err_Fatal:
End Sub
Private Function HUntil(Index As Double) As Double
Dim I As Double
For I = 1 To Index - 1
HUntil = HUntil + Item(I).Height
Next I
End Function
Private Sub mrkItem(Index, Optional Sel As Boolean)
On Error GoTo Err_Fatal
If Sel Then
With Item(Index)
.BackColor = vbHighlight
.ForeColor = vbHighlightText
End With
Else
With Item(Index)
.BackColor = vbWindowBackground
.ForeColor = vbButtonText
End With
End If
Err_Fatal:
End Sub
' Public
Public Sub AddItem(Caption As String)
Dim Index As Double
Index = Item.UBound + 1
Load Item(Index)
Item(Index).Caption = Caption
UserControl_Resize
End Sub
Public Property Get SelectedItem() As Double
SelectedItem = selItem
End Property
Public Property Let SelectedItem(ByVal vNewValue As Double)
mrkItem selItem, False
selItem = vNewValue
mrkItem selItem, True
End Property
Public Function Count() As Integer
Count = Item.UBound
End Function
Private Sub VScroll_Change()
UserControl_Resize
End Sub
Private Sub VScroll_Scroll()
UserControl_Resize
End Sub