Перейти к содержанию
  • Регистрация
  • 0
Авторизация  
ruslan

Свой editor в ObjectInspector'е

Вопрос

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

Как сделать свой выпадающий редактор свойства в инспекторе объектов, наподобие выбора стиля в 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 эмодзи.

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

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

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

Авторизация  

  • Похожий контент

    • От Pulsarius
      Всем привет! У меня такой вопрос. Я настроил порядок сортировки групп компонентов в Tool Palette через Tools -> Options -> Environment Options -> Component Toolbar, но при сохранении настроек и перезапуске студии никаких изменений в Tool Palette не наблюдается, всё равно остаётся дефолтная сортировка. RAD Studio Berlin.
    • От baklanoid
      Недавно начал изучать RAD Studio (C++Builder) и возник такой вопрос (из заголовка).
       
      Нужно, например, добавить некий стандартный код ко всем кнопкам.
      Если это возможно, дайте ссылку что почитать или объясните на пальцах - Спасибо!
       
       
    • От ruslan
      Подскажите, знает ли кто как в FMX использовать свой шрифт не устанавливая его в в систему ?
      под vcl было что-то вроде:
      procedure LoadFont;   var     MyResStream: TResourceStream;   begin     MyResStream:= GetResStream('MyFont');     MyResStream.SavetoFile('MyFont.ttf');     AddFontResource(PChar('MyFont.ttf'));     SendMessage(HWND_BROADCAST, WM_FONTCHANGE,0,0);   end;   procedure UnLoadFont;   begin     RemoveFontResource('MyFont.ttf') ;     SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;   end; в фаирманках, что удивительно(сарказм),  этот не работает. 
      как я понимаю, шрифты подгружаются в момент запуска приложения, и рисуются средствами gdi...
       
      хотел поправить юнит FMX.FontGlyphs.Win по аналогии с http://delphifmandroid.blogspot.com/2015/01/true-type.html
      но TWinFontGlyphManager даже не создается( дебагер не попадает в конструктор ).
       
      вопрос: как решить эту маленькую проблему ?
       
       
  • Последние посетители   0 пользователей онлайн

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

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