electrik | Дата: Понедельник, 31.01.2022, 19:15 | Сообщение # 1 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Привет. Ниже скину ссылку на заготовку проекта, в котором происходят странности. Вопрос первый: цикл событий WaitEvent - может быть разный для каждого окна, или всё обрабатывается в одном цикле? После события закрытия окна, я перехожу обратно при помощи UseGadgetList, не переходит в главное окно. короче, у меня есть главное окно, и окно настроек. Я хочу, чтобы когда в настройках жмякают alt+f4, оно закрывалось и отображалось главное окно. Вопрос второй: номера гаджетов в разных окнах могут быть одинаковые? Как я понял, окна по умолчанию перекрывающиеся, но почему-то по ALT+TAB, у меня фокус переходит из настроек в главное окно, но естественно, поскольку оно заблокировано, там ничего не доступно. Надо, видимо убрать возможность перехода по ALT+Tab в заблокированное окно. Короче, ниже есть проект, может я дурак. В пурике я похожее делал и оно работало. https://disk.pm/s/54t9CJynxdf5BTx/download
|
|
| |
haav | Дата: Вторник, 01.02.2022, 07:29 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Привет Сергей!
Цитата Вопрос первый: цикл событий WaitEvent - может быть разный для каждого окна, или всё обрабатывается в одном цикле? Чтобы было понятно: в библиотеке для всех созданных окошек с помощью OpenWindow устанавливается одна и та же оконная процедура , куда приходят события от всех окон. Есть единый цикл событий (GetMessage | PeekMessage) , который находится в функции w9DoEvents , которую вызывает функция WaitEvent или WindowEvent.
Цитата electrik ( ) После события закрытия окна, я перехожу обратно при помощи UseGadgetList, не переходит в главное окно. Функция UseGadgetList никуда ничего не переводит. Единственная работа , которую она выполняет - это назначить окно , в котором ты в будущем станешь размещать гаджеты. Больше она ничего не делает. Например:
1) Ты создаешь 1 окно и размещаешь гаджеты на 1 окне 2) Ты создаешь 2 окно и размещаешь гаджеты на 2 окне 3) Вдруг тебе нужно разместить дополнительные гаджеты на 1 окне. Тут ты вызываешь UseGadgetList и указываешь , что дальше ты будешь размещать гаджеты на 1 окне. После вызова UseGadgetList с хендлом первого окна , все следующие созданные гаджеты будут размещаться на первом окне. ВСЕ!
Цитата electrik ( ) Вопрос второй: номера гаджетов в разных окнах могут быть одинаковые? Нет. Гаджеты всегда должны быть уникальны. Если ты создаешь гаджет с тем же номером , то ранее созданный гаджет с этим номером уничтожается. Я не рекомендую всегда полагаться на автоматическое удаление. Советую всегда удалять гаджеты вручную (когда они не нужны) , даже перед закрытием окна , на котором они располагаются.
Сергей , я подредактировал твой код:
1) Гаджеты теперь при создании имеют уникальные номера (до этого у тебя была каша) 2) Поправил интерфейс (уж слишком он у тебя кривой , все друг на друге). Может я сделал не идеально , но все таки так хоть ровнее 3) Для окон в твоем проекте определил статус главного и дочернего окна. Теперь ALT+TAB должен работать правильно 4) Все файлы преобразовал к единой кодировке (у тебя что-то в ASCII , а что-то в юникоде). Теперь все в юникоде 5) Немного изменил обработку события , для нормального завершения дочернего окна настроек
В архиве я положил библиотеку (юникод версию) и заголовок на всякий случай. Вдруг ты случайно используешь не самую последнюю версию. В файле main.bas на второй строке я добавил директиву #libpath только для себя , так что если у тебя библиотека последней версии и лежит в папках компилятора , то удали эту директиву. Если данная программа задумывается как кроссплатформенная , советую сразу править интерфейс и на linux , особенно это касается высоты гаджетов. Например на моей версии linux высота StringGadget не может быть меньше 30 пикселей. Сколько бы ты не ставил , она все равно будет >=30. Такой вот интерфейс у новых дистрибутивов, основанных на GTK3. Даже если ты используешь GTK2 , все равно размеры StringGadget адаптируются под тему GTK3.
Да , чуть не забыл. В моей библиотеки не может быть нулевых идентификаторов для гаджетов , меню и пр. , в отличии от пурика! Вообще советую при использовании библиотеки хотя бы на время забыть про пурик. Библиотека имеет какие-то сходства (названия функций , общая концепция построения) , но на этом все. Я не делал копию пуриковской либы. Поэтому , если ты видишь , что что-то работает не так как ты привык , просто читай справку, ну и конечно я готов помочь по мере сил.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Вторник, 01.02.2022, 10:56 | Сообщение # 3 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Мне кажется странным перехватывать все события во второе окне когда оно немодальное. Окна настроек обычно модальные.
|
|
| |
electrik | Дата: Вторник, 01.02.2022, 13:45 | Сообщение # 4 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Огромно благодарю за подробное объяснение, и правку исходника! Пойду смотреть.
|
|
| |