2012-01-07 3 views
3

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

+1

Я не уверен, что именно вы здесь задаете. Если вы хотите написать свой редактор 'IVTEditLink', я не знаю' TPanel' и два 'TEdit', тогда это возможно; единственное, что вы должны иметь в виду: реализовать интерфейс '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' для отмены редактирования, когда вы 'OnExit' в окне редактирования, тогда вы должны« CancelEditNode »в этом событии. – TLama

+0

Или если вы спрашиваете, можете ли вы реализовать более одного интерфейса «IVTEditLink», например. 'TComboBox' для одного столбца и' TDateTimePicker' для другого, а затем просто введите столбцы в 'OnCreateEditor' и создайте редактор, который хотите использовать;) – TLama

+0

благодарим вас за ответ. если бы это было возможно, я бы отметил ваш пост хорошим ответом. – Knobik

ответ

6

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

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

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

+0

Очень приятное приложение для примера. Спасибо. –

0

Просто создайте свои собственные редакторы в 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; 
+0

OP хочет первый случай моих комментариев; составлять один редактор из более чем одного компонента, а не использовать разные редакторы для разных столбцов. – TLama

+0

Вопрос очень неясен. OP должен отредактировать свой вопрос, чтобы сделать его более ясным, чего он пытается достичь. – Linas

+0

Согласитесь, вот почему я просил объяснения в своих комментариях;) – TLama