Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBExpert Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Проблема тянется довольно давно, вплоть до версии 2014.4.4.1 точно. В окнах просмотра полей таблиц периодически перестают действовать хоткеи удаления. Баг воспроизводится прямо сразу при открытии свойств таблицы. При этом если вызвать контекстное меню на гриде полей и закрыть его, никакого действия не выполняя, хоткей "оживает". Если поле этого перейти на другую вкладку и вернуться, хоткей снова умирает.

Что касается мешанины - одни и те же действия над разными объектами завязаны на разные хоткеи.
Объекты базы удаляются по Ctrl+Del
Поля таблиц - по Shift+Del
Ключи и индексы - по Del
Записи - по Ctrl+Del, причем это вообще, кажется, заслуга DBGrid-а, а не самого IBE, поскольку данная возможность нигде в интерфейсе не обозначена.

А в сборном гриде с объектами БД (домены, генераторы и т.п.) тоже много загадок:
- В контекстном меню нет пунктов "удалить/создать" (кроме списка исключений - есть удаление, но там пункт в самом низу, тогда как в меню для полей таблиц - наверху)
- В списке доменов контекстного меню нет вообще
- В списке исключений удаление по Ctrl-Del, а в списке генераторов - по Shift+Del

Кстати, индексы из формы свойств таблицы удаляются вообще без подтверждения.

В общем, было бы отлично всё привести к единообразию
17 июл 14, 11:06    [16316991]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Баг попробую поправить, а шорткаты трогать не буду.
Кого мешанина нервирует - тот идет в Tools | Localize IBExpert и меняет неугодные шорткаты на свои.
17 июл 14, 16:18    [16319506]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Окей, сейчас попробую, а насчет меню что думаешь? Вроде бы несложно исправляется, зато пользы от единообразия много
17 июл 14, 17:56    [16320148]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Хм, счастья не получилось.
Во-первых, при вызове через Tools | Localize IBExpert хоткеи редактировать нельзя - нет соответствующего edit
Во-вторых, открыв эту форму через системное меню дочерней формы, я не увидел большинства команд, показанных на первом шаге, например, Drop domain, drop table и т.д.
В-третьих, edit хоткея обычный Del ни с каким модификатором ввести не дает, сбрасывая хоткей на "Нет". Удалось ввести только Num Del. Однако после этого данный хоткей вообще не работает. Думал вручную подправить на Del, но так и не нашел, где IBE хранит измененные хоткеи
17 июл 14, 18:41    [16320316]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal,

Ну, значит, не судьба. Не знаю, почему там Ctrl+Del не вводится и разбираться сейчас не буду.
Шорткаты хранятся в IBExpert.lng, в профиле пользователя, в виде целого числа.
Баг поправил.
18 июл 14, 06:33    [16322358]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
К сожалению, проблема в косорукости MS. Простого решения никто пока не нашел.
А в каком формате этот lng?
18 июл 14, 10:56    [16323360]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal
А в каком формате этот lng?


В своем собственном.
18 июл 14, 13:00    [16324518]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Ну что ж, ясно. Менять не желаем, средства настройки нефункциональны, о формате настроек не расскажем. По крайней мере, баг исправлен, и на том спасибо
18 июл 14, 17:35    [16326620]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal,

Послушай, чтобы выяснить, как хранятся данные в lng-файле, достаточно заглянуть в него и потратить несколько минут на осмысление увиденного.
20 июл 14, 07:19    [16330659]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6412
IBExpert,

Ну что строки хранятся в виде "Длина:Строка" - это понятно. В начале файла - что-то вроде индекса, да? А вот сами хоткеи я что-то там так и не разглядел ;(

P.S. Это мне вчера ночью нечего делать было ;)
21 июл 14, 13:59    [16335341]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
DarkMaster
Ну что строки хранятся в виде "Длина:Строка" - это понятно. В начале файла - что-то вроде индекса, да? А вот сами хоткеи я что-то там так и не разглядел ;(


Непосредственно перед двумя байтами длины строки идут два байта (WORD) шортката.
В начале файла - заголовок и индекс.
21 июл 14, 14:53    [16335820]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6412
IBExpert,

Ага, спасибо. Будет вам редактор хоткеев врокости ;)
21 июл 14, 16:27    [16336481]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
DarkMaster
Ага, спасибо. Будет вам редактор хоткеев врокости ;)


А смысл? Проще ibec_ функцию сделать, которая будет модифицировать хоткей по ID.
21 июл 14, 18:14    [16337238]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6412
IBExpert,

Ну вообще-то я сторону IBEC/плагина и думал. Хотя мне это нужно как прошлогодний снег ;)
21 июл 14, 19:49    [16337625]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Не прошло и десяти лет, как я снова наткнулся на эту бесячесть. В программе в этом плане ничего не поменялось :(
После многочасового сношания выяснилось, что теперь %AppData%\Roaming\HK-Software\IBExpert\IBExpert.lng хоть и сохраняет изменения, сделанные в интерфейсе, но не читает их, а действительно используемые шорткаты хранятся в файле IBExpert.scm. Кроме того, теперь шорткат хранится в двух байтах: если настроить действие Dr&op Database на Ctrl-1, то в файле IBExpert.lng увидим

00 00 31 40 0E 00 Dr&op Database

00 00 - это непонятно что
31 40 - "1" и $40, то есть ssCtrl, в старшем полубайте
0E 00 - длина строки, 14

Ну и в IBExpert.scm меняется соответственно.
Отсюда порядок действий.
1. Через системное меню всех дочерних окон, где требуется изменить шорткаты (у каждого окна свой набор) (вверху-слева, нажать иконку IBE - Localize / change shortcuts) вызвать диалог локализации, выставить его у нужных действий на простое сочетание, тот же Ctrl-1. Я менял в 4 местах: сборные списки доменов (Drop domain), генераторов и иключений (Delete) и полей таблицы (Drop field). В остальных местах работает Del, а в дереве объектов - Ctrl-Del.
2. Выйти из IBE
3. Открыть %AppData%\Roaming\HK-Software\IBExpert\IBExpert.scm в hex редакторе
4. Найти все вхождения "1@" / "$31 $40" (это Ctrl-1) и заменить их на нужное сочетание. Я сделал "2E 00", это Del без модификаторов, для единообразия с уже имеющимися клавишами (в списках ключей и индексов).

К сообщению приложен файл. Размер - 4Kb
24 сен 20, 18:07    [22203714]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Получившийся scm файл

К сообщению приложен файл (IBExpert.scm - 5Kb) cкачать
24 сен 20, 18:09    [22203716]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal,

Ты чего сказать-то хотел??
25 сен 20, 04:50    [22203914]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert
Ты чего сказать-то хотел??

1. Поделиться актуальным рабочим рецептом ручного редактирования шорткатов
2. Похвастаться, какой я умный, что разобрался в шайтан-системе
3. Еще раз намекнуть, что проблема таки есть, причем совершенно элементарно решаемая на уровне программы
25 сен 20, 10:08    [22203990]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal

1. Поделиться актуальным рабочим рецептом ручного редактирования шорткатов


Зачем их hex-редактором редактировать, если их можно редактировать в форме локализации?
А еще есть ibec_ibe_SetLngShortcut.

Fr0sT-Brutal

3. Еще раз намекнуть, что проблема таки есть, причем совершенно элементарно решаемая на уровне программы


Что за проблема? Ты в этой теме их как минимум три озвучил, и они друг с другом никак не связаны.
26 сен 20, 07:23    [22204584]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert

Зачем их hex-редактором редактировать, если их можно редактировать в форме локализации?

Можно, да нельзя. Все сочетания с Del просто сбрасывают шорткат (4й пост в теме)
IBExpert
А еще есть ibec_ibe_SetLngShortcut.

Вот это погляжу. Честно искал ее в списке, т.к. в тот раз шла речь, но было сложно догадаться, что ее надо смотреть в разделе DB functions :)
IBExpert

Что за проблема? Ты в этой теме их как минимум три озвучил, и они друг с другом никак не связаны.

Проблема в разношерстности шорткатов. Были б однотипными, лезть в унутрь и не пришлось бы
28 сен 20, 10:49    [22205308]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Что-то не выходит чаша с функцией. Только один раз как-то сработала, потом никак.

Функция работает только в следующем виде:
1 - запускаем скрипт
execute ibeblock
as
begin
  Res = ibec_ibe_SetLngShortcut(1019, 'Shift+Alt+D');
  ibec_ShowMessage(res);
end;

2 - вызываем форму Localize
3 - закрываем форму Localize

Тогда шорткат появляется. Но в любом случае изменения не сохраняются, т.е. это только если в After start писать

Сообщение было отредактировано: 28 сен 20, 15:30
28 сен 20, 15:30    [22205685]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal
Но в любом случае изменения не сохраняются, т.е. это только если в After start писать


Так и задумано. Это меняет шорткат только в текущей сессии, и оно должно быть в after start.
А зачем тебе сохранять изменения?

Fr0sT-Brutal

2 - вызываем форму Localize
3 - закрываем форму Localize


Ну все правильно, при закрытии этой формы происходит обновление локализованных строк и шорткатов во всех остальных открытых формах эксперта. Просто дернуть ibec_ibe_SetLngShortcut в SQL-редакторе для этого недостаточно.
28 сен 20, 16:07    [22205742]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert
Так и задумано. Это меняет шорткат только в текущей сессии, и оно должно быть в after start.
А зачем тебе сохранять изменения?

Я бы скорее задал вопрос, зачем менять шорткат только в текущей сессии.
IBExpert

Ну все правильно, при закрытии этой формы происходит обновление локализованных строк и шорткатов во всех остальных открытых формах эксперта. Просто дернуть ibec_ibe_SetLngShortcut в SQL-редакторе для этого недостаточно.

Ну, в таком виде, кмк, смысл от функции практически нулевой... По крайней мере, разумного сценария ее применения мне в голову не приходит
28 сен 20, 16:27    [22205772]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal

Я бы скорее задал вопрос, зачем менять шорткат только в текущей сессии.


Ты дурака включил что-ли? Перед началам каждой сессии выполняется скрипт after start и блок событий after start.
Прописал один раз и забыл.
28 сен 20, 16:50    [22205797]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert
Ты дурака включил что-ли? Перед началам каждой сессии выполняется скрипт after start и блок событий after start.
Прописал один раз и забыл.

Это я понял. Непонятно, зачем в приципе менять шорткаты только в текущей сессии. Разве что для мультиюзерности, но изменения и так сохраняются в профиле
28 сен 20, 17:17    [22205826]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal
Непонятно, зачем в приципе менять шорткаты только в текущей сессии.


Потому что это просто, и решает твою проблему, например. И живут эти скрипты/блоки в user database, а не в каком-то scm-файле, про который даже я забываю.
28 сен 20, 17:32    [22205845]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert
Потому что это просто, и решает твою проблему, например. И живут эти скрипты/блоки в user database, а не в каком-то scm-файле, про который даже я забываю.

Ну а кто ж заставлял делать эти странные scm файлы ))) жили б настройки в виде текста в базе, проблем было б намного меньше. Ну да ладно. Мне не в лом сделать стартовый скрипт. Тем более что он, судя по всему, запускается до применения шорткатов, и в итоге меняет их как и ожидалось.
28 сен 20, 18:24    [22205900]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
Всё работает, метод хоть и странный, но задачу выполняет, я доволен вполне.

-- Стартовый скрипт для настройки
execute ibeblock
as
begin
  -- ## Меняем шорткаты для некоторых действий удаления на единообразные (Delete) ##
  -- 1652 Drop/delete domain
  -- 1809 Delete (generators)
  -- 1628 Delete (exceptions)
  -- 1710 Drop/delete field
  ShortCutCodesStr = '1652;1809;1628;1710';
  ShortCutCodes = ibec_Explode(';', ShortCutCodesStr);
  for i = 0 to ibec_High(ShortCutCodes) do
  begin
    Res = ibec_ibe_SetLngShortcut(ibec_Cast(ShortCutCodes[i], __typeInteger), 'Del');
    if (Res = 0) then
    begin
      ibec_ShowMessage('ibec_ibe_SetLngShortcut вернула ошибку');
      Break;
    end;
  end;

end;
28 сен 20, 18:59    [22205923]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal

Ну а кто ж заставлял делать эти странные scm файлы ))) жили б настройки в виде текста в базе, проблем было б намного меньше.


Прикинь, это делалось еще тогда, когда никакой "базы" и в помине не было. Как бы не двадцать лет назад...
Тебя тогда рядом не оказалось, поэтому наставить на путь истинный было просто некому.
29 сен 20, 09:39    [22206157]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal
Всё работает, метод хоть и странный


Гы. Четыре последовательных вызова ibec_ibe_SetLngShortcut безо всяких извращений - слишком просто для настоящего джедая?
И эти люди запрещают нам ковыряться в носу...
29 сен 20, 09:41    [22206159]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert
Прикинь, это делалось еще тогда, когда никакой "базы" и в помине не было. Как бы не двадцать лет назад...
Тебя тогда рядом не оказалось, поэтому наставить на путь истинный было просто некому.

Ну чего ты в бутылку лезешь? Если бы все оправдывали легаси исключительно тем, что было раньше, все до сих пор бы жили в пещерах.
IBExpert
Гы. Четыре последовательных вызова ibec_ibe_SetLngShortcut безо всяких извращений - слишком просто для настоящего джедая?
И эти люди запрещают нам ковыряться в носу...

Не люблю дублирования. И я бы рад сделать через массив интов, но возможности его объявить я не нашел
29 сен 20, 10:35    [22206209]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
IBExpert
Member

Откуда: От верблюда
Сообщений: 3331
Fr0sT-Brutal
Если бы все оправдывали легаси исключительно тем, что было раньше, все до сих пор бы жили в пещерах.


Оно работает? Работает. То, что кого-то такая реализация не очень устраивает, еще нифига не повод все переделывать. И все не так просто, как тебе оттуда кажется.

Fr0sT-Brutal

Не люблю дублирования. И я бы рад сделать через массив интов, но возможности его объявить я не нашел


Да делай как хочешь, мне все равно. Только не рассказывай мне, как надо было делать 20 лет назад. Я задним умом тоже офигенно крепок.

А массив создать очень просто:
ShortCutCodes = ibec_Array(1652, 1809, 1628, 1710);
29 сен 20, 11:32    [22206251]     Ответить | Цитировать Сообщить модератору
 Re: Баг и мешанина с хоткеями  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 466
IBExpert
Оно работает? Работает. То, что кого-то такая реализация не очень устраивает, еще нифига не повод все переделывать. И все не так просто, как тебе оттуда кажется.

Да делай как хочешь, мне все равно. Только не рассказывай мне, как надо было делать 20 лет назад. Я задним умом тоже офигенно крепок.

А массив создать очень просто:
ShortCutCodes = ibec_Array(1652, 1809, 1628, 1710);

Слушай, ну вот зачем так ершиться? Насчет файла я без претензий и наездов, там смайлик специально стоит. И конкретно эта штука мне никоим образом не мешает. Все имеют дело со старым софтом, у всех самые разные ситуации бывают.
Вот за функцию спасибо! Сложно догадаться искать её в разделе Dataset. Итоговый вариант:
-- Стартовый скрипт для настройки
execute ibeblock
as
begin
  -- ## Меняем шорткаты для некоторых действий удаления на единообразные (Delete) ##
  -- 1652 Drop/delete domain
  -- 1809 Delete (generators)
  -- 1628 Delete (exceptions)
  -- 1710 Drop/delete field
  ShortCutCodes = ibec_Array(1652, 1809, 1628, 1710);
  for i = 0 to ibec_High(ShortCutCodes) do
  begin
    Res = ibec_ibe_SetLngShortcut(ShortCutCodes[i], 'Del');
    if (Res = 0) then
    begin
      ibec_ShowMessage('ibec_ibe_SetLngShortcut вернула ошибку');
      Break;
    end;
  end;

end;
29 сен 20, 11:47    [22206268]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / IBExpert Ответить