![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Редактирование TreeView [D6]
Шурик Ш © (2002-09-09 15:34:00)Подскажите, пожалуйста, как отловить событие отмены редактирования названия узла TreeView, когда это самое название не было изменено?
Рыжик (2002-09-09 16:59:00) [1]Ещё вот это надо:
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.
Вроде работает, но наверно есть способ и по лучше. Это первое, что пришло в голову
Шурик Ш (2002-09-09 16:47:00) [2]Побоюсь показаться назойливым, но
1) Что значит свойство Tag;
2) И как этот код вообще работает?
Рыжик (2002-09-09 16:38:00) [3]Ещё наверное на OnExit надо поставить такую же проверку
Шурик Ш (2002-09-09 16:34:00) [4]Минуточку... Я сейчас переварю.
Рыжик (2002-09-09 16:31:00) [5]
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:29:00) [6]Не понимаю.
MBo (2002-09-09 16:07:00) [7]Если для OnEditing нет парного OnEdited, то ...
Шурик Ш (2002-09-09 15:48:00) [8]Проблема в том, что если сразу после начала редактирования нажать Esc, то событие OnEdited вообще обрабатываться не будет.
Для ясности приведу задачу, которую мне необходимо решить:
В TreeView по контекстному меню создается подчиненный узел с названием "Новая группа" и сразу предоставляет себя для редактирования. Если пользователь изменяет его название, то узел остается, а если нет - удаляется. При изменении названия действительно обрабатывается OnEdited, а при нажатии на Esc - нет.
Шурик Ш (2002-09-09 15:39:00) [9]Ясно.
MBo (2002-09-09 15:38:00) [10]в OnEditing запоминай, в OnEdited сравнивай