MyTetra Share
Делитесь знаниями!
Пример использования модуля класса для работы с внешними устройствами (побитная обработка данных)
16.03.2019
23:43
Раздел: !Закладки - VBA - Access - msa.polarcom.ru - 18 Примеры и Прочее

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

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

Прикрепленные файлы:
Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования