Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Вниз

Работа с TTreeView   Найти похожие ветки 

 
Viod ©   (2008-07-30 07:43) [0]

Пытаюсь реализовать создание нового узла в дереве.
Смысл такой: пользователь из контекстного меню выбирает "создать" и в нужной ветке появляется новый узел, при этом узел выделяется для редактирования его заголовка.

node:=TreeView1.Items.AddChild(parent_node,"");
parent_node.Expanded:=true;
node.EditText;

Дальше должен выполняться код записи в базу данных для которого нужен node.text. На деле получается что если после метода node.EditText идут другие операторы, то редактирование прекращается и node.text остается =="".  
Как обработать ввод пользователем. Нужно чтобы код не выполнялся дальше, пока не закончится редактирование


 
Юрий Зотов ©   (2008-07-30 08:39) [1]


procedure TForm1.Button1Click(Sender: TObject);
var
 Node: TTreeNode;
begin
 Caption := "Start";
 if TreeView1.Items.Count <> 0 then
 begin
   Node := TreeView1.Selected;
   if Node = nil then
     Exit;
   Node := TreeView1.Items.AddChild(Node, "");
   Node.Parent.Expand(False);
 end
 else
   Node := TreeView1.Items.AddFirst(nil, "");
 Node.Selected := True;
 TreeView1.SetFocus; // Иначе по клавише Enter снова сработает Button1
 Node.EditText;
 
 while TreeView1.IsEditing do
   Application.ProcessMessages; // Самое простое, но будет подгружать CPU

 Caption := "Finish"
end;


 
Юрий Зотов ©   (2008-07-30 08:49) [2]

А вот так - НЕ будет подгружать CPU:

while TreeView1.IsEditing do
begin
 Application.ProcessMessages;
 Sleep(1)
end;


 
Viod ©   (2008-07-30 09:51) [3]

Спасибо, Юрий. Реально работает.
Сначала сам пробовал так же, только не было Node.Selected:=true;
Может ошибаюсь, но помоему в таком случае isEditing сразу после EditText возвращает false


 
Viod ©   (2008-07-30 10:59) [4]

А реально отследить какой клавишой был закончен ввод. В частности Escape или Enter или мышкой куда-то щелкнули


 
KilkennyCat ©   (2008-07-30 13:09) [5]

Реально. Если написать обработку кода клавиши в событии OnKeyDown или на щелкание мышки.


 
Viod ©   (2008-07-31 08:37) [6]

не работает. Как только создается окно ввода, ну в смысле ячейка для ввода заголовка узла - все управление передается куда-то... OnKey*** не срабатывает ни на TreeView ни на Form


 
Vlad Oshin ©   (2008-07-31 09:41) [7]

работает..

procedure TForm1.TreeView1KeyPress(Sender: TObject; var Key: Char);
begin
 caption:=  caption+Key;
end;


 
MsGuns ©   (2008-07-31 10:25) [8]

ИМХО, сабж существенно проще решается с помощью "виртуальной" панельки, отрисовываемой в прямоугольнике ноды. На панельке можно расположить не только эдит, куда вводится текст ноды, но и другие контролы, камбобоксы, чекбоксы, кнопки и т.д. Т.е. можно вводить даже те поля объекта, которые непосредственно в дереве не отображаются. И события проще контролировать  - в частности нельзя будет "спрыгнуть" с панельки. не закончив редактирование.


 
Viod ©   (2008-07-31 12:15) [9]

MsGuns, это здорово, но как это делать?


 
Viod ©   (2008-07-31 12:16) [10]

Vlad Oshin, со всем вышеперечисленным не работает..  Такое решение естественно сразу в голову пришло. Если бы работало - не спрашивал бы


 
Viod ©   (2008-07-31 12:21) [11]

MsGuns, не нужно ничего лишнего. Нужно просто понять ввел юзер то что хотел или ввел что-то и передумав ажал escape :)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.059 c
2-1217779974
minim
2008-08-03 20:12
2008.09.14
Ширина Label


15-1216734281
VirEx
2008-07-22 17:44
2008.09.14
Дизайн детей (не дали договорить)


15-1216957269
Slider007
2008-07-25 07:41
2008.09.14
С днем рождения ! 25 июля 2008 пятница


2-1217926238
demon
2008-08-05 12:50
2008.09.14
Как узнать размеры окна через API?


3-1205844870
Quart
2008-03-18 15:54
2008.09.14
SQL-запрос





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