中国程序员联盟 正在重新改版中ing 不便之处还请见谅 改版后将内容涉及java delphi .net php
 
  首页 | 数据库开发 | 网络通讯 | 多线程 | 多媒体开发 | 图像处理 | 程序人生 | 系统函数 | 控件开发 | Web服务
 
  当前位置:笨鱼delphi技术网>控件开发>控件使用>文章内容

delphi 如何将系统所有菜单列到树上Treeview

来源:国外 关于:Martin Gamulin 发布时间:2007-07-18   [收藏] [推荐]
uses
  ComCtrls, Menus, Classes, Forms, Controls, Windows, Messages;
function GetControlCaption(Control: TWinControl): ShortString;
// Slightly modified version of Twister's Tip
//
// function GetCaptionAtPoint(pt: TPoint): string;
//
var
  TextLength: Integer;
  Text: PChar;
begin
  if not Boolean(Control.Handle) then
    Exit;
  Result := Control.Name; // if Control doesn't have Caption
  // Control.Name is returned
  TextLength := SendMessage(Control.Handle, WM_GETTEXTLENGTH, 0, 0);
  if TextLength 0 then
  begin
    GetMem(Text, TextLength + 1);
    SendMessage(Control.Handle, WM_GETTEXT, TextLength + 1, Integer(Text));
    Result := Text;
    FreeMem(Text);
  end;
end;
// function GetCaptionAtPoint(pt: TPoint): ShortString;
// begin
// Result:= GetControlCaption(FindVCLWindow(pt));
// end;
procedure FindAllMenuItems(AppTree: TTreeView; MenuItem: TMenuItem; Parent:
  TTreeNode);
var
  loop: Integer;
  Node: TTreeNode;
  mItem: TMenuItem;
  Name: ShortString;
begin
  for loop := 0 to MenuItem.Count - 1 do
  begin
    mItem := MenuItem.Items[loop];
    Name := mItem.Caption;
    Node := AppTree.Items.AddChildObject(Parent, Name, mItem);
    if mItem.Count 0 then
      findAllMenuItems(AppTree, mItem, Node);
  end;
end;
procedure FindAllControls(AppTree: TTreeView; Comp: TComponent; Parent: TTreeNode);
var
  Child: TComponent;
  loop, start, Index: Integer;
  Name: ShortString;
  Node, Mnode: TTreeNode;
begin
  start := 0;
  if Comp is TApplication then
  begin
    // Parent:= AppTree.Items.AddObjectFirst(Parent, 'Application', nil);
    // if you want to see the root ('Application') uncomment
    start := 1;
  end;
  for loop := start to Comp.ComponentCount - 1 do
  begin
    Child := Comp.Components[loop];
    Name := Child.Name;
    if Child is TControl then
    begin
      if Child is TWinControl then
      begin // does Child have Caption property??
        Name := GetControlCaption(TWinControl(Child));
      end;
      Node := AppTree.Items.AddChildObject(Parent, Name, Child);
      if Child.ComponentCount 0 then
        FindAllControls(AppTree, Child, Node);
    end;
    if Child is TMenu then
    begin
      Node := AppTree.Items.AddChildObject(Parent, Name, Child);
      for Index := 0 to TMenu(Child).Items.Count - 1 do
      begin
        Mnode := AppTree.Items.AddChildObject(Node, TMenu(Child).Items[Index].Caption,
          TMenu(Child).Items[Index]);
        FindAllMenuItems(AppTree, TMenu(Child).Items[Index], Mnode);
      end;
    end;
  end;
end;

[浏览: 次]   
上一篇:delphi 在WORD文档里添加页签   下一篇:delphi 如何快速读取文本文件
[收藏] [推荐] [返回顶部] [打印本页] [关闭窗口]  
    评论加载中…
google adsense热点文章
·delphi treeview 使用
·delphi delphi下对象类别检查
·delphi 组件序列化
·delphi 如何在DBGRID里添加行序号
·delphi 组件用户自定义设计期工具
·delphi 显示GRID单Cell框的Hint
·delphi 如何保存属性到运行期使用(上)
·delphi 组件序列化
·delphi 如何将属性在设计期保存到DFM文
·delphi 如何保存属性到运行期使用(下)
·delphi VCL控件机制与VCL.net控件机制
·delphi 在GRID画一个没有滚动条的背景
     delphi技术网 | firefox 下载 | Avant Browser下载 | dedecms 技术网 | drupal 爱好者 | php 技术网
  Copyright@www.delphichm.com,2006-2009.All Rights Reserved.
 
程序员联盟 | delphi Java .net|QQ:707102932