Krok27 Опубликовано 4 декабря, 2020 Поделиться Опубликовано 4 декабря, 2020 Добрый день. 1. Создаю наследника от TLabel через newComponent, допустим TLabel_one, бросаю на форму, текст виден. 2. Создаю наследника от TLabel_one - TLabel_one_chil, кладу на форму - текста уже нет((. Что я не так делаю? Выбран не правильный родитель? Цитата Ссылка на комментарий
0 slav_z Опубликовано 4 декабря, 2020 Поделиться Опубликовано 4 декабря, 2020 не советую делать свои компоненты... надо стремиться к тому, что ваш проект должен быть скачан из репозитория и сразу запущен... без дополнительных установок чего-либо... то, что вы хотите сделать с TLabel, точно можно сделать с помощью стилей (прости господи) или фрейма... Цитата Ссылка на комментарий
0 Krok27 Опубликовано 8 декабря, 2020 Автор Поделиться Опубликовано 8 декабря, 2020 Задача специфична и с помощью стилей ее не решить. К метке добавляю интерфейс, чисто виртуальные функции, которые буду реализованы в наследниках. Можно выполнить множественное наследование. Но я его не люблю и готовить умею)). Цитата Ссылка на комментарий
0 slav_z Опубликовано 8 декабря, 2020 Поделиться Опубликовано 8 декабря, 2020 1 час назад, Krok27 сказал: К метке добавляю интерфейс, чисто виртуальные функции, которые буду реализованы в наследниках. Можно выполнить множественное наследование. звучит тревожно.. еще и наследники будут? вот это метка! становится похоже на российский сериал какой-то... оно того стоит? Цитата Ссылка на комментарий
0 Slym Опубликовано 9 декабря, 2020 Поделиться Опубликовано 9 декабря, 2020 (изменено) наследовать ради интерфейса? не проще композицией интерфейс внести? property OptionsIntfImpl: IFDStanOptions read FOptionsIntf implements IFDStanOptions; можно было бы без наследования вообще через TComponent.VCLComObject, но какая то редиска в TPresentedControl не спустила QueryInterface до TComponent.QueryInterface но можно пропатчить FMX.Controls.Presentation.pas function TPresentedControl.QueryInterface(const IID: TGUID; out Obj): HRESULT; else Result := inherited; и делать так var Test:ITest; begin if Supports(Label1, ITest, Test) then Test.Test; end; Если надо пример - пиши, скину Изменено 9 декабря, 2020 пользователем Slym Цитата Ссылка на комментарий
0 krapotkin Опубликовано 9 декабря, 2020 Поделиться Опубликовано 9 декабря, 2020 3 часа назад, Slym сказал: Если надо пример - пиши, скину Написал бы сразу статью сюда. Для всех полезно было бы Цитата Ссылка на комментарий
0 Slym Опубликовано 9 декабря, 2020 Поделиться Опубликовано 9 декабря, 2020 Пример в атаче, там же патченый FMX.Controls.Presentation VCLComObject.zip Цитата Ссылка на комментарий
0 Slym Опубликовано 9 декабря, 2020 Поделиться Опубликовано 9 декабря, 2020 (изменено) 5 часов назад, krapotkin сказал: Написал бы сразу статью сюда. Для всех полезно было бы Хотелось бы рецензию на статью Изменено 9 декабря, 2020 пользователем Slym Цитата Ссылка на комментарий
0 Krok27 Опубликовано 10 декабря, 2020 Автор Поделиться Опубликовано 10 декабря, 2020 (изменено) В 09.12.2020 в 05:43, Slym сказал: наследовать ради интерфейса? не проще композицией интерфейс внести? property OptionsIntfImpl: IFDStanOptions read FOptionsIntf implements IFDStanOptions; можно было бы без наследования вообще через TComponent.VCLComObject, но какая то редиска в TPresentedControl не спустила QueryInterface до TComponent.QueryInterface но можно пропатчить FMX.Controls.Presentation.pas Спасибо. ComObject все таки завязан на Windows, теряется смысл FMX как фреймворка. Просто есть порядка 30 компонентов разной степени сложности, написанные под VCL. Хотелось обойтись малой кровью при переходе. Композиция всегда считалась лучше чем наследование. Займёмся композицией. Спасибо всем. Изменено 10 декабря, 2020 пользователем Krok27 Цитата Ссылка на комментарий
0 Slym Опубликовано 10 декабря, 2020 Поделиться Опубликовано 10 декабря, 2020 1 час назад, Krok27 сказал: Спасибо. ComObject все таки завязан на Windows, теряется смысл FMX как фреймворка. Просто есть порядка 30 компонентов разной степени сложности, написанные под VCL. Хотелось обойтись малой кровью при переходе. Композиция всегда считалась лучше чем наследование. Займёмся композицией. Спасибо всем. VCLComObject все таки завязан только названием! Остальное завязано только на QueryInterface, а оно нативно и мультиплатформенно Цитата Ссылка на комментарий
0 Krok27 Опубликовано 10 декабря, 2020 Автор Поделиться Опубликовано 10 декабря, 2020 Пока не видел что бы QueryInterface использовался помимо Microsoft. Дайте ссылку, пожалуйста, для ознакомления. Модель COM, в основании которой лежит QueryInterface - детище Microsoft. Возможно я отстал от жизни)) Цитата Ссылка на комментарий
0 Slym Опубликовано 10 декабря, 2020 Поделиться Опубликовано 10 декабря, 2020 (изменено) Да весь FMX на интерфейсах и QueryInterface... FireDAC так вообще страшный сон все на QueryInterface, на фабриках фабрик. а Модель COM - построена на одном интерфейсе - IDispatch, все! Изменено 10 декабря, 2020 пользователем Slym Цитата Ссылка на комментарий
0 Николай Бахтин Опубликовано 25 ноября Поделиться Опубликовано 25 ноября Добрый день, товарищи! Переделываю проект основанный на VCL компонентах. В этом проекте есть компонент X, унаследованный в конечном итоге от TCustomControl - внутри TButton, TEdit и TProgressBar. Учусь разрабатывать FMX компоненты. Пара вопросов: 1) - От какого класса следует наследоваться данному компоненту в варианте FMX. 2) Унаследовал от TControl, не увидел ничего. Унаследовал от TPanel - вижу только TPanel. Вот код конструктора: constructor TFMX_XComponent.Create(AOwner: TComponent); begin inherited; Width:=100; Height:=50; Edit:=TEdit.Create(self); Edit.Position.X:=5; Edit.Position.Y:=5; Edit.Width:=45; Edit.Height:=22; Edit.Visible:=True; Button:=TButton.Create(self); Button.Position.X:=55; Button.Position.Y:=5; Button.Width:=40; TrackBar:=TTrackBar.Create(self); TrackBar.Align:=TAlignLayout.Bottom; end; Цитата Ссылка на комментарий
0 krapotkin Опубликовано 25 ноября Поделиться Опубликовано 25 ноября (изменено) наследовать можно хоть от чего - самое простое TRectangle наверное ровно как и в VCL, для создаваемого компонента Parent нужно указывать, иначе его не будет на экране Изменено 25 ноября пользователем krapotkin Цитата Ссылка на комментарий
0 Николай Бахтин Опубликовано 26 ноября Поделиться Опубликовано 26 ноября Благодарю, за помощь! Действительно - совсем забыл! Цитата Ссылка на комментарий
Вопрос
Krok27
Добрый день.
1. Создаю наследника от TLabel через newComponent, допустим TLabel_one, бросаю на форму, текст виден.
2. Создаю наследника от TLabel_one - TLabel_one_chil, кладу на форму - текста уже нет((.
Что я не так делаю? Выбран не правильный родитель?
Ссылка на комментарий
14 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.