Баги или ошибки библиотеки
|
|
Vitamin | Дата: Четверг, 28.01.2021, 13:58 | Сообщение # 76 |
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Offline
| библиотека от 14.09.19 FreeBASIC Compiler - Version 1.07.0 (08-25-2019), built for win64 (64bit) Windows 10 v1809 x64 (на виртуалке пробовал другую версию Windows 10 x64 - результат такой же)
|
|
| |
haav | Дата: Четверг, 28.01.2021, 16:36 | Сообщение # 77 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Не знаю , что там изменилось в 10 винде. В общем пока я вижу выход в добавлении одной строчки после DisplayPopupMenu.
Код PostMessage (hwnd, WM_NULL, 0, 0)
Напиши помогло или нет. У меня вроде с этой строчкой реагирует адекватно. Если будет нормально , я добавлю эту строку в функцию DisplayPopupMenu. И да , спасибо за сообщение об этом баге!
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
Vitamin | Дата: Четверг, 28.01.2021, 18:28 | Сообщение # 78 |
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Offline
| Да, помогло, спасибо. И на Windows Xp x32 с добавлением этой строки ничего не сломалось. Добавлено (21.12.2021, 19:50) --------------------------------------------- Привет haav! библиотека от 5.06.2021 Для множественного удаления из списка ListBoxGadget используется функция: Function GetSelCountListBox(ByVal gadget As long, ByVal ARRAY As Integer Ptr=0) As Integer
Так вот при компиляции Win_x32 всё работает как надо, а при компиляции Win_x64 в массиве ARRAY возвращается не то, что надо. Проблема решается заменой типа массива ARRAY с Integer на Long. Может есть смысл отобразить это дело в справке?
|
|
| |
haav | Дата: Вторник, 21.12.2021, 21:26 | Сообщение # 79 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Цитата Vitamin ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/10/lastpost.gif) ) Так вот при компиляции Win_x32 всё работает как надо, а при компиляции Win_x64 в массиве ARRAY возвращается не то, что надо. Проблема решается заменой типа массива ARRAY с Integer на Long. Может есть смысл отобразить это дело в справке?
Спасибо за сообщение , я исправлю этот момент в исходном коде и в справке.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Понедельник, 10.01.2022, 19:42 | Сообщение # 80 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Друг нашёл ошибку:
Цитата Серега, у тебя же есть связь с разработчиком Window9? Я тут просто багу нашел, что на Win64 Tab не работает. Shift+Tab - работает, а вот именно Tab - нет.
Сообщение отредактировал electrik - Понедельник, 10.01.2022, 19:43 |
|
| |
haav | Дата: Вторник, 11.01.2022, 06:36 | Сообщение # 81 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Цитата electrik ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/10/lastpost.gif) ) Друг нашёл ошибку:
Цитата Серега, у тебя же есть связь с разработчиком Window9? Я тут просто багу нашел, что на Win64 Tab не работает. Shift+Tab - работает, а вот именно Tab - нет.
Какая-то странная штука со структурой ACCEL. Само определение в оф. документации какое-то стремное: https://docs.microsoft.com/en-us....r-accel Что за многоточие? Судя по всему мелкомягкие уже внесли какие-то правки в работу , связанную с этой структурой на WIN64 , но сказать об этом забыли. Я начал экспериментировать со структурой ACCEL и стало понятно , что она должна иметь больший буфер как минимум на один байт. В противном случае функция CreateAcceleratorTable завершается с ошибкой доступа к памяти. Я так думаю , что новое определение для WIN64 должно быть такое:
Код TYPE ACCEL as BYTE fVirt as WORD key as DWORD cmd ' в старом варианте здесь тип WORD END TYPE
В общем , я не стал переопределять структуру , а просто увеличил размер буфера для структурированной переменной ACCEL. Сейчас все должно работать , архивы обновлены.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Вторник, 11.01.2022, 11:21 | Сообщение # 82 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Спасибо за исправление. Ну и ещё подгончик. Поскольку ты реализовал навигацию с клавиатуры, соответственно это тоже надо фикснуть. Когда создаём дочернее окно, пусть это модальное, или MessageBox, короче не важно, после закрытия дочернего окна, фокус не возвращается на последний элемент управления. К примеру, есть простое окно с кнопкой, и если вызвать MessageBox, после возврата из него, фокус падает в никуда, ну посути просто в окно, а не на кнопку.
|
|
| |
haav | Дата: Четверг, 13.01.2022, 19:57 | Сообщение # 83 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Цитата electrik ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/10/lastpost.gif) ) Когда создаём дочернее окно, пусть это модальное, или MessageBox, короче не важно, после закрытия дочернего окна, фокус не возвращается на последний элемент управления. К примеру, есть простое окно с кнопкой, и если вызвать MessageBox, после возврата из него, фокус падает в никуда, ну посути просто в окно, а не на кнопку.
Я смогу сделать возврат фокуса к последнему гаджету после диалогов, входящих в библиотеку , но я не смогу это сделать для любых диалогов. Например, если ты вызовешь MessBox (входит в библиотеку) , то фокус вернется на гаджет , который был до вызова диалога. Но если например ты вызовешь MessageBox winapi , то никакого возврата не будет. Тут уже вручную придется getfocus/setfocus.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
haav | Дата: Пятница, 14.01.2022, 11:50 | Сообщение # 84 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Я сделал возврат фокуса на гаджеты после использования диалогов window9.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Пятница, 21.01.2022, 16:05 | Сообщение # 85 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Ещё друг нашёл ошибочку:
Цитата Серега, привет! Еще одна подсказка разработчику Window9: надо восстанавливать фокус еще также при получении фокуса в окно. Я имею в виду, когда альт-табаешься в окно. По сути, это событие получения фокуса в окне.
|
|
| |
haav | Дата: Пятница, 21.01.2022, 19:12 | Сообщение # 86 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Цитата electrik ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/10/lastpost.gif) ) Ещё друг нашёл ошибочку: Смотря как считать. Если с позиции , что вот так сделано у диалогов , а значит "аля так правильно , мы так привыкли" , то да это ошибка. А если я такое поведение задумывал изначально, это считается за ошибку? На самом деле , я не знаю как лучше. Правильно ли сразу отнимать фокус у главного окна? Вон в пурике при алт-табах фокус на гаджеты не возвращается и при нажатии tab , фокус переходит к следующему гаджету. А в iup сделано как в диалогах. А у меня при активации окна , фокус сбрасывается на самый первый гаджет.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Пятница, 21.01.2022, 19:40 | Сообщение # 87 |
Подполковник
Группа: Друзья
Сообщений: 148
Статус: Offline
| С диалоговыми окнами из ресурсов всё просто, там не нужно руками переключать фокус, этим занимается менеджер диалогов.
Однако с фокусом в окнах созданных CreateWindow придётся возиться. Нам придётся самостоятельно обрабатывать навигацию по Tab, Shift+Tab, навигацию стрелками и мнемонические клавиши (можно схитрить через IsDialogMessage).
В статье на хэбре разобрано: Окна на чистом WinAPI. Или просто о сложном / Хабр (habr.com)
|
|
| |
haav | Дата: Суббота, 22.01.2022, 05:48 | Сообщение # 88 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Цитата zamabuvaraeu ( ![Ссылка на цитируемый текст](/.s/img/fr/ic/10/lastpost.gif) ) (можно схитрить через IsDialogMessage). Много лет назад я пробовал внедрять табы с помощью IsDialogMessage , но этот вариант пришлось убирать. Сейчас уже не помню , какие там были проблемы , но этот костыль себя не оправдал. Сейчас все сделано через хоткеи и такой вариант мне нравится.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Суббота, 22.01.2022, 06:41 | Сообщение # 89 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Сейчас в пурике проверил. Если фокус не установлен ни на один гаджет, то при альт+таб, при возврате в окно пуриковской программы, фокус так и находится не на гаджете. Если я установил фокус на кнопку, альт табнулся из проги, а потом в неё вернулся, фокус падает на кнобку. чтобы небыло разногласий, вот скомпиленный пример: https://disk.pm/s/gZmqjbkGMH9827x/downloads
|
|
| |
haav | Дата: Суббота, 22.01.2022, 08:20 | Сообщение # 90 |
![haav](/avatar/00/5416-572652.jpg) Генералиссимус
Группа: Администраторы
Сообщений: 1363
Статус: Offline
| Я верю тебе. Значит у нас версии разные.
Версия 4.50 (32-bit) вообще не умеет переходить по табам , по крайней мере у меня не работает.
------
Версия 5.21 lts (32-bit):
например у нас 2 кнопки с номерами 1 и 2
если фокус был на гаджете под номером 1 , то после перехода по альт-таб , фокус на главном окне. Если нажать таб , то фокус оказывается на гаджете с номером 2.
------
Ладно, раз вы считаете , что так лучше и удобнее , я попробую сделать такое поведение. Если честно , мне все равно , я почти никогда не пользуюсь табами ни на винде , ни на линуксе. Просто привык мышью тыкать.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
|