菜单和可视树相互转换

字体大小: 中小 标准 ->行高大小: 标准
///////Begin Source

function MenuItemToTreeNode(mMenuItem: TMenuItem; mTreeView: TTreeView;

mTreeNode: TTreeNode): Boolean; { 返回菜单项转换成树节点是否成功 }

var

I: Integer;

vTreeNode: TTreeNode;

begin

Result := False;

if (not Assigned(mTreeView)) or (not Assigned(mMenuItem)) then Exit;

try for I := 0 to Pred(mMenuItem.Count) do

if mMenuItem[I].Visible then begin

vTreeNode := mTreeView.Items.AddChildObject(mTreeNode,

StripHotkey(mMenuItem[I].Caption), mMenuItem[I]);

// ~~~~~~~~~~~除快捷键

vTreeNode.ImageIndex := mMenuItem[I].ImageIndex;

vTreeNode.SelectedIndex := mMenuItem[I].ImageIndex;

MenuItemToTreeNode(mMenuItem[I], mTreeView, vTreeNode);

end;

except

Exit;

end;

Result := True;

end; { MenuItemToTreeNode }

function TreeNodeToMenuItem(mTreeView: TTreeView; mTreeNode: TTreeNode;

mMenuItem: TMenuItem): Boolean; { 返回树节点转换成菜单项是否成功 }

var

I, J, K: Integer;

vMenuItem: TMenuItem;

begin

Result := False;

if (not Assigned(mTreeView)) or (not Assigned(mMenuItem)) then Exit;

if Assigned(mTreeNode) then begin

vMenuItem := TMenuItem.Create(mMenuItem.Owner);

vMenuItem.Caption := mTreeNode.Text;

vMenuItem.ImageIndex := mTreeNode.ImageIndex;

vMenuItem.Tag := mTreeNode.Index;

mMenuItem.Add(vMenuItem);

for I := 0 to mTreeNode.Count - 1 do

TreeNodeToMenuItem(mTreeView, mTreeNode[I], vMenuItem);

end else begin

K := -1;

for I := 0 to mTreeView.Items.Count - 1 do begin

for J := mTreeView.Items[I].Level to K do

mMenuItem := mMenuItem.Parent;

vMenuItem := TMenuItem.Create(mMenuItem.Owner);

vMenuItem.Caption := mTreeView.Items[I].Text;

vMenuItem.ImageIndex := mTreeView.Items[I].ImageIndex;

vMenuItem.Tag := I;

mMenuItem.Add(vMenuItem);

mMenuItem := vMenuItem;

K := mTreeView.Items[I].Level;

end;

end;

Result := True;

end; { TreeNodeToMenuItem }

///////End Source

///////Begin Demo

procedure TForm1.Button1Click(Sender: TObject);

begin

MenuItemToTreeNode(MainMenu1.Items, TreeView1, nil);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

TreeNodeToMenuItem(TreeView1, nil, MainMenu1.Items);

end;

///////End Demo

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/68087.html