DM_GETDLGITEMSHORT: operation not implemented Topic is solved

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

DM_GETDLGITEMSHORT: operation not implemented

Post by buniak_a_h »

Latest post of the previous page:

citRiks, кроме двух случаев (когда требуется узнать DlgItem.History и DlgItem.MaxLength) я не вижу ни одного случая полезности GetDlgItemShort-а. Но эти два случая, на мой взгляд, удобнее было бы получить через Dlg.GetValue. Как инициатор темы рекомендую на этом завершить дискуссию.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

John Doe wrote: Wed 06 Jan, 2021 20:20 Не понимаю о какой именно проблеме с луаманагером вы вдруг начали говорить без всякого дополнительного контекста.
John Doe wrote: Wed 06 Jan, 2021 20:20 Я предлагал вам привести в пример реальный макрос, который у вас тормозит. С форума, или ваш личный, не важно.
citRiks wrote: Wed 06 Jan, 2021 08:49 в своем коде что касается UI я убираю всякие заминки в принципе
А вот например замечательный но дооолго думающий менеджер скриптов Луа, на базе меню.
LuaManager
viewtopic.php?t=7936
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

buniak_a_h wrote: Wed 06 Jan, 2021 21:06 citRiks, кроме двух случаев (когда требуется узнать DlgItem.History и DlgItem.MaxLength) я не вижу ни одного случая полезности GetDlgItemShort-а. Но эти два случая, на мой взгляд, удобнее было бы получить через Dlg.GetValue. Как инициатор темы рекомендую на этом завершить дискуссию.
не, ну при чем тут кто инициатор, я эту тему нашел когда искал на форуме что за беда такая с этим меседжем,
который описан в АПИ, но не работает.
ну поискал, а тут вездесущий вы :) но это наверное не дает вам особых авторских прав?
Так считаю что у нас с вами накопилось достаточно пожеланий чтобы этот меседж был.

ЛуаМанагер именно в силу совокупности множества маленьких неэффективностей, которые складываются в одну большую.
и поэтому это замечательный пример небоходимости оптимизировать, поэтому и приведен в пример,
хоть он и не конкретно изза GETDLGITEM тормозит.
А на больших списках тормозить будет именно изза GETDLGITEM.
Есть у меня примеры конечно, всякие, но смотреть надо ширше, а к людям быть мяхче :)
если есть легкая возможность убрать тормоз, то и надо его убрать.
даже если это "всего лишь" 100 милисекунд, зачем они нужны и кому надо чтобы они были? не понимаю ..
как эти милисекудны суммируются до неюзабельности прекрасно показано ЛуаМанагером,
который прекрасный макрос сам по себе, но пал ненужной жертвой
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2851
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by buniak_a_h »

citRiks wrote: Wed 06 Jan, 2021 23:24 у нас с вами накопилось достаточно пожеланий чтобы этот меседж был
Таки нет! Меня вполне удовлетворил ответ Шмуэля. Не вижу смысла плодить сущности, пока Оккама своей бритвой не сделает обрезание.
citRiks wrote: Wed 06 Jan, 2021 23:24 тормозить будет именно изза GETDLGITEM
Нет, не будет. Если добавить указанный функционал, то GETDLGITEM в 90% случаев станет ненужным. А тормозить будет только на DI_LIST и на очень больших DI_COMBOBOX. И только из-за 6-го элемента - массива. Остальное - микросекунды. Да и …SHORT тут не поможет.
Про LuaManager ничего не понял. У меня работает.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

buniak_a_h wrote: Wed 06 Jan, 2021 23:50 . Если добавить указанный функционал, то GETDLGITEM в 90% случаев станет ненужным.
ну указанный функционал это альтернатива того же самого, можно ка через МакроАпи, так и через ДиалогАпи, что является делом вкуса больше, и еще немного делом удобства. :) ну как хотите вобщем. ну ладно, не важно уже кто чего понял или не понял, можно закончить тему
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

PS
A мене вот ДиалогАпи нравятся больше чем МакроАпи.
Универсальнее что ли. Например для новой функциональности просто добавляем еще один тип меседжа или евента
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2851
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by buniak_a_h »

Добавочка.
citRiks wrote: Wed 06 Jan, 2021 23:24 нас с вами накопилось достаточно пожеланий чтобы этот меседж был
Посмотрел я описание (точнее, отличие) DM_GETDLGITEMSHORT от DM_GETDLGITEM. Разница в трёх строковых позициях. Т.е. и для DI_COMBOBOX-а, и для DI_LISTBOX-а 6-й элемент (ListItems) возвращается по обоим вызовам. Я сильно сомневаюсь, что игнорирование 3-х (а в большинстве случаев - 2-х, т.к. Mask используется крайне редко) элементов возвращаемой структуры может сильно увеличить производительность.
Last edited by buniak_a_h on Sat 09 Jan, 2021 03:32, edited 1 time in total.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

buniak_a_h wrote: Sat 09 Jan, 2021 03:32 Т.е. и для DI_COMBOBOX-а, и для DI_LISTBOX-а 6-й элемент (ListItems) возвращается по обоим вызовам
Значит надо чтобы в реализации не возвращал этого лишнего :) благо что переделывать не надо
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2851
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 154 times
Been thanked: 406 times
Contact:

DM_GETDLGITEMSHORT: operation not implemented

Post by buniak_a_h »

citRiks wrote: Sat 09 Jan, 2021 05:37 Значит надо чтобы в реализации не возвращал этого лишнего благо что переделывать не надо
Можно требовать "всё, кроме …". А можно требовать одно поле (или некую его характеристику) той же структуры. Лично мне второй вариант нравится больше, но это как раз - функция Dlg.GetValue. Тем более, что она - расширяемая.
Вы что-то писали про "макро АПИ", "диалог АПИ", "плугиновый АПИ"… Я не силён в терминологии, знаю только, что доступ из скрипта к одним и тем же данным диалога возможен несколькими путями. И мне бы понравилось больше всего иметь 2 варианта: получить полную структуру и получить конкретную характеристику. А получать "почти все" - это какой-то гибрид. Явно излишний.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

buniak_a_h wrote: Sat 09 Jan, 2021 05:50 Можно требовать "всё, кроме …". А можно требовать одно поле (или некую его характеристику) той же структуры. Лично мне второй вариант нравится больше, но это как раз - функция Dlg.GetValue. Тем более, что она - расширяемая.
Dlg.GetValue я подозреваю в меньшей эффективности, долго обьяснять, и может я и не прав.
Если вкратце - то <handle>.send(..) возможно более эффективен поскольку обращается напрямую через готовый handle.
а Dlg.GetValue(..) возможно проделывает более долгий путь через FarMacroАpi.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

buniak_a_h wrote: Sat 09 Jan, 2021 05:50 Вы что-то писали про "макро АПИ", "диалог АПИ", "плугиновый АПИ"…
как я понимаю, тут так:
1.) MаcroApi - это в основном наследие старой модели API, доступна для скриптинга из древних (не Луа) макросов
эта модель довольно обширна, но признана не удовлетворяющей там чему-то.
2.) PluginAPI - то что нативные (C++, Pascal) плагины могут делать, и это больше чем из старой MаcroApi
3.) "Новые" FarAPI, подразделяются на PanelAPI, DialogAPI, EditorAPI и др.
Эти "новые" API предоставляют для НЕплагинового скриптинга все прежние MacroAPI и почти все PluginAPI.
Т.е. это новые, с несколько другой моделью (например всякие события и меседжи), а те старые.
Поэтому на предложение добавить чего-либо в "старые" MacroAPI и смотрят косо.

Если я в чем то ошибаюсь, пусть меня поправят
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1443
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 439 times
Been thanked: 91 times

DM_GETDLGITEMSHORT: operation not implemented

Post by citRiks »

buniak_a_h wrote: Sat 09 Jan, 2021 05:50 А получать "почти все" - это какой-то гибрид. Явно излишний.
не, тут я вот что, есть диалоговые элементы обычные, а есть списки, в позиции 6, может еще в каких-то позициях.
Списки чреваты тем что в них может быть неограниченное количество значений.
Поэтому нужны как минимум два варианта:
1.) SHORT Не нужны списки, а только базовые составляющие, такие как координаты, имя, другие одиночные значения.
Могут быть предоставвлены всем (без-списковым) скопом, поскольку никаких значительных обьемов памяти тут нет и быть не может
2.) "FULL", или "LONG", когда нужны списки, пусть идут вместе с остальными элементами, они погоды все равно не сделают
Могут быть предоставлены всем скопом, потому что программа (acceptor) предполагается
что должна быть готова что сейчас понадобиться самосвал для памяти.

В идеале надо бы добавить еще:
3.) SELECTIVE "Взять конкретный список/значение" из элемента, это больше похоже на то что вы предлагаете,
и я с этимс огласен, но мне первые два представляются более важными, и вас они тоже будут удовлетворять,
точнее вам, как и мне нужен 1.) SHORT
Last edited by citRiks on Sat 09 Jan, 2021 17:11, edited 2 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
John Doe
Бюрократ
Posts: 13231
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 45 times
Been thanked: 335 times

DM_GETDLGITEMSHORT: operation not implemented

Post by John Doe »

Итоги такие:
DM_GETDLGITEMSHORT изменяться не будет в любом случае.
Нужна ли какая-то другая команда (DM_GETDLGITEM_NOLIST) неясно абсолютно, и продолжение заполнения темы словоблудием к пониманию приблизить нас не может.

Не показан практический сценарий, когда производительности DM_GETDLGITEM недостаточно
Если же реальный сценарий обнаружится - надо будет разобраться где именно узкое место. Не исключено, что проблема только в производительности Lua.

На этом тему закрываю.
https://t.me/FarManager — Telegram чат
Locked

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