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

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

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


Сам КЛАСС:

Option Compare Database
Option Explicit

Private bByte As Byte
Private bMinus As Byte

'=============================================================
'Модуль класса ByteBoolean - автор Дмитрий Сонных (aka Joss)
'sonni-dim@mail.ru
'-------------------------------------------------------------
'Создайте модуль типа Class, назовите его ByteBoolean, скопируйте
'в него этот текст, работайте
'-------------------------------------------------------------
'За основу взят модуль ByteBoolean Катцына Антона
'c www.vbrussian.com раздел примеры
'Я добавил пару новых свойств и изменил индексы массива
'=============================================================
'Этот модуль класса очень полезен тем, кто работает с внешними
'устройствами, когда каждый бит в байте несёт определённую
'информацию, и каждый бит надо анализировать и обрабатывать
'отдельно.
'----------------------------------------------------------
'Класс использует переменную типа 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




Picture




Скачать

MSA-2000 ( 47 kB)


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