DM_GETDLGITEMSHORT: operation not implemented Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

"Вылет" при посылке DM_GETDLGITEMSHORT

Post by buniak_a_h »

Latest post of the previous page:

citRiks wrote: Sun 03 Jan, 2021 07:05 buniak_a_h,
про Dlg.GetValue() не понял, что у него не соответствует заявленным здесь АПИ?
https://api.farmanager.com/ru/macro/mac ... g.GetValue
не сообщает о фокусе когда должен (Type = 6) ?
1. Я ошибся, говоря про FarDialogItem.History - Вы в Вашем примере анализируете другой элемент (Param).
2. Я, вроде, не писал, что Dlg.GetValue не соответствует описанию. Просто нет значения Type, по которому можно получить FarDialogItem.History (а также FarDialogItem.Mask, FarDialogItem.MaxLength и FarDialogItem.UserData). Причём при Type=7 для CheckBox и RadioButton фактически возвращается FarDialogItem.Selected (ну, т.е. FarDialogItem[6]), и даже для ListBox-а и ComboBox-а возвращается некий результат анализа 6-го элемента FarDialogItem (текущая позиция - элемент FarDialogItem[6].SelectIndex). А вот сам 6-й элемент (например, если это - массив FarList) - не получить. А хотелось бы именно здесь иметь доступ к любому элементу FarDialogItem-а
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

"Вылет" при посылке DM_GETDLGITEMSHORT

Post by citRiks »

buniak_a_h,
понятно, да, 6 - это у элементов-списков это массив значений.
открывайте Виш, но я не думаю что много шансов на него,
это же просто удобство программирования :)

Виш про добычу ШОРТа был открыт только потому что ущерб самому пользованию,
без вариантов обойти это програмно
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

"Вылет" при посылке DM_GETDLGITEMSHORT

Post by buniak_a_h »

citRiks, Если просто надо вывести количество элементов в истории, то я бы на Вашем месте использовал такой код:

Code: Select all

local settings = far.CreateSettings"far"
if settings then
 local history = settings:OpenSubkey(far.Flags.FSSF_ROOT, HistoryName)
 if history then
  local his = settings:Enum(history, -1)
  if his then
   win.OutputDebugString(tostring(his.Count))
  end
 end
 settings:Free()
end
Кстати! У меня история Copy насчитывает 1000 элементов. Так вот: если прочитать все элемены (settings:Enum(history)), то тормоза заметные без секундомера
Last edited by buniak_a_h on Sun 03 Jan, 2021 08:52, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

"Вылет" при посылке DM_GETDLGITEMSHORT

Post by buniak_a_h »

citRiks,
buniak_a_h wrote: Sun 03 Jan, 2021 08:49 я бы на Вашем месте использовал такой код:
Есть одна беда: для того, чтобы получить HistoryName, требуется вызвать DM_GETDLGITEM, а он и так вернёт эту историю. Вот потому я и говорил, что не хватает функционала в Dlg.GetCalue
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by John Doe »

Оффтопик:
buniak_a_h wrote: Sun 03 Jan, 2021 08:13 А вот сам 6-й элемент (например, если это - массив FarList) - не получить. А хотелось бы именно здесь иметь доступ к любому элементу FarDialogItem-а
В макроапи доступ к спискам - через функции и свойства Menu (https://farmanagerlegacy.github.io/macro-api/menus.html).
Да, возможности ограничены, но на то оно и macro api: хотите полной функциональности - используйте апи плагинов.

По теме:
Считаю что практическая необходимость DM_GETDLGITEMSHORT пока что в этой теме не показана.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

John Doe, я точно что не самый шустрый малый :) в том числе и на этом форуме без сомнения.
но вот для меня заминка в одну десятую секунды вполне ощутима.
И эти заминки суммируются и складываются
Мы не можем говорить "это всего лишь 100 милисекунд",
потому что они суммируются с другими.
а победить можно только эффективностью на каждом этапе.

Все что касается любых тормозов в user experience - критично, и надо бы решать
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by John Doe »

citRiks wrote: Tue 05 Jan, 2021 21:40 И эти заминки суммируются и складываются
Возможно. Но в этой теме вы пока что этого не продемонстрировали на реальной задаче.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

John Doe,

заминку в 100 милисекунд я вполне продемонстрировал.

Потому что "подумаешь милисекунды, кому они нужны, нет реальной задачи"
А реальных задач и не будет, если инструмент не пригоден
Last edited by HaRT on Wed 06 Jan, 2021 17:38, edited 1 time in total.
Reason: Спрятан офтопик
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by John Doe »

citRiks wrote: Wed 06 Jan, 2021 08:49 заминку в 100 милисекунд я вполне продемонстрировал.
Абстрактную, насколько я могу судить.
Так и Sleep(1) можно 10000 раз в цикле прокрутить, и пожаловаться что он медленный.

Но я не вижу где у вас реальный пример, где бы жал кнопку и ожидал бы немедленной реакции.
citRiks wrote: Wed 06 Jan, 2021 08:49 Потому что "подумаешь милисекунды, кому они нужны, нет реальной задачи"
И это верно. Преждевременная оптимизация вредна.
citRiks wrote: Wed 06 Jan, 2021 08:49 Ну и вот, создатели ФАРа не позаботились об эффективной GetMacroCopy,
создатель LuaManager не позаботился обойти/внедрится в потроха ФАРа чтобы обойти эти ограничения.
И в результате этот LuaManager совершенно не юзабелен именно для того случая когда он и нужен,
- когда макросов много и их реально надо как-то менеджировать.
Вот это не очень понятно
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

John Doe wrote: Wed 06 Jan, 2021 09:31 Но я не вижу где у вас реальный пример, где бы жал кнопку и ожидал бы немедленной реакции.
При любом нажатии любой кнопки весьма желательна немедленная реакция.
далее, этот весь диалговый АПИ предназначен именно для UI, а все что для UI должно быть немедленным,
так как в UI сидит живой человек и он не должен ждать, а должен работать.
И вот этот ваш/наш диалоговый АПИ неизбежно притормаживает при любой работе с диалоговыми элементов,
когда неизбежно попадает на элементы с длинными списками.
Такой обьяснение устраивает?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

John Doe wrote: Wed 06 Jan, 2021 09:31 И это верно. Преждевременная оптимизация вредна.
преждевременной она была лет 10 назад, а запоздалая оптимизация тоже не слишком полезна :)
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by John Doe »

citRiks wrote: Wed 06 Jan, 2021 15:54 И вот этот ваш/наш диалоговый АПИ неизбежно притормаживает при любой работе с диалоговыми элементов,
когда неизбежно попадает на элементы с длинными списками.
И снова: я не спорю что такая ситуация возможна.
Я утверждаю лишь что в данной теме пока не приведено ни одного реального макроса с такой проблемой.

Под "реальным" я понимаю макрос выполняющий реальную работу.
https://t.me/FarManager — Telegram чат
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

John Doe,
т.е. вы утверждаете что таких скриптов не существует в природе?
значит тогда можно же выкинуть и DN_GETDLGITEM ?
Зачем он? если в мире не существует скриптов с этим работающих
И я с вами соглашусь, и даже напишу просьбу в Wishes удалить DN_GETDLGITEM за ненадобностью

Если же мы поверим что могут быть и есть макросы работающие с диалоговыми элементами,
через DN_GETDLGITEM, то неизбежно придется признать и весьма желательность DN_GETDLGITEMSHORT,
когда нужен элемент, но не нужны его списки.
А, я понял вашу логику.
Вы говорите что ВСЕ списки ВСЕГДА нужны, и предлагаете мне привести пример обратного?
Last edited by citRiks on Wed 06 Jan, 2021 17:18, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

Last edited by HaRT on Wed 06 Jan, 2021 17:44, edited 1 time in total.
Reason: Спрятан офтопик
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by John Doe »

citRiks wrote: Wed 06 Jan, 2021 17:00 т.е. вы утверждаете что таких скриптов не существует в природе?
Я утверждаю только то что написал.
citRiks wrote: Wed 06 Jan, 2021 17:00 Вы говорите что ВСЕ списки ВСЕГДА нужны, и предлагаете мне привести пример обратного?
Я предлагал вам привести в пример реальный макрос, который у вас тормозит. С форума, или ваш личный, не важно.
citRiks wrote: Wed 06 Jan, 2021 17:04 Какое слово или фразу вы не понимаете?
Не понимаю о какой именно проблеме с луаманагером вы вдруг начали говорить без всякого дополнительного контекста.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by buniak_a_h »

citRiks, кроме двух случаев (когда требуется узнать DlgItem.History и DlgItem.MaxLength) я не вижу ни одного случая полезности GetDlgItemShort-а. Но эти два случая, на мой взгляд, удобнее было бы получить через Dlg.GetValue. Как инициатор темы рекомендую на этом завершить дискуссию.
Locked

Return to “Нужна помощь”