[Решено] Как запретить ред-е нужных ячеек VirtualStringTree?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[Решено] Как запретить ред-е нужных ячеек VirtualStringTree?

Сообщение leo_bsv » 06.05.2012 01:13:20

Приветствую!
Тема такая: VirtualStringTree имеет событие OnCreateEditor к которому соответственно привязывается процедура, определенная следующим образом:
Код: Выделить всё
procedure TMainForm.VSTCreateEditor(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);

при этом параметр EditLink должен быть обязательно в ней определён.
Теперь вопрос: как же сделать так чтобы на нужных мне ячейках этого деревогрида НЕ появлялось никаких редакторов вообще? (В остальных ячейках у меня понатыкано разных редакторов: комбобоксы, едитботтоны, простые едиты и тд и тп.)
Жму руку отвечающим :) Салют читающим ;)

Добавлено спустя 2 часа 33 минуты 3 секунды:
Пока что частично решил проблему с помощью TVirtualNodeState.vsDisabled в PVirtualNode^.States и изменением цвета VST.Colors.DisabledColor на цвет совпадающий с остальным текстом... но такой вариант не даёт полного решения проблемы - нужно запретить одну ячейку, а тут вся строка деактивируется. Неужели создавать туда контрол, который не появлялся бы и не позволял вводить данные? Может быть есть более изящное решение? Кто-нибудь сталкивался с такой проблемой?
Последний раз редактировалось leo_bsv 27.05.2012 10:48:14, всего редактировалось 1 раз.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Как запретить редактирование нужных ячеек VirtualStringT

Сообщение leo_bsv » 27.05.2012 10:47:15

кроме того - реализован временный запрет на редактирование колонки, но если отследить строку - то можно таким образом контролировать ввод в определенную ячейку
Код: Выделить всё
procedure TMainForm.VSTFocusChanged(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex);
begin
   VST.Refresh;
   if Column = 0 then
     VST.TreeOptions.MiscOptions:=VST.TreeOptions.MiscOptions-[toEditable]
   else
     VST.TreeOptions.MiscOptions:=VST.TreeOptions.MiscOptions+[toEditable];
end;

ну и изменение редактора в зависимости от текущей колонки
Код: Выделить всё
procedure TMainForm.VSTCreateEditor(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink);
...
begin
...
  // в зависимости от типа данных и активной колонки покажем тот или
  // иной редактор
  if VST.FocusedColumn=1 then
    case GetAt(XNode,'type') of
      'list'    : begin
                        ActiveCB('список');
                        EditLink:=TComboEditLink.Create;
                    end;
      'table'   : begin
                        ActiveCB('таблица');
                        EditLink:=TComboEditLink.Create;
                    end;
      'text',
      'integer',
      'time',
      'number'  : EditLink:=TSimpleEditLink.Create;
      'date'       : EditLink:=TDateEditLink.Create;
      'file'        : EditLink:=TFNameEditLink.Create;
    end
  else EditLink:=TSimpleEditLink.Create;
end;
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 234

Рейтинг@Mail.ru