Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проблема с MDI приложением


Автор: Александр Жуков 19.4.2005, 12:55
Есть MDI приложение (достаточно разлапистое) работающее с USB-устройством - качает непрерывно из него по USB сигнали отображает на TImage (в силу необходимости использован именно TImage, а не TChart). Смена кадров где-то 1-3 Гц (требуется кроме всего ещё время в приборе на получение сигнала). На мощном компе (P4 2.8) все равботает медленно, но стабильно. На компах 1.8 и меньше - работает до перетаскивания (Drag) окошка с сигналом - после перетаскивания окошка (дочернее окно) курсор мышки остается "заперт" в клиентской области главного окна (то есть даже в меню/кнопки не может зайти) и за пределы этой области не выводится никак (кроме Alt-Tab и кнопки Windows). Также все открытые на данный момент окна перестают перетаскиваться (в том числе и с сигналом), а на некоторые даже перключиться нельзя. Один раз получилось вызвать модальное окошко (предусмотренное программой), но оно тоже не захотело закрываться.
Вот собственно и проблема.
Вопрос: Кто/что может так забивать приложение, ну и как с этим бороться?
Заранее спасибо!

Автор: _hunter 19.4.2005, 14:58
просто по описанию вряд ли что-то сказать получится.
Могу посоветовать потоки использовать ( для получения сигнала и для отрисовки )
+ ProcessMessages подобавляй...

Автор: Александр Жуков 19.4.2005, 16:23
Сорри за куцее описание, но добавлять кусок кода - какой не знаю, а выкладывать весь проект - низзя smile
Попробую ProcessMessage или просто запретить отрисовку по событию OnDragStart.

Автор: _hunter 19.4.2005, 17:58
запрет вряд ли что-то даст: судя по описанию, программа в рекурсию уходит...
могу еще посоветовать счетчик вызовов функций прикрутить -- тогда понятно будет есть рекурсия или нет + можно будет попробовать эти функции переписать...

Автор: Александр Жуков 20.4.2005, 08:20
Рекурсия вряд- ли. В проге нету ни одного рекурсивного вызова (необходимости такой нету).
Да и, ИМХО, рекурсия дала-бы полное подвисание - а не блок курсора и прочие чудеса. Счас пробую блок рисования при перемещении...

Автор: Александр Жуков 20.4.2005, 09:08
Правда тут встает вопрос второй. Как отследить начало и ОКОНЧАНИЕ перетаскивания формы. Процедура WMNCHitTest не подхходит, так как в ней нет информации о том, нажата ли кнопка мыши или нет (ну или есть, но я не знаю как её получить). И эта процедура не ловит ОКОНЧАНИЕ перемещения формы. Мож есть какие-то события? (типа OnStartMove и т.д.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)