редагування TreeView
Підкажіть, будь ласка, як відловити подія скасування редагування назви вузла TreeView, коли це саме назва не було змінено?
в OnEditing запам'ятовуй, в OnEdited порівнюй
Проблема в тому, що якщо відразу після початку редагування натиснути Esc, то подія OnEdited взагалі розглядатись не буде.
Для ясності приведу завдання, яке мені необхідно вирішити:
У TreeView по контекстного меню створюється підлеглий вузол з назвою "Нова група" і відразу надає себе для редагування. Якщо користувач змінює його назву, то вузол залишається, а якщо немає - видаляється. При зміні назви дійсно обробляється OnEdited, а при натисканні на Esc - немає.
Якщо для OnEditing немає парного OnEdited, то.
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;
Хвилиночку. Я зараз переварю.
Ще напевно на OnExit треба поставити таку ж перевірку
Побоюся здатися настирливим, але
1) Що значить властивість Tag;
2) І як цей код взагалі працює?
Ще ось це треба:
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.
Начебто працює, але напевно є спосіб і по краще. Це перше, що спало на думку
Пам'ять: 0.73 MB
Час: 0.024 c