| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Вопрос по скинам DevExpress |
| Автор: xackera 31.1.2014, 19:00 |
| Доброго времени суток всем! Возникла следующая проблема: в программе есть несколько форм - допустим:DataModule, главная форма, форма авторизации и заставка. Для построения интерфейса используютя компоненты от DevExpress 13.1 VCL. На DataModule размещен TdxSkinController, который скинет все формы в приложении. При старте приложения инициализируется датамодуль, форма заставки и форма авторизации. Необходимо сделать так, чтобы заставка не скинилась. Форма заствки имеет класс TForm, главная и форма авторизации TdxRibbonForm. Заставка создаётся при помощи компонента TJvTransparentForm в режиме tfmLayeredWindow. Довольно удобный компонет для создания красивой формы. https://www.devexpress.com/Support/Center/Question/Details/Q318238 посылают в документацию, я пытался сделать как написанов документации (довольно скудной кстати), но заставка всё равно скинится - причём довольно странным образом - вместо "красивой" формы появляется чёрный прямоугольник (скин DarkSide)/ У кого нибудь сть идеи как это побороть? |
| Автор: xackera 4.2.2014, 10:54 | ||||
| Проблема решилась достаточно просто. Суть её заключалось в том, что компонент TJvTransparentForm при создании прозрачной формыв режиме tfmLayeredWindow, создаёт дополнительную прозрачную форму класса TJvControlForm на которой размещает контролы с основной формы. Дополнительная форма расплагается над основной. Основную форму TJvTransparentForm преобразует в "слоёное" при помощи UpdateLayeredWindow. TdxSkinController перехватывает сообщения WndProc для применения скина к любому окну в приложении. В документации от devExpress написано, что для запрета применения скина к какой либо форме необходимо в событии SkinForm компонента TdxSkinController необходимо прописать:
Соответственно выяснив, что TJvTransparentForm создаёт дополнительную форму, а так же учитывая, что "слоённое" окно не получает сообщения от ОС, выше приведённый код модифицируется:
И всё работает как надо. |