Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с MessageDlg, окошко оказывается за основной формой 
:(
    Опции темы
Evgen_F
  Дата 23.8.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Суть проблемы в следующем. Вывожу сообщение пользователю с помощью MessageDlg с одной единственной кнопкой. Сперва вроде работало нормально. Но потом через раз стала получаться такая хрень - окошко сообщения MessageDlg каким-то образом оказывается под окном основной формы программы (то есть окно сообщения не видно), и основная форма показывается (цветом) как будто она активна.
То есть выглядит так - должно было выскочить сообщение, но вместо этого ничего не произошло, только форма моргнула, но судя по цвету заголовка осталась активна. При этом на попытки нажать кнопки на форме - форма не откликается. Я сначала даже и не понял что произошло, думал повисла прога. Потом по панели задач пощёлкал и когда другое окно вибирал, то поверх моей основной формы MessageDlg-окно выскочило. Тогда я понял, что оно как-то под основной формой пряталось

Кто может подсказать, что это за бред? Самое главное получается так через раз как-то

Код

  StatusBar.Panels[0].Text:='Отпрака данных завершена';
  StatusBar.Refresh;
  MessageDlg('SN-настройки успешно записаны в радиопередатчик' + #13
    + 'Device: FET-Tx_v' + DevVer1_Edit.Text + '.' + DevVer2_Edit.Text + '.'
    + DevVer3_Edit.Text + '   SN: '+ SN_Edit.Text + #13 + 'Дата производства: '
    + FormatDateTime('dd/mm/yy', DateTimePicker.Date)
    + #13 + 'Soft: v' + IntToStr(SoftVer[1]) + '.' + IntToStr(SoftVer[2]) + '.'
    + IntToStr(SoftVer[3]) + #13 + Format('EEPROM_Key: 0x%x', [Ord(EEPROM_Key)])
    + #13 + 'Напряжение питания: ' + FloatToStrF(Vsupply, ffFixed, 3, 2) + ' В'
    , mtInformation, [mbOK], 0);
//------- По окончании записи закрываем порт -------------------------------
close_port:


Может мне лучше MessageBox сделать?
PM MAIL   Вверх
Alexeis
Дата 23.8.2010, 12:19 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Судя по всему MessageDlg не правильно определяет окно поверх которого нужно рисоваться. Кроме того у нее есть такой недостаток, что кнопки не локализуются. В свое время я отказался от нее в пользу MessageBox.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Чoо
Дата 23.8.2010, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: нет
Всего: 4



Evgen_F, случаем не из потока вызываете окошко? если да, то как вызываете? (при работе с визуальными контролами, как у вас 
Код

DevVer1_Edit.Text + '.' + DevVer2_Edit.Text + '.' //etc так понимаю это переименованный edit 

нужно помещать этот код в Synchronize(ваша процедура или что там)
)


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
cat512
Дата 23.8.2010, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Цитата

Судя по всему MessageDlg не правильно определяет окно поверх которого нужно рисоваться

MessageDlg ничего определять не должна, этим занимается оконный менеджер виндоус, по параметрам стиля и т. п. при создании окна.
Цитата

В свое время я отказался от нее в пользу MessageBox

Ну и зря, а я по сей день успешно использую и очень функцией доволен
Цитата

Evgen_F, случаем не из потока вызываете окошко? если да, то как вызываете? (при работе с визуальными контролами, как у вас код Pascal/Delphi
1:
  DevVer1_Edit.Text + '.' + DevVer2_Edit.Text + '.' //etc так понимаю это переименованный edit 




нужно помещать этот код в Synchronize(ваша процедура или что там)
)

+1
Очень похоже на многопоточное использование, судя по информации об активности заголовка окна
PM MAIL   Вверх
Evgen_F
Дата 24.8.2010, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 4.7.2007

Репутация: нет
Всего: нет



Цитата

случаем не из потока вызываете окошко? если да, то как вызываете? (при работе с визуальными контролами, как у вас, нужно помещать этот код в Synchronize(ваша процедура или что там)


Вызываю не из потока. Synchronize я так понимаю это только к потокам отношение имеет?

Я вот подумал и решил полностью выложить проект, чтоб не гадал народ больше.
Программа эта - программатор радиопередатчиков. Через  COM порт записывает и считывает из него различные настройки.
Сделано криво, по принципу работает и ладно, ибо по профессии я не программист, а радиоинженер. Посему буду рад любой критике и замечаниям.
Жаль только нет возможности проверить как сообщение выводится без подключения устройства :(

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  1.7.ZIP 357,45 Kb
PM MAIL   Вверх
cat512
Дата 24.8.2010, 16:56 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 438
Регистрация: 20.3.2007

Репутация: 7
Всего: 15



Бегло посмотрев код могу лишь посоветовать переписать алгоритм без использования goto;
после каждой операции чтения записи использовать Application.ProcessMessages, который хоть как то поможет бороться с проблемой перерисовки интерфейса (хотя если задержки большие, то толку от неё мало);
и в место синхронной работы с портом использовать асинхронную (перекрытый ввод вывод с уведомлением по событию). Соответсвенно асинхронная использует многопотчность.
Возможно проблемма связанна с синхронной моделью ввода вывода( длительные задержки при чтении/записи, таймаутах непозволяют перерисовывать GUI окон).
Я бы вам посоветовал использовать проверенный временем компонент bcport. Прерасно работающий с несколькими моделями ввода - вывода

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  bcom_port.zip 123,18 Kb
PM MAIL   Вверх
Чoо
Дата 24.8.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: нет
Всего: 4



Цитата(Evgen_F @  24.8.2010,  15:27 Найти цитируемый пост)
Synchronize я так понимаю это только к потокам отношение имеет?

да, только к потокам


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.