Вот, переделан модуль XPMenus.pas для EX-версий Меню. Можете проверять. Если все нормально, то буду добавлять на SVN
Редактировалось 1 раз(а), последний 2024-07-10 04:22:57
Этот топик читают: Гость
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
карма: 22 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
Всем Привет!
Че молчим? Тестировали или как? Добавлять будем? |
|||
карма: 22 |
|
Ответов: 8905
Рейтинг: 823
|
|||
nesco, привет!
Я этими (и не только) фичами никогда не пользовался, но осуж..., ой, но считаю, что добавить надо ![]() ![]() |
|||
карма: 19 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
Леонид писал(а): nesco, привет!
Я этими (и не только) фичами никогда не пользовался, но осуж..., ой, но считаю, что добавить надо Тут вопрос не в нужности добавления. Тут вопрос в тестировании исправлений, что бы их потом по нескольку раз не править. |
|||
карма: 22 |
|
Ответов: 4628
Рейтинг: 747
|
|||
nesco писал(а): MenuEx не требует запуска всплывающего окна, которое и перехватывает сообщенияНу, и обычный не должен был требовать. Уточнить как реализовано в MenuEx. TrackPopupMenu() требуется окно. Такое окно у нас есть - это Applet или форма, на которой лежит меню. С помощью имеющихся функций KOL добавить свою оконную процедуру для обработки сообщений в Applet. Отдельное окно, предполагаю, может требоваться в невизуальных приложениях, когда меню отображается в произвольном месте экрана. Тогда в Init() можно определить наличие Applet и использовать либо старый, либо новый метод. Ага, ещё надо учесть работу, когда все окна программы невидимы, а меню надо отобразить на иконке в трее. Вот для этого могло быть нужно отдельное окно. В оригинальном компоненте можно попробовать вызывать TrackPopupMenu с флагами TPM_NONOTIFY+TPM_RETURNCMD. Тогда функция будет сама возвращать выбранный пункт без необходимости оконной процедуры. Редактировалось 2 раз(а), последний 2024-07-13 07:47:22 |
|||
карма: 26 |
|
Ответов: 2223
Рейтинг: 676
|
|||
nesco,
nesco писал(а): Че молчим? Тестировали или как? Добавлять будем?nesco, что-то пошло не так:
|
|||
карма: 11 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
Всем Привет!
sla8a писал(а): Если кликнуть на таблицу и выбрать пункт меню, то откроется дочерняя форма, а не должна.Ага, интересно. А это точно связано с доработкой, или так и раньше работало? |
|||
карма: 22 |
|
Ответов: 2223
Рейтинг: 676
|
|||
nesco, до замены XPMenus.pas у меня такого не было. Жаль что остальные молчат, может и я чего перепутал при тестировании. Сейчас нет под рукой компьютера чтоб перепроверить.
nesco, а попробуйте поменять в моем примере z-координата у меню (у каждой по разу), предположу что результат будет разный. |
|||
карма: 11 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
sla8a, вообще вся проблем кроется в том, что крайне нежелательно использовать MouseDown для вызова Меню. Посмотри в системе, Меню всегда вызывается по отпусканию мыша, те по MouseUp
--- Добавлено в 2024-07-14 16:38:39 sla8a писал(а): а попробуйте поменять в моем примере z-координата у меню (у каждой по разу), предположу что результат будет разныйПопробовал, чешуя продолжает твориться. То на первом срабатывает, то на втором, то на третьем. И это, кстати, творится и с обычным Меню. Пока оставляем все как есть. Редактировалось 1 раз(а), последний 2024-07-14 16:38:39 |
|||
карма: 22 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
Вот новый код обычного PopUpMenu без оконного обработчика по рекомендациям Netspirit-а. Вроде как у меня Модал отрабатывается нормально.
Исправил по последним рекомендациям Netspirit-а Редактировалось 4 раз(а), последний 2024-07-14 19:42:38 |
|||
карма: 22 |
|
Ответов: 4628
Рейтинг: 747
|
|||
Надо проверить работу меню по иконке в трее, когда все окна программы невидимы.
Кроме того, функция TrackPopupMenu возвращает 0, когда меню закрывается без выбора пункта - а это может выдаваться как событие выбора первого пункта списка. Нужно сохранять значение в переменную и обрабатывать результат. Событие onEndPopup может утратить свой функционал, так как сработает только после выбора пункта. |
|||
карма: 26 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
Netspirit писал(а): Кроме того, функция TrackPopupMenu возвращает 0, когда меню закрывается без выбора пункта - а это может выдаваться как событие выбора первого пункта спискаДа действительно, индекс отличается от 0, но PM.Items[Idx] выдает 0 даже на несуществующий пункт Меню, хотя не должен. А onEndPopup вроде же так и должен работать по закрытию списка до выдачи сообщений по пункту. Он сейчас так и работает. --- Добавлено в 2024-07-14 19:13:16 Насчет иконки надо будет проверить, это не сложно. Начало положено, дальше будем допиливать напильником. --- Добавлено в 2024-07-14 19:44:19 Исправил код. Добавил проверку на валидность выбора и проверил на иконке в трее. На иконке тоже работает Редактировалось 2 раз(а), последний 2024-07-14 19:44:19 |
|||
карма: 22 |
|
Ответов: 2223
Рейтинг: 676
|
|||
nesco писал(а): Исправил код. |
|||
карма: 11 |
|
Разработчик
Ответов: 26103
Рейтинг: 2124
|
|||
Всем Привет!
sla8a писал(а): Последняя версия кода для тестирования это в предпредпоследнем посте который?Да. Уточнение там еще красным помечено. --- Добавлено в 2024-07-16 15:58:32 С Ex версией сложней оказалось. Но пока потестите обычную. Редактировалось 1 раз(а), последний 2024-07-16 15:58:32 |
|||
карма: 22 |
|
Ответов: 2223
Рейтинг: 676
|
|||
nesco, на данный момент тестирование ошибок не выявило.
|
|||
карма: 11 |
|