Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.09.19;
Скачать: CL | DM;

Вниз

Редактирование 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
14-61250
Ev_genus
2002-08-23 00:46
2002.09.19
В чём разница?


1-61181
Phil
2002-09-06 05:30
2002.09.19
Скажите, где можно качнуть компоненты RX Lib?


1-61183
library
2002-09-08 03:59
2002.09.19
Создать ярлык для папки и поместить его в Пуск -> Документы.


14-61263
Nona
2002-08-20 13:58
2002.09.19
Скажите хочу научиться базам данных!


1-61039
Ionv
2002-09-09 08:52
2002.09.19
Проблема при работе с портами