VBA, MS Access MS Access в примерах

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

Прислал: Дмитрий Сонных  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



Назад ToTop
L.E. 16.11.2012
Рейтинг@Mail.ru