FreeBasic
Главная
Вход
Регистрация
Суббота, 20.04.2024, 02:26Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Цикл событий в Window9 (Каждый в своём окне или общий?)
Цикл событий в Window9
electrikДата: Понедельник, 31.01.2022, 19:15 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
Привет. Ниже скину ссылку на заготовку проекта, в котором происходят странности.
Вопрос первый: цикл событий WaitEvent - может быть разный для каждого окна, или всё обрабатывается в одном цикле?
После события закрытия окна, я перехожу обратно при помощи UseGadgetList, не переходит в главное окно.
короче, у меня есть главное окно, и окно настроек. Я хочу, чтобы когда в настройках жмякают alt+f4, оно закрывалось и отображалось главное окно.
Вопрос второй: номера гаджетов в разных окнах могут быть одинаковые?
Как я понял, окна по умолчанию перекрывающиеся, но почему-то по ALT+TAB, у меня фокус переходит из настроек в главное окно, но естественно, поскольку оно заблокировано, там ничего не доступно. Надо, видимо убрать возможность перехода по ALT+Tab в заблокированное окно. Короче, ниже есть проект, может я дурак. В пурике я похожее делал и оно работало.
https://disk.pm/s/54t9CJynxdf5BTx/download
 
haavДата: Вторник, 01.02.2022, 07:29 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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.

Да , чуть не забыл. В моей библиотеки не может быть нулевых идентификаторов для гаджетов , меню и пр. , в отличии от пурика! Вообще советую при использовании библиотеки хотя бы на время забыть про пурик. Библиотека имеет какие-то сходства (названия функций , общая концепция построения) , но на этом все. Я не делал копию пуриковской либы. Поэтому , если ты видишь , что что-то работает не так как ты привык , просто читай справку, ну и конечно я готов помочь по мере сил.
Прикрепления: puma6.zip (235.2 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Вторник, 01.02.2022, 10:56 | Сообщение # 3
Подполковник
Группа: Друзья
Сообщений: 147
Репутация: 4
Статус: Offline
Мне кажется странным перехватывать все события во второе окне когда оно немодальное. Окна настроек обычно модальные.
 
electrikДата: Вторник, 01.02.2022, 13:45 | Сообщение # 4
Полковник
Группа: Друзья
Сообщений: 180
Репутация: 3
Статус: Offline
Огромно благодарю за подробное объяснение, и правку исходника! Пойду смотреть.
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Цикл событий в Window9 (Каждый в своём окне или общий?)
  • Страница 1 из 1
  • 1
Поиск: