Всех приветствую!
Рисую программу с применением динамических панелей PageControl на 2 уровня с программным (дистанционным) выбором по команде. Столкнулся с необычной проблемой связанной с отсутствием реакции на нажатие кнопки мыши на главной форме в любом месте, даже в верхней части с тремя кнопками. При простое, программа не нагружена ничем. Прерывания не используются в клиенте. Принцип: команда от клиента-серверу TCP -›ответ и наоборот.
Проблем не знал, пока не стал пытаться использовать дочерние формы ChildForm и ChildFormEx совместно с pagecontrol. (В примитивном примере-сборки до минимума-работает).
Стоит только отобразить их на главной форме и вывести текст дистанционно через TCP на HilightMemo, и закрыть окно ChildForm, то главная форма перестает реагировать на нажатие кнопки мыши, но при этом, курсор подсвечивает кнопки, подсказки т.д. Загрузки процессора - 0%. Стоит только свернуть и восстановить окно главной формы дистанционно, то все восстанавливается. Сборка HiAsm_4.05b186_AltBuild_v2050.28-11-15.01 , установлен мод RemoteAccessManager.
В Чем может быть проблема?
Редактировалось 5 раз(а), последний 2024-06-19 11:39:55
Этот топик читают: Гость
Ответов: 98
Рейтинг: 1
|
|||
карма: 0 |
|
Ответов: 307
Рейтинг: 26
|
|||
Схему в студию.
Будем дебажить. |
|||
карма: 2 |
|
Ответов: 98
Рейтинг: 1
|
|||
Спасибо. Сам разобрался.
Добавил задержку не менее 300 мс между командами на отображения данных на форме Pagecontrol (с выбором страницы) и отображением формы ChildForm и данных на нем. Причина решилась сразу. В случае с формой ChildFormEx - выскакивали ошибки с чтением (доступом) памяти по некому нулевому адресу. |
|||
карма: 0 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Всем Привет! Я тут мимо проходил, но вопрос показался интересным. Неплохо бы все же глянуть на схемку. Если можно, конечно
|
|||
карма: 22 |
|
Ответов: 2236
Рейтинг: 676
|
|||
nesco писал(а): Неплохо бы все же глянуть на схемку.Вот к примеру такая схема у меня "блокирует" модальную дочернюю форму:
При этом штатный пример с дочерней модальной формой работает без проблем: HiAsm\Elements\delphi\Example\Forms\Forms.sha HiAsm штатный rev 2407 win10 64 Редактировалось 1 раз(а), последний 2024-07-04 15:16:34 |
|||
карма: 11 |
|
Ответов: 783
Рейтинг: 168
|
|||
sla8a писал(а): Вот к примеру такая схема у меня "блокирует" модальную дочернюю формуЭффект блокировки модальной формы подтверждаю. Мне кажется, что после вызова модальной формы из PopupMenu фокус остаётся на главной форме и на ней можно кликнуть правой кнопкой мыши ещё раз. |
|||
карма: 15 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Всем Привет!
Вызывайте Меню в другой очереди событий. Перехват событий Меню действительно не отдает очередь в основное окно. Схема
|
|||
карма: 22 |
|
Ответов: 2236
Рейтинг: 676
|
|||
nesco, а не получится внести правки в элемент чтоб избежать таких костылей, тут вопрос не во мне, а в том что не каждый будет знать где и когда нужно отложенное событие применить. А в данном случае как по мне и не логичное.
Тот же MenuEx отложенного события не требует, а один и тот же код с PopupMenuEx используют.
|
|||
карма: 11 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
sla8a писал(а): Тот же MenuEx отложенного события не требует, а один и тот же код с PopupMenuEx используютMenuEx не требует запуска всплывающего окна, которое и перехватывает сообщения, не возвращая их обратно в форму. Боюсь, что это системные проблемы, а не компонента. Посмотрю, но не гарантирую, что удастся исправить. В конце концов, костыль все же имеется. Кстати, отложенное событие надо использовать во многих случаях. Тот же doSetFocuse крайне желательно делать отложенным, а не вызывать его из общей очереди событий. --- Добавлено в 2024-07-05 15:53:53 P.S. Кстати, а как ведет себя обычное, не EX, PopUpMenu. Не пробовали? Редактировалось 2 раз(а), последний 2024-07-05 15:53:53 |
|||
карма: 22 |
|
Ответов: 783
Рейтинг: 168
|
|||
nesco писал(а): Кстати, а как ведет себя обычное, не EX, PopUpMenu. Не пробовали?Пробовал. Ведёт себя также. Модальная форма зависает. |
|||
карма: 15 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Gunta писал(а): nesco писал(а):Кстати, а как ведет себя обычное, не EX, PopUpMenu. Не пробовали? Пробовал. Ведёт себя также. Модальная форма зависает. Значит это системная проблема. И находится минимум в Системной библиотеке KOL --- Добавлено в 2024-07-05 18:02:12 Посмотрел детально код. Похоже, что проблема кроется выше, чем в KOL. Для вызова всплывающего меню используется системный вызов TrackPopupMenu, который находится в системной библиотеке user32.dll. Похоже, что это в нем проблема --- Добавлено в 2024-07-05 18:10:14 Тут только если попробовать прикрутить внутри кода отложенное событие к вызову метода TrackPopupMenu --- Добавлено в 2024-07-05 18:22:50 Как будет время я подумаю над решением этого вопроса. Редактировалось 5 раз(а), последний 2024-07-05 18:22:50 |
|||
карма: 22 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Всем Привет!
Кажется, я нашел наикратчайший способ реализации отложенного вызова всплывающего меню. Проверяйте, это пока исправления в обычном hiPopUpMenu
Редактировалось 3 раз(а), последний 2024-07-07 00:00:54 |
|||
карма: 22 |
| ||
Голосовали: | sla8a, envoy_sky |
Ответов: 2236
Рейтинг: 676
|
|||
nesco, у меня тестирование прошло успешно, проблема блокировки окна пропала, новых проблем не замечено.
|
|||
карма: 11 |
|
Ответов: 307
Рейтинг: 26
|
|||
У меня тоже прошёл тест нормально.
Если без изменения провожу тест то нужно ещё раз нажать правую кнопку мыши и модальная форма отвисает. |
|||
карма: 2 |
|
Разработчик
Ответов: 26113
Рейтинг: 2126
|
|||
Всем Привет!
Если все хорошо, то добавляю этот метод в Ех версию и добавлю на SVN. Для Патча сделаю отдельную версию, тк константа US_DEFERREDEVENT уже добавлена в Share. |
|||
карма: 22 |
|