![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Evgen_F |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
Суть проблемы в следующем. Вывожу сообщение пользователю с помощью MessageDlg с одной единственной кнопкой. Сперва вроде работало нормально. Но потом через раз стала получаться такая хрень - окошко сообщения MessageDlg каким-то образом оказывается под окном основной формы программы (то есть окно сообщения не видно), и основная форма показывается (цветом) как будто она активна.
То есть выглядит так - должно было выскочить сообщение, но вместо этого ничего не произошло, только форма моргнула, но судя по цвету заголовка осталась активна. При этом на попытки нажать кнопки на форме - форма не откликается. Я сначала даже и не понял что произошло, думал повисла прога. Потом по панели задач пощёлкал и когда другое окно вибирал, то поверх моей основной формы MessageDlg-окно выскочило. Тогда я понял, что оно как-то под основной формой пряталось Кто может подсказать, что это за бред? Самое главное получается так через раз как-то
Может мне лучше MessageBox сделать? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Судя по всему MessageDlg не правильно определяет окно поверх которого нужно рисоваться. Кроме того у нее есть такой недостаток, что кнопки не локализуются. В свое время я отказался от нее в пользу MessageBox.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
Evgen_F, случаем не из потока вызываете окошко? если да, то как вызываете? (при работе с визуальными контролами, как у вас
нужно помещать этот код в Synchronize(ваша процедура или что там) ) -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
| cat512 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
MessageDlg ничего определять не должна, этим занимается оконный менеджер виндоус, по параметрам стиля и т. п. при создании окна.
Ну и зря, а я по сей день успешно использую и очень функцией доволен
+1 Очень похоже на многопоточное использование, судя по информации об активности заголовка окна |
||||||
|
|||||||
| Evgen_F |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 4.7.2007 Репутация: нет Всего: нет |
Вызываю не из потока. Synchronize я так понимаю это только к потокам отношение имеет? Я вот подумал и решил полностью выложить проект, чтоб не гадал народ больше. Программа эта - программатор радиопередатчиков. Через COM порт записывает и считывает из него различные настройки. Сделано криво, по принципу работает и ладно, ибо по профессии я не программист, а радиоинженер. Посему буду рад любой критике и замечаниям. Жаль только нет возможности проверить как сообщение выводится без подключения устройства :( Присоединённый файл ( Кол-во скачиваний: 6 )
1.7.ZIP 357,45 Kb |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Бегло посмотрев код могу лишь посоветовать переписать алгоритм без использования goto;
после каждой операции чтения записи использовать Application.ProcessMessages, который хоть как то поможет бороться с проблемой перерисовки интерфейса (хотя если задержки большие, то толку от неё мало); и в место синхронной работы с портом использовать асинхронную (перекрытый ввод вывод с уведомлением по событию). Соответсвенно асинхронная использует многопотчность. Возможно проблемма связанна с синхронной моделью ввода вывода( длительные задержки при чтении/записи, таймаутах непозволяют перерисовывать GUI окон). Я бы вам посоветовал использовать проверенный временем компонент bcport. Прерасно работающий с несколькими моделями ввода - вывода Присоединённый файл ( Кол-во скачиваний: 4 )
bcom_port.zip 123,18 Kb |
|||
|
||||
| Чoо |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 22.9.2009 Репутация: нет Всего: 4 |
да, только к потокам -------------------- ![]() OS: Debian Squeeze (kernel 3.8.2) IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |