|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|
Сложности при вызове программы26.02.2018, 14:59. Показов 1627. Ответов 25
Метки нет (Все метки)
В связке участвуют 2 программы (обе - мои) Одна на WinApi, другая на Qt. В какой из них возможно решение проблемы, я не знаю. Чтобы не дублировать темы (что запрещено) даю ссылку на ее первую публикацию.
Сложности на стыке Может быть кто-то из специалистов по WinApi подскажет решение... С Надеждой, которая умирает последней...
0
|
|
| 26.02.2018, 14:59 | |
|
Ответы с готовыми решениями:
25
Сложности при вызове контекстного меню в Windows
Возникли сложности при написании программы |
|
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,113
|
||
| 26.02.2018, 15:45 | ||
|
1
|
||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 26.02.2018, 16:07 [ТС] | ||
|
Ygg, Других контролов нету. Чистый QTextEdit (с заголовком окна(title))
Зато есть меню по правой мышке. Так вот, при появлении меню текст сереет (что, видимо, естественно), но после Esc остается серым и курсор пропадает. Но не всегда. Четкой закономерности я еще не выяснил. При этом временами и щелчок мышкой не восстанавливает курсора.
0
|
||
|
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,113
|
|
| 26.02.2018, 16:26 | |
|
А если временно убрать вызов EnumWindows из виндовой части, то фокус так же теряется?
1
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 26.02.2018, 16:41 [ТС] | ||
|
.... Простите, неправильно понял вопрос. Я подумал, что вы говорите о SetForegroundWindow... А как я тогда выведу Q- окно на передний план? Ладно, сейчас попробую... Добавлено через 6 минут Убрал EnumWindows. Эффект ожидаемый. W-окно загораживает Q-окно. Ведь SetForegroundWindow не происходит... Для того-то и перебор окон, чтоб выдвинуть на передний план
0
|
||
|
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,113
|
|
| 26.02.2018, 16:51 | |
|
А ручками оно разве не вытаскивается на передний план? Данным тестом хотелось понять, есть ли какая-либо зависимость потери фокуса внутри QT от вызовов SetActiveWindow и SetForegroundWindow из виндовой части или нет.
1
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 26.02.2018, 17:22 [ТС] | ||
|
Чушь вся в том, что это уродство возникает только при первом Ctrl-Ins. Или при первом "Копировать" из выпадающего меню. А потом все происходит нормально. Причем, это не зависит от того, сколько времени прошло. Я могу даже ввести чего-нибудь... Из меню я вызываю просто метод QTextEdit-а copy() Может быть мне его переопределить? По первому обращению продублировать? Добавлено через 10 минут Вот еще интересный момент. На первом Shift-Ins (вставить) - оно вставляется, но курсорчик пропадает. Что-то не ладит моя программулька с Клипбордом... Но при запуске в автономе (без windows-части) все совершенно замечательно! Добавлено через 4 минуты Может быть можно как-то запретить всю реакцию на мышь в виндоус-части.. Но это у меня не получилось... Как я понял, за щелчками мыши послеживает сама Операционная Система. Хотя бы для переключения между окнами...
0
|
||
|
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,113
|
|||||||||||
| 26.02.2018, 19:09 | |||||||||||
|
Затрудняюсь сказать что-либо за QT часть.
В плане винды... наверное, флаги при создании процесса можно опустить, толку от них не много, вроде, SetActiveWindow не работает с чужими окнами, лучше ShowWindow(hWnd, SW_SHOW), можно поменьше насиловать QT сообщениями, сделать сперва проверку состояния окна, если проверка не прошла, то только тогда отправлять сообщение
Похоже, что это проблема QT. Если сделать простое приложение из единственного виджета (QTextEdit), то оно даже самостоятельно точно так же теряет фокус (или что-то ещё) после вызова контекстного меню. Нужно делать отдельный виджет и встраивать в него QTextEdit, тогда всё работает, вроде бы.
1
|
|||||||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||
| 26.02.2018, 21:47 [ТС] | ||||
|
Ygg, Спасибо. Вот уже есть что-новенькое, чего я не пробывал. Отдышусь - попробую.
![]() Добавлено через 2 часа 4 минуты ![]() Добавлено через 16 секунд
0
|
||||
|
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,927
|
|||
| 27.02.2018, 11:54 | |||
|
1
|
|||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||||||||||
| 27.02.2018, 14:52 [ТС] | ||||||||||||
|
Чудеса продолжаются. Сделал в Винд-части
Чует мое сердце, что что-то там не то с QTextEdit... Копаю дальше... Замечание COKPOWEHEU буду иметь в виду Буду оборачивать QTextEdit лайоутом ... Конечно, не исключаю какой-то дурацкой плюхи совсем в другом месте... Добавлено через 2 часа 25 минут Но в связке именно первый Ctrl-Ins (как и "копировать" из Поп-меню) заставляет терять фокус. Ygg, в вашем Qt-коде в посте 8 после w.show() надо поставить te->setFocus() (ну, не совсем так, но понятно, надо передать фокус ТекстЕдиту) Иначе при его появлении курсора нет. На всякий случай поставил самую строгую полицию фокуса
0
|
||||||||||||
|
2735 / 890 / 331
Регистрация: 10.02.2018
Сообщений: 2,113
|
|
| 27.02.2018, 15:59 | |
|
Байт, запускал у себя на 10 винде тот код, что привёл. И отдельно и с вызовом из другого приложения по вашему образцу. Никаких проблем не увидел. При копировании горячими клавишами ничего не теряется. При копировании через меню то же ничего не теряется. Возможно, вы что-то добавили в код, что приводит к такому поведению. QT 5.6, VS 2015.
Архив с проектами и скомпилированными файлами. Для запуска test.exe в bin нужно докинуть QT-библиотеки: Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll и каталог platforms. Они много весят, поэтому выкинул их из архива. Для сравнения рядом с test.exe лежит test_bug.exe, который сделан на единственном виджете. Он у меня глючит, но только при копировании через контекстное меню, через горячие клавиши ничего не портится. Для запуска test из виндовой проги RunQTEdit нужно нажать кнопку OK.
1
|
|
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 27.02.2018, 16:41 [ТС] | ||
|
В любом случае спасибо за участие и поддержку.
0
|
||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||||||
| 01.03.2018, 23:11 [ТС] | ||||||
|
Господа и Дамы! Леди и Джентельмены! Могу с полным основанием заявить - Если долго мучиться - что-нибудь получится!
Мучения вылились в три строчки кода, и (тьфу-тьфу) ЭТО вдруг заработало.
Не исповедимы пути твои, Виндоус! Блажен тот, кто живым выбрался из тенет твоих! Всем участникам обсуждения - огромное спасибо! Без вашего участия я бы давно уже повесил буйну голову свою. Всем - удачи и доброго здоровья! ![]() ![]() ![]() Добавлено через 19 минут Ygg, Дык, а куда деваться? Уволят на фиг без выходного пособия! А на одну пенсию при моих и жены моей запросах - не проживешь!
0
|
||||||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||
| 02.03.2018, 11:39 [ТС] | |||
![]() А на мысль натолкнуло вот что. Ну, восстанавливаю я Q-программу каждые 40 мск на переднем плане. Все правильно, пока пользователь с ней не отработает, с W-программой ему делать нечего. Но! В это время Юзер может захотеть с другой программой поработать. С тем же Вордом. Написать мне письмо с благодарностью. Многозадачнось, как-никак. А ему не даю! У меня всегда Q на переднем плане и в фокусе. Ну и решил, что возвращать управление в Q надо только тогда, когда фокус попал тому, кто это безобразие устроил. То есть я решал другую проблему. А по ходу решил и основную. ЗЫ. В WinAPI я не очень силен. Боюсь я его. Всегда старался обходиться тем, что дают. Обертками. В Qt тоже не считаю себя корифеем. Но двигаюсь потихоньку... Вот за время этой нанайской борьбы много полезного узнал. И там, и там. Чем и стараюсь себя утешать...
0
|
|||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
|||
| 02.03.2018, 14:06 [ТС] | |||
|
Добавлено через 7 минут Кстати, пока копался, нарыл такую любопытную статейку https://rsdn.org/article/qna/ui/wndsetfg.xml
0
|
|||
|
Диссидент
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
|
||
| 02.03.2018, 14:44 [ТС] | ||
|
Т.е. Q-окно должно вести себя, как модальный диалог. И все. И больше мне от них ничего не нужно. И, наверное, для этого есть другие способы. Ведь что происходит при вызове собственного диалога, как я понимаю (может быть, неточно и неверно). Основной Обработчик сообщений пересылает все сообщения Диалогу (его обработчику сообщений). Кроме WM_PAINT. И держит Диалог НАД СОБОЙ. И никакими силами этого их взаимодействия не нарушить. Если я щелкаю где-то вне Диалога, он начинает подмигивать - мол, иди сюда. Тоже было бы приятно такое поведение реализовать... А мне нужно, чтобы W-окно посылало все сообщения (опять же, кроме PAINT) вот этой ДРУГОЙ программе. Вот это я и пытаюсь реализовать с помощью ::SetForegroundWindow(. Просто ничего другого не нарыл.
0
|
||
| 02.03.2018, 14:44 | |
|
Помогаю со студенческими работами здесь
20
Программы вылетает при вызове метода Сбой программы при вызове формы При вызове внешней программы остальное не работает Падение программы при вызове функции из DLL
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|