- Код: Выделить всё
Private Sub DelElMas(ByRef nArr() As Element, ByVal nIndex As Integer)
If UBound(nArr) = nIndex Then
ReDim Preserve nArr(nIndex - 1)
Else
If nIndex < LBound(nArr) Or nIndex > UBound(nArr) Then
Err.Raise 10, , "Откуда такой индекс?"
Else
'Очищаем удаляемый элемент
Erase nArr(nIndex).pt
' nArr(nIndex).c = Empty
' nArr(nIndex).d = vbNullString
'Смещаем все элементы
CopyMemory VarPtr(nArr(nIndex)), VarPtr(nArr(nIndex + 1)), (UBound(nArr) - nIndex) * LenB(nArr(0))
'Мы уже очистили последний элемент(см. выше). Так не дадим же VB еще что-нибыдь очистить!
ZeroMemory VarPtr(nArr(UBound(nArr))), LenB(nArr(0))
'Подтираем последний
ReDim Preserve nArr(UBound(nArr) - 1)
End If
End If
End Sub
Но она не работает с массивом вот такого типа:
- Код: Выделить всё
Public Type Element
pt() As POINTAPI
mastab As Single
'... несколько as long
End type
Как поправить?