Вашему вниманию предлагается модуль класса 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 |