Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 необходимо прописать:

Код

  if AForm.Class is TSplashForm then
   UseSkin:=false;


Соответственно выяснив, что TJvTransparentForm создаёт дополнительную форму, а так же учитывая, что "слоённое" окно не получает сообщения от ОС,  выше приведённый код модифицируется:

Код

 if AForm.ClassName= 'TJvControlForm' then
  UseSkin:=false;
 

И всё работает как надо. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)