Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc

Delphi , Компоненты и Классы , TTreeView

Возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc


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
      inherited;
  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 в Delphi с дополнительной функцией отмены вставки нового узла при нажатии клавиши Esc при редактировании.

Вот подробный анализ того, что код делает:

  1. TTVNewEditCancelEvent объявляется как процедура, принимающая три параметра: Sender, Node и var Delete. Это событие будет вызвано, когда пользователь пытается отменить вставку нового узла.
  2. Класс TBetterTreeView наследуется от TTreeView и добавляет два дополнительных свойства: IsEditingNew и OnNewEditCancel.
  3. Метод Edit переопределяется для проверки, является ли пользователь вставкой нового узла (т.е., FIsEditingNew истинно). Если да, то он проверяет, хочет ли пользователь отменить вставку, нажав на Esc. Если да, то он вызывает событие OnNewEditCancel и устанавливает Action в true, что уничтожит узел, если не будет отменено.
  4. Метод NewChildAndEdit добавляет новый дочерний узел к указанному родительскому узлу (Node) с данным строковым значением (S). Он также устанавливает FIsEditingNew в true.

Чтобы реализовать отмену нажатия клавиши Esc, вы можете добавить обработчик события OnKeydown для контрола tree view. В этом обработчике проверьте, является ли нажатая клавиша клавишей Esc (код клавиши 27). Если да, то вызовите метод CancelEdit контрола tree view, чтобы отменить операцию редактирования.

Вот пример реализации:

procedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: TCharCode; Shift: TShiftState);
begin
  if Key = VK_ESCAPE then
    TreeView1.CancelEdit;
end;

В этом примере TreeView1 - это имя вашего кастомного компонента TBetterTreeView. Вы можете заменить его на фактическое имя вашего контрола tree view.

Обратите внимание, что для реализации этой функции вам нужно добавить обработчик события OnKeydown и модифицировать метод Edit, как описано выше.

В статье описана возможность отмены вставки нового узла в TTreeView по нажатию кнопки Esc, реализованная с помощью класса TBetterTreeView и событий OnEditCancel и OnNewEditCancel.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TTreeView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 13:23:44/0.005551815032959/1