KerberX

Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Ребят, такой вот вопрос теперь. Кто как делает к своим программам форму настроек? Имею ввиду, через показ диалоговых окон, или как? Особенно интересует вопрос, когда нужно между ними переключаться. Я конечно знаю, что можно отключать через API предыдущее открытое окно по дескриптору, или закрывать предыдущий диалог по нему же, но всё же интересно, кто как из вас делает, а то что-то мне не очень нравится такой метод... Может что-то поинтереснее есть. | Делай как хочешь, хоть на Page, хоть на DialogEx. AMS не позволяет использовать несколько диалоговых окон (DialogEx) одновременно. Только одно из них активно. Остальные можно активировать через WinAPI используя их HWND, но при этом многие объекты начинают странно себя вести. Я уже описывал тебе всё это. Цитата: Вообще в AMS можно использовать несколько DialogEx'ов и не блокировать основное окно, но при этом вылезают несколько проблем. Если открыт DialogEx и основное окно разблокировано, то объекты, которые не имеют HWND (Button, Label и т. п.) перестают нормально обновляться от функции изменения их состояния (Label.SetText например). В этом случае помогает вызов Page.Redraw. Объекты с HWND (Input и подобные) ведут себя нормально. Если открыть несколько диалогов, то с основным окном ситуация не меняется, но работать будет только последний открытый диалог. Если его закрыть, то заработает предыдущий открытый. Если на первом открытом диалоге должны выполнятся какие-то автоматические действия (по таймеру) когда открыт второй диалог, то перерисовка объектов тоже будет тупить и в этом случае DialogEx.Redraw не помогает. Пример этого безобразия прилагается. https://yadi.sk/d/VqMd8hFl3H73Bz | Самый нормальный способ это использовать один DialogEx и на нём уже создавать необходимые страницы настроек. И так как AMS не предлагает никакого удобного способа сделать это, то писать код скрытия и показа объектов нужно будет самому. У меня есть такой, но я его тебе не дам он кривой и не стоит его кому-либо показывать, даже не смотря на то, что он работает. Из-за идиотского дизайна API стандартной библиотеки AMS написание нужного кода будет крайне медленным процессом. Они должны были сделать библиотеку следуя объектно-ориентированной парадигме, а не тупо чисто процедурной. У меня есть одна библиотека, которая может облегчить эту работу - AMSObject. Она находится внутри этого примера: https://yadi.sk/d/yoUU1H6jzgZnQ | Всего записей: 597 | Зарегистр. 08-09-2011 | Отправлено: 17:06 04-09-2017 | Исправлено: KerberX, 18:20 04-09-2017 |
|