FreeBasic
Главная
Вход
Регистрация
Вторник, 15.10.2024, 16:17Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 6 из 8
  • «
  • 1
  • 2
  • 4
  • 5
  • 6
  • 7
  • 8
  • »
Баги или ошибки библиотеки
VitaminДата: Четверг, 28.01.2021, 13:58 | Сообщение # 76
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Не знаю , что там изменилось в 10 винде. В общем пока я вижу выход в добавлении одной строчки после DisplayPopupMenu.


Код
PostMessage (hwnd, WM_NULL, 0, 0)

Напиши помогло или нет. У меня вроде с этой строчкой реагирует адекватно. Если будет нормально ,  я добавлю эту строку в функцию DisplayPopupMenu. И да , спасибо за сообщение об этом баге!


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
VitaminДата: Четверг, 28.01.2021, 18:28 | Сообщение # 78
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: 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
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата Vitamin ()
Так вот при компиляции Win_x32 всё работает как надо, а при компиляции Win_x64 в массиве ARRAY возвращается не то, что надо. Проблема решается заменой типа массива ARRAY с Integer на Long.
Может есть смысл отобразить это дело в справке?


Спасибо за сообщение , я исправлю этот момент в исходном коде и в справке.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Понедельник, 10.01.2022, 19:42 | Сообщение # 80
Полковник
Группа: Друзья
Сообщений: 182
Репутация: 3
Статус: Offline
Друг нашёл ошибку:

Цитата
Серега, у тебя же есть связь с разработчиком Window9? Я тут просто багу нашел, что на Win64 Tab не работает. Shift+Tab - работает, а вот именно Tab - нет.


Сообщение отредактировал electrik - Понедельник, 10.01.2022, 19:43
 
haavДата: Вторник, 11.01.2022, 06:36 | Сообщение # 81
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата electrik ()
Друг нашёл ошибку:

Цитата
Серега, у тебя же есть связь с разработчиком 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
Репутация: 3
Статус: Offline
Спасибо за исправление. Ну и ещё подгончик. Поскольку ты реализовал  навигацию с клавиатуры, соответственно это тоже надо фикснуть. Когда создаём дочернее окно, пусть это модальное, или MessageBox, короче не важно, после закрытия дочернего окна, фокус не возвращается на последний элемент управления. К примеру, есть простое окно с кнопкой, и если вызвать MessageBox, после возврата из него, фокус падает в никуда, ну посути просто в окно, а не на кнопку.
 
haavДата: Четверг, 13.01.2022, 19:57 | Сообщение # 83
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата electrik ()
Когда создаём дочернее окно, пусть это модальное, или MessageBox, короче не важно, после закрытия дочернего окна, фокус не возвращается на последний элемент управления. К примеру, есть простое окно с кнопкой, и если вызвать MessageBox, после возврата из него, фокус падает в никуда, ну посути просто в окно, а не на кнопку.


Я смогу сделать возврат фокуса к последнему гаджету после диалогов, входящих в библиотеку , но я не смогу это сделать для любых диалогов. Например, если ты вызовешь MessBox (входит в библиотеку) , то фокус вернется на гаджет , который был до вызова диалога. Но если например ты вызовешь MessageBox winapi , то никакого возврата не будет. Тут уже вручную придется getfocus/setfocus.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
haavДата: Пятница, 14.01.2022, 11:50 | Сообщение # 84
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Я сделал возврат фокуса на гаджеты после использования диалогов window9.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Пятница, 21.01.2022, 16:05 | Сообщение # 85
Полковник
Группа: Друзья
Сообщений: 182
Репутация: 3
Статус: Offline
Ещё друг нашёл ошибочку:

Цитата
Серега, привет! Еще одна подсказка разработчику Window9: надо восстанавливать фокус еще также при получении фокуса в окно. Я имею в виду, когда альт-табаешься в окно. По сути, это событие получения фокуса в окне.
 
haavДата: Пятница, 21.01.2022, 19:12 | Сообщение # 86
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата electrik ()
Ещё друг нашёл ошибочку:

Смотря как считать. Если с позиции , что вот так сделано у диалогов , а значит "аля так правильно , мы так привыкли" , то да это ошибка. А если я такое поведение задумывал изначально, это считается за ошибку? На самом деле , я не знаю как лучше. Правильно ли сразу отнимать фокус у главного окна? Вон в пурике при алт-табах фокус на гаджеты не возвращается и при нажатии tab , фокус переходит к следующему гаджету. А в iup сделано как в диалогах. А у меня при активации окна , фокус сбрасывается на самый первый гаджет.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Пятница, 21.01.2022, 19:40 | Сообщение # 87
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
С диалоговыми окнами из ресурсов всё просто, там не нужно руками переключать фокус, этим занимается менеджер диалогов.

Однако с фокусом в окнах созданных CreateWindow придётся возиться. Нам придётся самостоятельно обрабатывать навигацию по Tab, Shift+Tab, навигацию стрелками и мнемонические клавиши (можно схитрить через IsDialogMessage).

В статье на хэбре разобрано:
Окна на чистом WinAPI. Или просто о сложном / Хабр (habr.com)
 
haavДата: Суббота, 22.01.2022, 05:48 | Сообщение # 88
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата zamabuvaraeu ()
(можно схитрить через IsDialogMessage).

Много лет назад я пробовал внедрять табы с помощью IsDialogMessage , но этот вариант пришлось убирать. Сейчас уже не помню , какие там были проблемы , но этот костыль себя не оправдал. Сейчас все сделано через хоткеи и такой вариант мне нравится.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
electrikДата: Суббота, 22.01.2022, 06:41 | Сообщение # 89
Полковник
Группа: Друзья
Сообщений: 182
Репутация: 3
Статус: Offline
Сейчас в пурике проверил. Если фокус не установлен ни на один гаджет, то при альт+таб, при возврате в окно пуриковской программы, фокус так и находится не на гаджете. Если я установил фокус на кнопку, альт табнулся из проги, а потом в неё вернулся, фокус падает на кнобку. чтобы небыло разногласий, вот скомпиленный пример:
https://disk.pm/s/gZmqjbkGMH9827x/downloads
 
haavДата: Суббота, 22.01.2022, 08:20 | Сообщение # 90
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Я верю тебе. Значит у нас версии разные.

Версия 4.50 (32-bit) вообще не умеет переходить по табам , по крайней мере у меня не работает.

------

Версия 5.21 lts (32-bit):

например у нас 2 кнопки с номерами 1 и 2

если фокус был на гаджете под номером 1 , то после перехода по альт-таб , фокус на главном окне. Если нажать таб , то фокус оказывается на гаджете с номером 2.

------

Ладно, раз вы считаете , что так лучше и удобнее , я попробую сделать такое поведение. Если честно , мне все равно , я почти никогда не пользуюсь табами ни на винде , ни на линуксе. Просто привык мышью тыкать.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 6 из 8
  • «
  • 1
  • 2
  • 4
  • 5
  • 6
  • 7
  • 8
  • »
Поиск: