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

Вниз

Работа с 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
3-1205998904
denmin
2008-03-20 10:41
2008.09.14
Не постятся данные в PostgreSQL.


15-1216779181
Slider007
2008-07-23 06:13
2008.09.14
С днем рождения ! 23 июля 2008 среда


3-1205476733
Evgeny V
2008-03-14 09:38
2008.09.14
ADO и параметры


2-1217581135
krem
2008-08-01 12:58
2008.09.14
Сохранение файла


4-1196190355
DevilDevil
2007-11-27 22:05
2008.09.14
Схватить форму/отпустить форму. Помогите, пожалуйста.