Latest post of the previous page:
да, сейчас понял что упустил смысл вами сказанного,
теперь кажется что догадываюсь о чем речь,
но надо поэкспериментировать с этим чтобы проверить правильность понимания,
чуть позжее сегодня отпишусь, спасибо.
Latest post of the previous page:
да, сейчас понял что упустил смысл вами сказанного,
если вы это меня спрашиваете?
Вот пример, взято отсюда - viewtopic.php?f=60&t=9900
Code: Select all
--[[02]] {F.DI_RADIOBUTTON, 5, 3, 0, 0, 1, 0, 0, "DIF_GROUP", M.REMDUP, op="delete"; removeFirst=false},
--[[03]] {F.DI_RADIOBUTTON, 5, 4, 0, 0, 0, 0, 0, 0, M.CLRDUP, op="clear"; removeFirst=false},
op
и removeFirst
.Увы, эти «кастомные поля» игнорируются (не возвращаются) по сообщению DM_GETDLGITEM. Т.е. обработчик событий должен иметь доступ к первоначальному массиву DlgItems. Я умудрился сделать такой скрипт, в котором это было никак. Пришлось обходить через DM_USER. А также "вставкой" «прослойки» между
far.Dialog
и настоящим хендлером, передающей в хендлер ещё один параметр. Короче, задача решена, но как-то пер-анально. Впрочем, на LUA многие приемы выглядят с непривычки прокто-логично…У меня сложилось впечатление что в Си-апи аналогичная ситуация: данные бесполезны для всех кроме их владельца.buniak_a_h wrote: ↑Fri 23 Apr, 2021 18:29 Увы, эти «кастомные поля» игнорируются (не возвращаются) по сообщению DM_GETDLGITEM
Возможно стоило бы обсудить, и поискать другие возможные решения.buniak_a_h wrote: Короче, задача решена, но как-то пер-анально.
1. Думаю, что вы не заблуждаетесь. В общем случае невладелец диалога не может знать ни структуру данных, ни смысл значений их элементов.
Но можно подсмотреть в исходниках, а может быть даже наоборот, специально задекларировать и предусмотреть сторонний доступ.
В целом да, но для некоторых задач действительно удобно оперировать данными, прикрепленными к конкретному диалогу или его элементам.
Так мне казалось, что прямое решение было запланировано, но не реализовано. Я как раз имею в виду поле tFarDialogItem.UserData. В описании структуры tFarDialogItem написано:
А в описании сообщения DM_GETITEMDATA написано так:[12] UserData: integer
Также в статье, посвящённой структуре FarDialogItem написано:Менеджер Диалогов возвращает указатель на ранее переданные данные плагином (или 0, если плагин не ассоциировал данные с этим элементом диалога)
Отсюда и непонятка: то ли только целое, то ли указатель на (произвольные LUA-типовые) данные. Если реализовать передачу таблицы, то задача была бы решена прямо.intptr_t UserData;
…
UserData
Значение, связанное с элементом диалога. Данные можно получить с помощью DM_GETITEMDATA.
Если это диалог вашего скрипта, то, как было указано выше, кастомные поля решают проблему.buniak_a_h wrote: ↑Fri 23 Apr, 2021 22:11 Если реализовать передачу таблицы, то задача была бы решена прямо.
Может, я чего-то недопонял? Я писал, что эти кастомные поля невозможно получить посылкой DM_GETDLGITEM. Отсюда и обходные пути
А если диалог сформирован не в моём скрипте? Тогда я имею доступ только к первым 12-ти регулярным полям элемента диалога. Ни к именованным полям, ни к полям вне диапазона 1-12 так доступа нет.
Я Вас не втягивал. Даже не ожидал, что Вы вмешаетесь.
Достаточно было бы в описании вставить слово "Целочисленное". Ну и чуть выше по этой теме вместо «Указатель на ранее переданные данные» - целое число. Хотя, возможно, опять перепутал функции, вызываемые из LUA-скрипта с функциями плагина.
Значит у вас уже есть полный контроль над тем, что передавать хэндлеру [дополнительно].