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

Свой editor в ObjectInspector'е


ruslan

Вопрос

Добрый день. Подскажите, может кто-нибудь в курсе...

Как сделать свой выпадающий редактор свойства в инспекторе объектов, наподобие выбора стиля в StyleLookup. 

Там отображается иконка стиля слева. Или например как выбор цвета. Там отображается иконка с цветом.

Допустим у меня будет свой перечисляемый тип:

TMyType = (v1, v2, v3);

Как отобразить в инспекторе, в выпадающем списке, ассоциированное со значением свойство( в моем случае текст слева, т.е. итем выпадающего списка должен состоять из текста(как я понимаю лейбла) с выравниванием по левому краю( как иконка цвета, миниатюра стиля) , и самим значением перечисляемого типа(как это стандартно и работает) ) ?

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

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

  • 0

нда.... решение нашел... но, как я понимаю, под AppMethod оно работать не будет, т.к. для кастомной отрисовки выпадающего списка используются VCL-юниты, которые есть в XE7, но в AppMethod'е естестно отсутствуют..

 

вот до чего я дошол:

 

если в свой тип мы хотим всунуть такой проперти, объявляем его и прописываем в свой тип:

TMyText = type string;

TMyObject = class( TComponent )
  private
    fMyText: TMyText;
  published 
    MyText: TMyText read fMyText  write fMyText;
end;

потом объявляем редактор для нашего св-ва:

uses
  DesignEditors, DesignIntf, System.Classes, System.SysUtils, FMX.Dialogs;

type

TSuperProperty = class(TStringProperty)
    public
      function GetAttributes: TPropertyAttributes; override;
      function GetValue: string; override;
      procedure GetValues(Proc: TGetStrProc); override;
      procedure SetValue(const Value: string); override;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterPropertyEditor(TypeInfo(TMyText), TMyObject , 'MyText', TSuperProperty);
end;


{ TSuperProperty }


function TSuperProperty.GetAttributes: TPropertyAttributes;
begin
  Result := [paMultiSelect, paValueList, paRevertable];
end;


function TSuperProperty.GetValue: string;
begin
  try
    Result := GetStrValue;
  except
    on E: Exception do ShowMessage(E.Message);
  end;
end;


procedure TSuperProperty.GetValues(Proc: TGetStrProc);
begin
  Proc( 'строка 1');
  Proc( 'строка 2');


end;


procedure TSuperProperty.SetValue(const Value: string);
begin
  try
    SetStrValue(Value);
    Modified;
  except
    on E: Exception do ShowMessage(E.Message);
  end;
end;
 

после этого в ObjectInspector для нашего класса появится комбобокс со списком элементов из GetValues.

 

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

как

TSuperProperty = class(TStringProperty, ICustomPropertyListDrawing)

 

ICustomPropertyListDrawing описан в VCLEditors ( source\ToolsAPI\ )

 

для того что б по-своему отрисовать итемы, нужно реализовать все методы интерфеса в своем TSuperProperty, например как это сделано в TStyleLookupProperty (юнит FmxReg)

 

но тут же используются VCL юниты.... как быть с аппметодом ? там же StyleLookup тоже с кастомной отрисовкой..

Ссылка на комментарий
  • 0
  TListStyle = (Vertical, Horizontal);

  TTest = class(TComponent)
  private
    fq : TListStyle;
    fg: TListStyle;
    function get_fg : TListStyle;
    procedure set_fg(aa : TListStyle);
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    property q : TListStyle read get_fg write set_fg;
    { Published declarations }
  end;

Ну вот только что сделал вот так и все ок. Или я задачу не так понял?

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

да вот проперти то стандартные работают. я имею ввиду FontColor, StyleLookup.. кастомная отрисовка то есть...

чет мне кажется они все это в dcu-шки запихали...

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

видно придется делать отдельный редактор для выбора значения из списка( в отдельном окне ), что-то наподобие этого

http://docwiki.embarcadero.com/RADStudio/XE7/en/Creating_a_Component_Editor_and_a_Property_Editor_for_FireMonkey_Components

 

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...