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

published свойства


Равиль Зарипов (ZuBy)

Вопрос

  • Модераторы

Добрый день!

 

Интересует следующее, как делаются вот такие свойства?

post-59-0-04900200-1450253420.png

Красным выделено как у меня сейчас

Синим как хочу сделать

 

Подробно:

Создаю компонент, у него будут настройки цвета и шрифтов, т.к. таких настроек будет несколько я создал класс

  TVBTextPresent = class(TPersistent)
  private
    FFont: TFont;
    FFontColor: TAlphaColor;
    FTextSettings: TTextSettings;

    procedure SetFont(Value: TFont);
    procedure SetFontColor(Value: TAlphaColor);
    procedure SetTextSettings(Value: TTextSettings);
  public
    constructor Create;
    destructor Destroy; override;
    procedure Assign(Source: TPersistent); override;
  published
    property Font: TFont read FFont write SetFont;
    property FontColor: TAlphaColor read FFontColor write SetFontColor;
    property TextSettings: TTextSettings read FTextSettings write SetTextSettings;
  end;

его объявляю в компоненте

  published
    property TitlePresent: TVBTextPresent read FTitlePresent write SetTitlePresent;

но не получается чтобы свойства TVBtextPresent были видны в Object Inspector'e

 

нужно как-то зарегистрировать класс? или я неправильно объявляю свойства?

 

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

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

  • 0

Не пойму что у вас не правильно. Сейчас сделал так - все работает

 

unit vkBaseComponent;

 
interface
 
Uses
  System.SysUtils,
  System.Classes;
 
Type
  TTest = Class
  private
    Fname: String;
  published
    property name: String read Fname write Fname;
  End;
 
  TvkBaseComponent = Class(TComponent)
  private
    FVersionAPI: String;
    FVersion: String;
    FAutor: String;
    FTest: TTest;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property VersionAPI: String read FVersionAPI;
    property Version: String read FVersion;
    property Autor: String read FAutor;
    property Test: TTest read FTest write FTest;
  End;
 
procedure Register;
 
implementation
 
uses
  DateTimeHelper;
 
{ TvkBaseComponent }
procedure Register;
Begin
  RegisterComponents('dd', [TvkBaseComponent]);
End;
 
constructor TvkBaseComponent.Create(AOwner: TComponent);
begin
  inherited;
  FVersion := '0.01 Alpha';
 
  FVersionAPI := '';
  FTest := TTest.Create;
end;
 
end.

И как это выглядит

n9nrXtv.png

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

странно...

у меня классы наследуются, может из-за этого?

  TVBTextPresent = class(TPersistent)
  TVBCustomPanel = class(TControl)
Ссылка на комментарий
  • 0
  • Модераторы

врятле. А что у вас в 

SetTitlePresent 

находится? И конструктор для FTitlePresent покажите. 

procedure TVBCustomPanel.SetTitlePresent(Value: TVBTextPresent);
begin
  if (Value <> nil) then
  begin
    FTitlePresent.Assign(Value);
    Repaint;
  end;
end;
constructor TVBTextPresent.Create;
begin
  inherited Create;
  FFont := TFont.Create;
  FFontColor := TAlphaColorRec.Black;
  FTextSettings := TTextSettings.Create(self);
end;
Изменено пользователем ZuBy
Ссылка на комментарий
  • 0
  • Модераторы

Все странным образом заработало как нужно, добавил

initialization
RegisterFmxClasses([TVBTextPresent, TVBPanel]);

и вот это

[ComponentPlatformsAttribute(fgAllPlatform)]
Ссылка на комментарий

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

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

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

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

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

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

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

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

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

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