MyTetra Share
Делитесь знаниями!
Модуль класса для работы с внешними устройствами (побитная обработка данных)
19.07.2018
19:45
Раздел: VBA - Access - msa.polarcom.ru - 16 Система


Модуль класса для работы с внешними устройствами (побитная обработка данных)

Прислал: Дмитрий Сонных  sonni-dim@mail.ru

Вашему вниманию предлагается модуль класса ByteBooolean.
Этот модуль класса очень полезен тем, кто работает с внешними устройствами, когда каждый бит в байте несёт определённую информацию, и каждый бит надо анализировать и обрабатывать отдельно.

Option Compare Database

Option Explicit


Private bByte As Byte

Private bMinus As Byte


'=============================================================

'Модуль класса ByteBoolean - автор Дмитрий Сонных (sonni-dim@mail.ru)

'-------------------------------------------------------------

'За основу взят модуль ByteBoolean Катцына Антона

'c www.vbrussian.com раздел примеры.

'Я добавил пару новых свойств и изменил индексы массива

'-------------------------------------------------------------

'Создайте модуль типа Class, назовите его ByteBoolean, скопируйте 'в него этот текст, работайте

'=============================================================

'Класс использует переменную типа Byte для хранения восьми 'переменных типа Boolean.

'SetByte - Устанавливает бит 0-7 значением 1 или 0 '(если Value = 0 то нулем, если нет то 1)

'GetByte - возвращает бит 0-7 'TrueIsMinus1 - свойство которое говорит, что возвращать, при

'значении 1(Например True в VB это -1 и что бы было сходство с 'Boolean ,при влюченном свойстве, 1 будет возвращатся,как -1) '============================================================


Public Sub SetByte(Index As Byte, Value As Integer) 'Устанавливает значение указанного бита в 0 или 1 On Error GoTo erro1

If Value = 0 Then

bByte = bByte And Not (2 ^ (Index))

Else

bByte = bByte Or (2 ^ (Index))

End If

exit_SetByte:

Exit Sub

erro1:

'MsgBox Err.Description

Err.Raise 666, , "ООшибка записи в ByteBoolean!" _

& " Проверьте правильность посылаемых данных!"

Resume exit_SetByte


End Sub

'----------------------------------------------------------


Public Function GetByte(Index As Byte)

'Возвращает значение запрошенного бита


Dim a

On Error GoTo erro2

a = bByte And (2 ^ (Index))

If a Then a = 1

If a = 0 Or (bMinus = 0 And a = 1) Then

GetByte = a

Else

GetByte = -a

End If

Exit Function

erro2:

Err.Raise 666, , "Ошибка чтения из ByteBoolean!" _

& " Проверьте правильность посылаемых данных!"

End Function

'-----------------------------------------------------------


Public Property Let ValueByte(ByVal NewByteValue As Byte) 'Задает новое значение массива в виде целого числа (0 - 255)


bByte = NewByteValue

End Property

'-----------------------------------------------------------


Public Property Get ValueByte() As Byte

'Выдает значение массива в виде целого числа (0 - 255)


ValueByte = bByte

End Property

'-----------------------------------------------------------


Public Property Get TrueIsMinus1() As Boolean

If bMinus = 0 Then

TrueIsMinus1() = False

Else

TrueIsMinus1() = True

End If

End Property

'------------------------------------------------------------


Public Property Let TrueIsMinus1(ByVal vNewValue As Boolean)

If vNewValue Then

bMinus = 1

Else

bMinus = 0

End If

End Property






 
MyTetra Share v.0.52
Яндекс индекс цитирования