Code:

unit BetterTreeView;

 

interface

 

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, CommCtrl;

 

type

TTVNewEditCancelEvent = procedure( Sender: TObject;

   Node: TTreeNode; var Delete: Boolean) of object;

TBetterTreeView = class(TTreeView)

protected

   FIsEditingNew: Boolean;

   FOnEditCancel: TTVChangedEvent;

 

   FOnNewEditCancel: TTVNewEditCancelEvent;

   procedure Edit(const Item: TTVItem); override;

public

   function NewChildAndEdit(Node: TTreeNode; const S: String)

     : TTreeNode;

published

   property IsEditingNew: Boolean read FIsEditingNew;

   property OnEditCancel: TTVChangedEvent

     read FOnEditCancel write FOnEditCancel;

   property OnNewEditCancel: TTVNewEditCancelEvent

     read FOnNewEditCancel write FOnNewEditCancel;

end;

 

implementation

 

procedure TBetterTreeView.Edit(const Item: TTVItem);

var

Node: TTreeNode;

Action: Boolean;

begin

with Item do begin

   { Get the node }

   if (state and TVIF_PARAM) <> 0 then

     Node := Pointer(lParam)

   else

     Node := Items.GetNode(hItem);

 

   if pszText = nil then begin

     if FIsEditingNew then begin

       Action := True;

       if Assigned(FOnNewEditCancel) then

         FOnNewEditCancel(Self, Node, Action);

       if Action then

 

         Node.Destroy

     end

     else

       if Assigned(FOnEditCancel) then

         FOnEditCancel(Self, Node);

   end

   else

     fFinherited;

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.

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить