Пример использования модуля класса для работы с внешними устройствами (побитная обработка данных)Прислал: Дмитрий Сонных 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
MSA-2000 ( 47 kB) |
|||
L.E. 26.11.2012 |