Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-61298
^Sanya
2002-08-20 02:21
2002.09.19
Просьба оценить дизайн сайта


1-61207
Korona
2002-09-08 13:43
2002.09.19
Кнопки в win xp становятся серыми


14-61258
Nikolay
2002-08-22 14:14
2002.09.19
Мдя.


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


14-61267
race1
2002-08-23 11:32
2002.09.19
рассылка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский