Переключение диалогов в макросе

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
Smitis
Posts: 1584
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Переключение диалогов в макросе

Post by Smitis » Wed 28 Aug, 2013 21:17

Понадобилось в макросе рисовать разные диалоги и переключаться между ними. Иерархия - одноранговая, т.е. не из одного открыли другой, потом третий и закрыли в обратном порядке, а из любого можно открыть любой другой. Как оказалось, в ФАРе нет возможности удалить все элементы диалога и перерисовать его с другими, что бы обойтись одним диалогом (или я ошибся?).

Пока пришло в голову два решения:
1. При переключении закрывать диалог и переоткрывать его с другими items. Плохо, что при переключении всё мелькает на фоне панелей. Да и иницилизируется диалог каждый раз.
2. Создать несколько диалогов, открыть один и из диалоговой процедуры открывать другие. Для двух работает нормально. Для большего получается какая-то заумная логика переключения и, боюсь, будет опять мелькание на фоне первого диалога.

Есть ещё какие-нибудь варианты?
Разум когда-нибудь победит.

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

Re: Переключение диалогов в макросе

Post by zg » Wed 28 Aug, 2013 23:22

создать один диалог со всеми возможными элементами. при переключении нужные показывать, ненужные — скрывать.

User avatar
Alexey Samlyukov
Posts: 1760
Joined: Tue 15 Mar, 2005 17:28
Been thanked: 3 times
Contact:

Re: Переключение диалогов в макросе

Post by Alexey Samlyukov » Thu 29 Aug, 2013 04:15

угу, в advcmp так и сделал. и в netbox, наверно, похоже.
на мантисе были иде про di_page, но оптимальных реализаций так и не было вроде.

Smitis
Posts: 1584
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Re: Переключение диалогов в макросе

Post by Smitis » Thu 29 Aug, 2013 11:30

Значит, придётся скрывать/показывать. Это же можно делать сразу после DialogInit до DialogRun?
Разум когда-нибудь победит.

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

Re: Переключение диалогов в макросе

Post by zg » Thu 29 Aug, 2013 12:54

Smitis wrote:Значит, придётся скрывать/показывать. Это же можно делать сразу после DialogInit до DialogRun?
это можно даже до DialogInit делать: DIF_HIDDEN.

Smitis
Posts: 1584
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Re: Переключение диалогов в макросе

Post by Smitis » Sun 01 Sep, 2013 11:45

Пока остановился на невидимых элементах. Хотя, конечно, скорость прорисовки удручает - на глаз видно, как по диалогу проходит "волна" изменений.
Разум когда-нибудь победит.

Shmuel
Posts: 5836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 213 times

Re: Переключение диалогов в макросе

Post by Shmuel » Sun 01 Sep, 2013 12:02

Smitis wrote:Пока остановился на невидимых элементах. Хотя, конечно, скорость прорисовки удручает - на глаз видно, как по диалогу проходит "волна" изменений.
Скорее всего это из-за того, что происходит перерисовка после прятания/показа каждого элемента. Перерисовку нужно запрещать во время замены элементов и разрешать только после её окончания, тогда "волны" не будет.

Smitis
Posts: 1584
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

Re: Переключение диалогов в макросе

Post by Smitis » Sun 01 Sep, 2013 13:20

О, с DM_ENABLEREDRAW теперь нормально. Не подумал :oops: Спасибо.
Разум когда-нибудь победит.

Post Reply

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