Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
ВнизРедактирование TreeView Найти похожие ветки
← →
Шурик Ш (2002-09-09 15:34) [0]Подскажите, пожалуйста, как отловить событие отмены редактирования названия узла TreeView, когда это самое название не было изменено?
← →
MBo (2002-09-09 15:38) [1]в OnEditing запоминай, в OnEdited сравнивай
← →
Шурик Ш (2002-09-09 15:39) [2]Ясно.
← →
Шурик Ш (2002-09-09 15:48) [3]Проблема в том, что если сразу после начала редактирования нажать Esc, то событие OnEdited вообще обрабатываться не будет.
Для ясности приведу задачу, которую мне необходимо решить:
В TreeView по контекстному меню создается подчиненный узел с названием "Новая группа" и сразу предоставляет себя для редактирования. Если пользователь изменяет его название, то узел остается, а если нет - удаляется. При изменении названия действительно обрабатывается OnEdited, а при нажатии на Esc - нет.
← →
MBo (2002-09-09 16:07) [4]Если для OnEditing нет парного OnEdited, то ...
← →
Шурик Ш (2002-09-09 16:29) [5]Не понимаю.
← →
Рыжик (2002-09-09 16:31) [6]
procedure TForm1.TreeView1Edited(Sender: TObject; Node: TTreeNode;
var S: String);
begin
TreeView1.Tag:=0;
end;
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if (TreeView1.Tag=1) and (cdsFocused in state) then
begin
TTreeView(Sender).items.Delete(Node);
TreeView1.Tag:=0;
DefaultDraw:=false;
end;
end;
procedure TForm1.TreeView1Editing(Sender: TObject; Node: TTreeNode;
var AllowEdit: Boolean);
begin
TreeView1.Tag:=1;
end;
← →
Шурик Ш (2002-09-09 16:34) [7]Минуточку... Я сейчас переварю.
← →
Рыжик (2002-09-09 16:38) [8]Ещё наверное на OnExit надо поставить такую же проверку
← →
Шурик Ш (2002-09-09 16:47) [9]Побоюсь показаться назойливым, но
1) Что значит свойство Tag;
2) И как этот код вообще работает?
← →
Рыжик (2002-09-09 16:59) [10]Ещё вот это надо:
procedure TForm1.TreeView1Exit(Sender: TObject);
begin
if (TreeView1.Tag=1) then
begin
TreeView1.items.Delete(TreeView1.Selected);
TreeView1.Tag:=0;
end;
end;
procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
begin
TreeView1.Repaint;
end;
Св-во Tag устанавливается при начале редактирования в 1. При отмене или завершении редактирования ставится в 0. Можно использовать какую-нибудь глобальную переменную.
CustomDraw происходит при перерисовывании Items-ов. Проверяем, начали ли редактирование (TreeView1.Tag=1) и чтобы не зацикливалось (cdsFocused in state) и удаляем.
Ещё сброс редактирования может происходить при выходе фокуса из TreeView, поэтому нужна проверка на OnExit.
Вроде работает, но наверно есть способ и по лучше. Это первое, что пришло в голову
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c