View Issue Details

IDProjectCategoryView StatusLast Update
0002616WishesPlugins API.Dialogpublic2014-03-19 14:31
ReporterJohnDoe Assigned To 
PrioritynormalSeverityminorReproducibilityN/A
Status newResolutionopen 
Product Version3.0 
Summary0002616: В момент DN_INITDIALOG неверно работают некоторые функции
DescriptionВ частности AdvControl (ACTL_GETWINDOWINFO) и MacroControl (MCTL_GETAREA) возвращают неверную информацию.
Additional InformationТикет связан с 0002587
TagsNo tags attached.
Build

Activities

vskirdin

2014-03-13 07:31

administrator   bugnote:0011904

Что-то я не уверен, что это баг.
DN_INITDIALOG - это сигнал об инициализации внутренних компонентов (которые диалоговая процедура может изменить), но никак не полноценная работа диалога.

JohnDoe

2014-03-13 11:20

updater   bugnote:0011913

>Что-то я не уверен, что это баг.
Я тоже, поэтому это в разделе Wishes.

Возможно нужно отдельное событие срабатывающее однократно в уже инициализированном диалоге, что-то типа DN_INITDIALOGDONE

vskirdin

2014-03-18 11:37

administrator   bugnote:0011963

Чем не устраивает DN_DRAWDIALOGDONE (с учетом build 3836)?
Это событие однозначно говорит, что диалог отрисован и готов к эксплуатации.

Тут есть одно но - если заюзать ACTL_REDRAWALL, в ответ на DN_DRAWDIALOGDONE, то нишиша не увидим диалога (здесь нужен анализ - т.е. отдельный Инц).

vskirdin

2014-03-18 11:39

administrator   bugnote:0011964

Для инфы последовательность (вроде ничего не пропустил):

DN_INITDIALOG
DN_GOTFOCUS
DN_DRAWDIALOG
DN_CTLCOLORDIALOG
N раз {
    DN_DRAWDLGITEM
    DN_CTLCOLORDLGITEM
}
DN_DRAWDIALOGDONE

JohnDoe

2014-03-18 12:18

updater   bugnote:0011965

Last edited: 2014-03-18 12:19

>Чем не устраивает DN_DRAWDIALOGDONE (с учетом build 3836)?
DN_DRAWDIALOGDONE приходит после каждой перерисовки, т.е. может и 100500 раз в одном диалоге

А нужно событие, которое приходит 1 раз.

P.S
Пардон, я ещё не пробовал 3836

JohnDoe

2014-03-18 12:31

updater   bugnote:0011966

Попробовал 3836 из соседнего тикета (0002587:0011961), но всё по-прежнему.

vskirdin

2014-03-19 07:01

administrator   bugnote:0011973

> А нужно событие, которое приходит 1 раз.

Отлови DN_DRAWDIALOG, выстави свой флаг (hint: блок "твоих" данных у диалога)
При отлове очередного DN_DRAWDIALOGDONE проверь флаг.

А поподробнее про "1 раз". Ты хочешь что-то проинициализировать для "этого диалога", чтобы потом этим пользоваться, пока диалог работает?

JohnDoe

2014-03-19 07:47

updater   bugnote:0011974

>Отлови [...] выстави [...] проверь
Знаю (пользуюсь) и другими изощрёнными методами.
Но хочется по-человечески.


>чтобы потом этим пользоваться, пока диалог работает?
Это, и не только.
Например в другом скрипте http://forum.farmanager.com/viewtopic.php?f=15&t=8476 мне просто требуется однократное действие.

JohnDoe

2014-03-19 13:17

updater   bugnote:0011983

(ответ на 0002587:0011981)
>Значит DN_DRAWDIALOGDONE с установкой внутреннего флага, что ты уже получил данные.
1. Как насчёт отменить DN_DRAWDIALOGDONE для элементов (заменить на DN_DRAWDLGITEMDONE)
2. Или передавать ID элемента в Param1 (первый DN_DRAWDIALOGDONE должен получить -1)

>Второй вариант: добавить новый месаг DM_GETDIALOGTITLE[...]
>Делать?
Подождём, обдумать надо. ACTL_GETWINDOWTYPE тоже нужно чем-то заменить, иначе невозможно узнать диалог у нас или меню.

>Как воспользоваться? Очистить? Заполнить? Отобразить?
В существующем скрипте - просто активировать режим

>Если в скриптах юзается плагиновое АПИ, то видимо и поступать надо так, как будто плагин пишешь :-)
Так и делаем.
А поскольку плагиновое апи несовершенно и имеет пробелы, то обходимся имеющимся, или используем макро апи.
Ну и пишем вот на мантис, в надежде улучшить ситуацию.

Собственно, почему не добавить специальное событие?

vskirdin

2014-03-19 13:45

administrator   bugnote:0011984

> 1. Как насчёт отменить DN_DRAWDIALOGDONE для элементов (заменить на DN_DRAWDLGITEMDONE)
Правильно я понимаю, что:
DN_DRAWDLGITEMDONE будет появляться только(и согласно Писанию), если закончили рисовать весь диалог и, если рисуем _только_ один элемент, то нужен новый месаг DN_DRAWDLGITEMDONE(Param1=ID,Param2=0)

>>Второй вариант: добавить новый месаг DM_GETDIALOGTITLE[...]
>Подождём, обдумать надо. ACTL_GETWINDOWTYPE тоже нужно чем-то заменить, иначе невозможно узнать диалог у нас или меню.
А чего ждать? Не получишь ты никогда корректных данных, вызывая ACTL_GETWINDOWTYPE в процессе инициализации диалога (точнее до тех пор, пока он не начнет взаимодействовать с юзером - т.е. проинициализирован и первый раз отрисован).


>>Как воспользоваться? Очистить? Заполнить? Отобразить?
>В существующем скрипте - просто активировать режим
...чтобы в начале взаимодействия пользователя с диалогом фильтр уже был активным, так?

В первом DN_DRAWDIALOGDONE:
SendDlgMessage(DM_SETFOCUS,на_листбокс_или_комбобокс)
SendDlgMessage(DM_SETDROPDOWNOPENED,TRUE)
SendDlgMessage(DM_KEY,послать_Ctrl-Alt-F)
не то?

JohnDoe

2014-03-19 14:31

updater   bugnote:0011986

>если рисуем _только_ один элемент, то нужен новый месаг DN_DRAWDLGITEMDONE (Param1=ID,Param2=0)
Лично мне это сейчас нужно только чтобы DN_DRAWDIALOGDONE приходил согласно писания - один раз.
Но кто-то же зачем-то сделал это для каждого элемента? Может даже использует?
Если же никто не использует, то можно пока обойтись без этого нового DN_DRAWDLGITEMDONE.
(Просто привести в соответствие с писанием, т.е. убрать лишние DN_DRAWDIALOGDONE)

>Не получишь ты никогда корректных данных, вызывая ACTL_GETWINDOWTYPE в процессе инициализации диалога
Подождать альтернативного решения, типа того о чём сказано выше.

>чтобы в начале взаимодействия пользователя с диалогом фильтр уже был активным, так?
Именно. Но если после DN_DRAWDIALOGDONE, то уже можно использовать Menu.Filter()

Issue History

Date Modified Username Field Change
2014-03-06 16:33 JohnDoe New Issue
2014-03-13 07:31 vskirdin Note Added: 0011904
2014-03-13 11:20 JohnDoe Note Added: 0011913
2014-03-18 11:37 vskirdin Note Added: 0011963
2014-03-18 11:39 vskirdin Note Added: 0011964
2014-03-18 12:18 JohnDoe Note Added: 0011965
2014-03-18 12:19 JohnDoe Note Edited: 0011965
2014-03-18 12:31 JohnDoe Note Added: 0011966
2014-03-19 07:01 vskirdin Note Added: 0011973
2014-03-19 07:47 JohnDoe Note Added: 0011974
2014-03-19 13:17 JohnDoe Note Added: 0011983
2014-03-19 13:45 vskirdin Note Added: 0011984
2014-03-19 14:31 JohnDoe Note Added: 0011986