powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
7 сообщений из 7, страница 1 из 1
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39470545
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Суть такая:
Код: pascal
1.
// Переопределили свой редактор коллекций для TIgnoreClassCollection = class(TOwnedCollection)


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  ITest = interface
  ['{657C66B4-5E67-4C7B-A41E-38EA0D77893D}']
    procedure Test;
  end;

  TXmlSerializerCollectionEditor = class(TCollectionEditor, ITest)
  public
    procedure Test;
  end;

  TXmlSerializerCollectionProperty = class(TCollectionProperty)
  public
    function GetEditorClass: TCollectionEditorClass; override;
  end;

  function TXmlSerializerCollectionProperty.GetEditorClass: TCollectionEditorClass;
  begin
    Result := TXmlSerializerCollectionEditor;
  end;
  RegisterPropertyEditor(TypeInfo(TIgnoreClassCollection), nil, '', TXmlSerializerCollectionProperty);


Нарисовали свои редакторы для строк, для определенных свойств, которые будут отображаться только через ранее зарегистрированный editor.
Код: pascal
1.
2.
3.
4.
5.
6.
  TNameUnitProperty = class(TStringProperty)
  public
    function GetAttributes: TPropertyAttributes; override;
    procedure GetValues(aProc: TGetStrProc); override;
  end;
RegisterPropertyEditor(TypeInfo(string), TIgnoreClassItem, 'NameUnit', TNameUnitProperty);



Когда мы вызываем в IDE редактор коллекций, создается экземпляр класса TXmlSerializerCollectionProperty.
Затем, в зависимости сколько у нас элементов коллекции, создаются экземпляры уже свойств этой коллекции TNameUnitProperty.
Мне надо в экземлярах TNameUnitProperty получить доступ непосредственно к экземпляру TXmlSerializerCollectionProperty ну или к TXmlSerializerCollectionEditor в которой они были созданы.
Что-то вроде:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TNameUnitProperty.GetValues(aProc: TGetStrProc);
var
  s: string;
begin
  ((Получить непосредственно экземпляр TXmlSerializerCollectionEditor в котором был создан этот редактор свойства) as ITest).Test();
  for s in RttiUnits.Units do
    aProc(s);
end;
...
Рейтинг: 0 / 0
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39472812
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Редактор свойства и редактор компонента между собой никак не связаны.
В один промежуток времени могут быть выбраны НЕСКОЛЬКО компонентов с разными редакторами компонентов, но для некоторых свойств (которые в инспекторе) редактор свойств будет один.
...
Рейтинг: 0 / 0
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39472821
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впринципе я до этого дошел. У меня оказался частный случай. Когда свойство есть только у конкретного компонента, а мне достаточно было любого редактора компонента. Но то что изначально мне было необходимо отлично решается через синглтон.
...
Рейтинг: 0 / 0
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39472828
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
var CurrentCollectionEditor: TCollectionEditor;

TXmlSerializerCollectionProperty = class(TCollectionProperty)
  public
    function GetEditorClass: TCollectionEditorClass; override;
    procedure Edit;override;
  end;


procedure TXmlSerializerCollectionProperty.Edit;
var Obj: TPersistent;
begin
  Obj := GetComponent(0);
  while (Obj <> nil) and not (Obj is TComponent) do
    Obj := TPersistentCracker(Obj).GetOwner;
  CurrentCollectionEditor := ShowCollectionEditorClass(Designer, GetEditorClass,
    TComponent(Obj), TCollection(GetOrdValue), GetName, GetColOptions);
end;
...
Рейтинг: 0 / 0
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39472830
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же (просто не помню) может ли в среде быть открыто ДВА редактора коллекции одновременно ?
...
Рейтинг: 0 / 0
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39472861
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по этому, редакторов может быть много
Код: pascal
1.
2.
3.
4.
5.
procedure TCollectionEditor.FormCreate(Sender: TObject);
begin
  FItemIdList := TList.Create;
  CollectionEditorsList.Add(Self);
end;
...
Рейтинг: 0 / 0
IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
    #39472866
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и чисто гипотетически.
Открыто несколько редакторов коллекции, выбрано несколько элементов коллекции (мультиселект) из разных редакторов. PropertyEditor общий для всех редакторов коллекции.
Как из него достучаться до РедактораКоллекции и главнй вопрос, до какого из нескольких ?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / IDE. Доступ к владельцу класса отвечающего за Editor из редактора свойств
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]