![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с TTreeView [D7, XP]
Viod © (2008-07-30 07:43:00)Пытаюсь реализовать создание нового узла в дереве.
Смысл такой: пользователь из контекстного меню выбирает "создать" и в нужной ветке появляется новый узел, при этом узел выделяется для редактирования его заголовка.
node:=TreeView1.Items.AddChild(parent_node,'');
parent_node.Expanded:=true;
node.EditText;
Дальше должен выполняться код записи в базу данных для которого нуженnode.text. На деле получается что если после метода node.EditText идут другие операторы, то редактирование прекращается и node.text остается ==''.
Как обработать ввод пользователем. Нужно чтобы код не выполнялся дальше, пока не закончится редактирование
Viod (2008-07-31 12:21:00) [1]MsGuns, не нужно ничего лишнего. Нужно просто понять ввел юзер то что хотел или ввел что-то и передумав ажал escape :)
Viod (2008-07-31 12:16:00) [2]Vlad Oshin, со всем вышеперечисленным не работает.. Такое решение естественно сразу в голову пришло. Если бы работало - не спрашивал бы
Viod (2008-07-31 12:15:00) [3]MsGuns, это здорово, но как это делать?
MsGuns (2008-07-31 10:25:00) [4]ИМХО, сабж существенно проще решается с помощью "виртуальной" панельки, отрисовываемой в прямоугольнике ноды. На панельке можно расположить не только эдит, куда вводится текст ноды, но и другие контролы, камбобоксы, чекбоксы, кнопки и т.д. Т.е. можно вводить даже те поля объекта, которые непосредственно в дереве не отображаются. И события проще контролировать - в частности нельзя будет "спрыгнуть" с панельки. не закончив редактирование.
Vlad Oshin (2008-07-31 09:41:00) [5]работает..
procedure TForm1.TreeView1KeyPress(Sender: TObject; var Key: Char);
begin
caption:= caption+Key;
end;
Viod (2008-07-31 08:37:00) [6]не работает. Как только создается окно ввода, ну в смысле ячейка для ввода заголовка узла - все управление передается куда-то... OnKey*** не срабатывает ни на TreeView ни на Form
KilkennyCat (2008-07-30 13:09:00) [7]Реально. Если написать обработку кода клавиши в событии OnKeyDown или на щелкание мышки.
Viod (2008-07-30 10:59:00) [8]А реально отследить какой клавишой был закончен ввод. В частности Escape или Enter или мышкой куда-то щелкнули
Viod (2008-07-30 09:51:00) [9]Спасибо, Юрий. Реально работает.
Сначала сам пробовал так же, только не было Node.Selected:=true;
Может ошибаюсь, но помоему в таком случае isEditing сразу после EditText возвращает false
Юрий Зотов (2008-07-30 08:49:00) [10]А вот так - НЕ будет подгружать CPU:
while TreeView1.IsEditing do
begin
Application.ProcessMessages;
Sleep(1)
end;
Юрий Зотов (2008-07-30 08:39:00) [11]
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;