Использование MSCOMM32
От: shafle  
Дата: 18.02.05 15:50
Оценка:
Народ, есть следующтй класс:

Private WithEvents MyComm As MSComm
Public Event DataEvent(ByVal ScanData As String)

Private Sub Class_Initialize()
   Set MyComm = New MSComm
   MyComm.CommPort = 1
   MyComm.Settings = "9600,N,8,1"
   MyComm.InputMode = comInputModeText
   MyComm.InputLen = 0
   MyComm.RThreshold = 1
   MyComm.PortOpen = True
End Sub

Private Sub Class_Terminate()
    MyComm.PortOpen = False
End Sub


К ком-порту подключён сканер штрих-кодов. Сканирую код, но почему-то событие (точнее его обработчик)

Private Sub MyComm_OnComm()
    RaiseEvent DataEvent(MyComm.Input)
End Sub


не срабатывает...
Хотя в окне Watch в переменной Input объекта MyComm находится значение штрих-кода, то есть данные поступили в буфер...
Почему событие не работает?
Re: Использование MSCOMM32
От: shafle  
Дата: 18.02.05 16:18
Оценка:
Не поверите...вдруг взяло и заработало....блин
Re[2]: Использование MSCOMM32
От: Аноним  
Дата: 19.02.05 14:37
Оценка:
Здравствуйте, shafle, Вы писали:

S>Не поверите...вдруг взяло и заработало....блин


Ещё как поверю, у самого в Exel примочка работает когда хочет, до сих пор понять не могу по чему
Re: Использование MSCOMM32
От: Аноним  
Дата: 20.02.05 08:40
Оценка:
Подобное поведения VB с сообщениями было замечено и в нашем проекте,
для сишного грида пришлось отказаться от евентов и перейти на обмен собщения через обмен интерфейсами.

Мой опыт показывает, когда очень часто посылаются сообщения не из VB-го объекта (ATL например) при этом это както напрямую или косвенно связанно с сообщениями окна (WM_xxxx) или другими callback-функциями, то он их тупо теряет.

Но с родными объектами у него все в порядке.
Re[2]: Использование MSCOMM32
От: al Россия  
Дата: 25.02.05 07:10
Оценка:
В некоторых ситуациях VB6 при запуске программы в режиме интрепритации в IDE не вызывает обработчики событий. Это происходит, например, если на экран выводится модальное диалоговое окно, созданное внешним модулем (даже скомпилированным самим VB). Даже вызов MsgBox блокирует рассылку любых событий до тех пор, пока окно не будет закрыто (http://www.rsdn.ru/Forum/Message.aspx?mid=1041034&only=1
Автор: al
Дата: 23.02.05
). Блокировка происходит после того, как любой конторл вызовет метод EnableModeless(FALSE) интерфейса IOleInPlaceFrame (в MFC это делает метод PreModalDialog класса COleControl).

В скомпилированном модуле все работает без блокировок.


Re[3]: Использование MSCOMM32
От: al Россия  
Дата: 25.02.05 07:18
Оценка:
Да, в догонку. Когда VB прекращает обрабатывать события, он сообщает об этом всем контролам, вызывая метод IOleControl::FreezeEvents.

PS. Так что это не глюки, это TBIBD (This behavior is by design, как любят выражаться в MSDN), го иногда за это я ненавижу VB6. И еще за кнопку Stop


 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.