⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treemenu.pas

📁 TreeMenu Component ================== The TreeMenu is a descendant of TTreeView. It is a "steal
💻 PAS
字号:
{*******************************************************}
{                                                       }
{              TTreeMenu Stealth Component              }
{                                                       }
{              Pal Sitkei, sitkei@chello.hu             }
{                                                       }
{*******************************************************}

unit TreeMenu;

interface

uses Classes, ComCtrls, Controls, Menus;

type
  tTreeMenu = class(tTreeView)
  private
    procedure AddItem(aNode: tTreeNode; aMenuItem: tMenuItem);
    procedure MenuMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SetMenu(Value: tMainMenu);
  public
    constructor CreateBy(aTree: tTreeView);
    procedure Assign(Source: TPersistent); override;
    property Menu: tMainMenu write SetMenu;
  end;

implementation

{private}

procedure tTreeMenu.AddItem(aNode: tTreeNode; aMenuItem: tMenuItem);
var i: Integer;
    Node: tTreeNode;
    S1: String;
begin
  if Length(aMenuItem.Caption)< 2 then Exit;
  for i:= 1 to Length(aMenuItem.Caption) do
    if aMenuItem.Caption[i]<>'&' then S1:= S1+ aMenuItem.Caption[i];
  Node:= Items.AddChildObject(aNode, S1, aMenuItem);
  if aMenuItem.ImageIndex > -1
    then Node.ImageIndex:= aMenuItem.ImageIndex
    else Node.ImageIndex:= -1;
  Node.SelectedIndex:= Node.ImageIndex;
  for i:= 0 to aMenuItem.Count- 1 do
    AddItem(Node, aMenuItem.Items[i]);
end;

procedure tTreeMenu.MenuMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var Node: tTreeNode;
begin
  Node:= GetNodeAt(X, Y);
  if not Assigned(Node) then Exit;
  if Assigned(tMenuItem(Node.Data).onClick) then tMenuItem(Node.Data).OnClick(Self);
end;

procedure tTreeMenu.SetMenu(Value: tMainMenu);
var i: Integer;
begin
  Images:= Value.Images;
  for i:= 0 to Value.Items.Count- 1 do
    AddItem(nil, Value.Items[i]);
  Value.Free;
end;

{public}

constructor tTreeMenu.CreateBy(aTree: tTreeView);
begin
  inherited Create(aTree.Owner);
  Assign(aTree);
  onMouseDown:= MenuMouseDown;
  aTree.Hide;
end;

procedure tTreeMenu.Assign(Source: TPersistent);
begin
  Parent:= tTreeView(Source).Parent;
  Align:= tTreeView(Source).Align;
  Color:= tTreeView(Source).Color;
  Height:= tTreeView(Source).Height;
  Left:= tTreeView(Source).Left;
  Top:= tTreeView(Source).Top;
  Width:= tTreeView(Source).Width;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -