2016-04-08 11 views
1

У меня есть собственный компонент Delphi, созданный для Firemonkey (fmx). Теперь мне нужно применить свой собственный стиль к компоненту. Стиль сохраняется в ресурсе. Ранее это делалось в методе GetStyleObject, вызывая TStyleManager.LoadFromResource.Как применить пользовательский стиль к пользовательскому компоненту Firemonkey с помощью Delphi Seattle

Этот метод (LoadFromResource) больше не существует в Delphi 10 Seattle для рамки Firemonkey.

Мой код в XE7 работает через LoadFromResource:

function TFMXPic.GetStyleObject: TFmxObject; 
var 
style : string; 
begin 
    if (StyleLookup = '') then 
    begin 
    style := GetClassStyleName; 
    Result := TControl(TStyleManager.LoadFromResource(HInstance, 
    style, RT_RCDATA)); 
    Exit; 
    end; 
    Result := inherited GetStyleObject; 
end; 

Как добиться этого в Delphi 10 Сиэтл?

+0

Нет XE10. Вы имеете в виду Delphi 10 Seattle? –

+0

да. Последний Delphi. – Christo

ответ

1

Во-первых, я не думаю, что это правильно, чтобы проверить StyleLookup. Это свойство указывает компоненту искать это конкретное имя стиля в книге стилей.

Затем вы пытаетесь загрузить файл стиля на уровне компонента. FMX работает так. У вас есть книга стиля, которая загружает файл стиля, а затем каждый компонент в форме использует эту книгу для определения имени стиля, определенного значением stylelookup.

Из моей головы, этот курс действий должен делать эту работу:

  1. Добавить файл стилей в ресурсах вашего проекта, как вы уже сделали. Скажем, у вас есть свой стиль под названием «MyComponent» для компонента

  2. Добавить Stylebook в виде

  3. в OnCreate даже формы, загрузите файл ресурса в TResourceStream, а затем загрузить последнюю к Stylebook использования TStyleBook.LoadFromStream

  4. Теперь вы можете получить доступ к стилю, установив = свойство StyleLookup «» MyComponent вашего компонента

Надеется, что это помогает.

+0

Спасибо. К сожалению, TStylebook не имеет свойства для LoadFromresource. Кроме того, я использовал стиль для моего пользовательского компонента во время разработки. Я надеялся все еще выполнить это. – Christo

+0

Christo, извините, я имел в виду TStylebook.LoadFromStream. Я исправил его в сообщении. –

+0

Спасибо за это, я получил его работу. Теперь мне нужно только заставить его работать над временем разработки, а не только во время выполнения. Какие-либо предложения? – Christo

0

Я нашел решение. Спасибо, ребята, в программном обеспечении TMS. Класс TStyleStreaming следует использовать вместо класса TStyleManager. Я изменил свой код следующим образом (все теперь работает)

function TMyComponent.GetStyleObject: TFmxObject; 
var 
style : string; 
begin 
    if (StyleLookup = '') then 
    begin 
    style := GetClassStyleName; 
    Result := TControl(TStyleStreaming.LoadFromResource(HInstance, 
    style, RT_RCDATA)); 
    Exit; 
    end; 
    Result := inherited GetStyleObject; 
end;