Lo que pasa es que yo lo hice a mi necesidad, no era para cargar muchos items, te explico el porque ocupa mucha memoria, vos estas creando controles, estos controles a su ves tienen mas subcontroles, entonces si cargas 100 items son aproximadamente unos 700 controles (una guazada) y como se hace esto entonces?, para eso hay que hacer algo como un listview, eso seria repintando la ventana, la posición del scroll es en base a la cantidad de items (todo esto usando metodos graficos), entonces cada vez que scroleas, se repinta la ventana con solo la información que se puede mostrar, y todo esto solo utilizando un control. muchos lo que hacen es utilizar el listview, y usar un repintado personalizado o bien podes crear un control como te mencione pero lleva su tiempo y conocimiento.
en fin si de todas formas te sirve, para solucionar el problema del scroll que mencionaste, este seria el codigo para el frm_SeleccionarProducto
Option Explicit
Private Sub Btn_Agregar_Click()
ScrollControl.ResetScroll
AddItem "00", "abre", "descr", 5, "KL", "UM01", "RUTA"
ReorderItem
ScrollControl.RefreshScroll
End Sub
Public Sub AddItem(ByVal ID As String, ByVal Abreviatura As String, _
ByVal Descripcion As String, ByVal Cantidad As Long, _
ByVal UnidadMedida As String, ByVal UnidadMedidaID As String, ByVal sPath As String)
Dim i As Long
If Len(oItem(0).ID) Then
i = oItem.Count
Load oItem(i)
End If
With oItem(i)
.ID = ID
.Abreviatura = Abreviatura
.Descripcion = Descripcion
.Cantidad = Cantidad
.UnidadMedida = UnidadMedida
.UnidadMedidaID = UnidadMedidaID
.PicturePath = sPath
.Visible = True
End With
End Sub
Public Sub ReorderItem()
Dim i As Long, lTop As Long
For i = 0 To oItem.Count - 1
If oItem(i).Visible Then
oItem(i).Top = lTop
lTop = lTop + oItem(i).Height
End If
Next
End Sub
Private Sub Form_Activate()
ScrollControl.ResetScroll
ReorderItem
ScrollControl_Resize
ScrollControl.RefreshScroll
If ScrollControl.IsVerticalVisible Then
ScrollControl_Resize
ScrollControl.RefreshScroll
End If
End Sub
Private Sub Form_Load()
ScrollControl.AutoScroll = True
ScrollControl.ScrollWheel = oItem(0).Height / Screen.TwipsPerPixelY
End Sub
Private Sub oItem_RemoveItem(Index As Integer)
oItem(Index).Visible = False
ScrollControl.ResetScroll
ReorderItem
ScrollControl.RefreshScroll
End Sub
Private Sub ScrollControl_Resize()
Dim i As Long
For i = 0 To oItem.Count - 1
oItem(i).Width = (ScrollControl.ScaleWidth) * Screen.TwipsPerPixelX
Next
End Sub