Форум: "Начинающим";
Текущий архив: 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.045 c