Более одного компонента для редактора IVTEditLink в VirtualTreeView

Есть ли способ добавить более одного компонента в редактор VirtualTreeView IVTEditLink?


person Knobik    schedule 07.01.2012    source источник
comment
Я не уверен, что именно вы спрашиваете здесь. Если вы хотите составить свой IVTEditLink редактор из, я не знаю TPanel и двух TEdit блоков, то это возможно; единственное, что вы должны иметь в виду, - это реализовать интерфейс IVTEditLink для этой панели, а также обрабатывать события для этих полей редактирования - если вы хотите, например. чтобы отменить редактирование при OnExit редактировании, то в этом случае вам нужно CancelEditNode.   -  person TLama    schedule 07.01.2012
comment
Или, если вы спрашиваете, можете ли вы реализовать более одного интерфейса IVTEditLink, например. TComboBox для одного столбца и TDateTimePicker для другого, затем просто укажите столбцы в OnCreateEditor и создайте редактор, который хотите использовать;)   -  person TLama    schedule 07.01.2012
comment
Спасибо за ваш ответ. если бы это было возможно, я бы отметил ваш пост как хороший ответ.   -  person Knobik    schedule 08.01.2012


Ответы (2)


Я бы использовал автономную форму в качестве контейнера редактора и оставил для этой цели концепцию IVTEditLink, потому что:

  • если вы используете, например. TPanel в качестве контейнера компонентов редактора, вам следует подумать о том, чтобы выбрать правильный Parent из этого TPanel; редактор с большим количеством полей может перекрывать либо прямоугольник границ вашего виртуального дерева, либо даже границы вашей формы
  • гораздо проще реализовать OnDeactivate событие в форме, чем в TPanel компоненте
  • можно вообще оставить понятие IVTEditLink, потому что здесь оно теряет смысл; IVTEditLink был разработан для конкретных редакторов узлов и столбцов, а не для целых узлов; вы можете просто открыть редактор форм, когда наступит событие OnEditing или событие двойного щелчка и т. д.

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

person TLama    schedule 08.01.2012
comment
Очень хороший пример приложения. Спасибо. - person James L.; 13.08.2017

Просто создайте свои собственные редакторы в событии OnCreateEditor. Поскольку это событие предоставляет параметр Column, вы можете создавать разные редакторы для разных столбцов. Например.:

procedure TForm1.OnCreateEditor(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; out EditLink: IVTEditLink);
begin
  case Column of
    0: EditLink := TColorEditLink.Create;
    1: EditLink := TFontEditLink.Create;
  //etc..
  end;
end;
person Linas    schedule 08.01.2012
comment
ОП хочет получить первый случай моих комментариев; составлять один редактор из более чем одного компонента, не использовать разные редакторы для разных колонок. - person TLama; 08.01.2012
comment
Тогда вопрос очень неясен. ОП должен отредактировать свой вопрос, чтобы было более понятно, чего он пытается достичь. - person Linas; 08.01.2012
comment
Согласитесь, поэтому я и попросил разъяснений в своих комментариях ;) - person TLama; 08.01.2012