Перейти к содержанию
Fire Monkey от А до Я
  • 0

Наследники компонента


Krok27

Вопрос

Добрый день.

1. Создаю наследника от TLabel через newComponent, допустим TLabel_one, бросаю на форму, текст виден.

2. Создаю наследника от TLabel_one - TLabel_one_chil, кладу на форму - текста уже нет((.

Что я не так делаю? Выбран не правильный родитель? 

ex.png

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

не советую делать свои компоненты... надо стремиться к тому, что ваш проект должен быть скачан из репозитория и сразу запущен... без дополнительных установок чего-либо... то, что вы хотите сделать с TLabel, точно можно сделать с помощью стилей (прости господи) или фрейма...

Ссылка на комментарий
  • 0

Задача специфична и с помощью стилей ее не решить. К метке добавляю интерфейс,  чисто виртуальные функции, которые буду реализованы в наследниках. Можно выполнить множественное наследование.

Но я его не люблю и готовить умею)).

Ссылка на комментарий
  • 0
1 час назад, Krok27 сказал:

К метке добавляю интерфейс,  чисто виртуальные функции, которые буду реализованы в наследниках. Можно выполнить множественное наследование.

звучит тревожно.. еще и наследники будут? вот это метка! становится похоже на российский сериал какой-то... оно того стоит?

Ссылка на комментарий
  • 0

наследовать ради интерфейса? не проще композицией интерфейс внести?
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;

Если надо пример - пиши, скину

Изменено пользователем Slym
Ссылка на комментарий
  • 0
5 часов назад, krapotkin сказал:

Написал бы сразу статью сюда. Для всех полезно было бы

Хотелось бы рецензию на статью :)

Изменено пользователем Slym
Ссылка на комментарий
  • 0
В 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. Хотелось обойтись малой кровью при переходе. Композиция всегда считалась лучше чем наследование. Займёмся композицией. Спасибо всем.

Изменено пользователем Krok27
Ссылка на комментарий
  • 0
1 час назад, Krok27 сказал:

Спасибо. ComObject все таки завязан на Windows, теряется смысл FMX как фреймворка. Просто есть порядка 30 компонентов разной степени сложности, написанные под VCL. Хотелось обойтись малой кровью при переходе. Композиция всегда считалась лучше чем наследование. Займёмся композицией. Спасибо всем.

VCLComObject все таки завязан только названием! Остальное завязано только на QueryInterface, а оно нативно и мультиплатформенно

Ссылка на комментарий
  • 0

Пока не видел что бы QueryInterface использовался помимо Microsoft.  Дайте ссылку, пожалуйста, для ознакомления.

Модель COM,  в основании которой лежит QueryInterface - детище Microsoft. Возможно я отстал от жизни))

Ссылка на комментарий
  • 0

Да весь FMX на интерфейсах и QueryInterface...
FireDAC так вообще страшный сон все на QueryInterface, на фабриках фабрик.

а Модель COM - построена на одном интерфейсе - IDispatch, все!

Изменено пользователем Slym
Ссылка на комментарий
  • 0

    Добрый день, товарищи! Переделываю проект основанный на 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

наследовать можно хоть от чего - самое простое TRectangle наверное

ровно как и в VCL, для создаваемого компонента Parent нужно указывать, иначе его не будет на экране

Изменено пользователем krapotkin
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...