Главная страница
    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.006 c
1-61124
A. N. Onim
2002-09-10 11:25
2002.09.19
Проблемы с XML


4-61356
ACR
2002-07-29 14:27
2002.09.19
синхронизироваться с горизонтальной разверткой ?


14-61255
Елена
2002-08-23 06:17
2002.09.19
Инсталлятор от nullsoft


1-61159
MikeFW
2002-09-06 12:47
2002.09.19
Как узнать имя родителя в дереве


7-61319
Cherv
2002-07-05 19:16
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский