Возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc
unit BetterTreeView;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, CommCtrl;
type
TTVNewEditCancelEvent = procedure( Sender: TObject; Node: TTreeNode; var Delete: Boolean) ofobject;
TBetterTreeView = class(TTreeView)
protected
FIsEditingNew: Boolean;
FOnEditCancel: TTVChangedEvent;
FOnNewEditCancel: TTVNewEditCancelEvent;
procedure Edit(const Item: TTVItem); override;
publicfunction NewChildAndEdit(Node: TTreeNode; const S: string): TTreeNode;
publishedproperty IsEditingNew: Boolean read FIsEditingNew;
property OnEditCancel: TTVChangedEvent read FOnEditCancel write FOnEditCancel;
property OnNewEditCancel: TTVNewEditCancelEvent read FOnNewEditCancel write FOnNewEditCancel;
end;
implementationprocedure TBetterTreeView.Edit(const Item: TTVItem);
var
Node: TTreeNode;
Action: Boolean;
beginwith Item dobegin{ Get the node }if (state and TVIF_PARAM) <> 0 then
Node := Pointer(lParam)
else
Node := Items.GetNode(hItem);
if pszText = nilthenbeginif FIsEditingNew thenbegin
Action := True;
if Assigned(FOnNewEditCancel) then
FOnNewEditCancel(Self, Node, Action);
if Action then
Node.Destroy
endelseif Assigned(FOnEditCancel) then
FOnEditCancel(Self, Node);
endelseinherited;
end;
FIsEditingNew := False;
end;
function TBetterTreeView.NewChildAndEdit(Node: TTreeNode; const S: string): TTreeNode;
begin
SetFocus;
Result := Items.AddChild(Node, S);
FIsEditingNew := True;
Node.Expand(False);
Result.EditText;
SetFocus;
end;
end.
В статье описана возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc, реализованная с помощью класса TBetterTreeView и событий OnEditCancel и OnNewEditCancel.
Комментарии и вопросы
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.