CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

谁能自己编写代码把Window系统所用的图标取出来?

楼主kl2000()2005-06-03 15:59:19 在 Delphi / VCL组件开发及应用 提问

自己认为是可以取出来的,   因为我在word   里面看见是在shell32.dll  
  取出来的.   最好给出关键代码.   感谢! 问题点数:100、回复次数:8Top

1 楼naner_china(naner)回复于 2005-06-03 16:35:28 得分 80

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,ShellApi,   ImgList,   StdCtrls,   Menus,FileCtrl;  
   
   
  type  
      TForm1   =   class(TForm)  
          PopupMenu1:   TPopupMenu;  
          MainMenu1:   TMainMenu;  
          Button1:   TButton;  
          Edit1:   TEdit;  
          ImageList1:   TImageList;  
          procedure   FormCreate(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          procedure   ItemClick(Sender:   TObject);  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
  function   GetSystemImageList(mImageList:   TImageList):   Boolean;  
  var  
      vHandle:   THandle;  
      vSHFileInfo:   TSHFileInfo;  
  begin  
      FillChar(vSHFileInfo,   SizeOf(vSHFileInfo),   0);  
      vHandle   :=   SHGetFileInfo('',   0,   vSHFileInfo,   SizeOf(vSHFileInfo),  
          SHGFI_SYSICONINDEX   or   SHGFI_SMALLICON);  
      Result   :=   vHandle   <>   0;  
      mImageList.Handle   :=   vHandle;  
      mImageList.ShareImages   :=   True;  
  end;   {   GetSystemImageList   }  
   
  function   GetIconIndex(mPath:   string):   Integer;  
  var  
      vSHFileInfo:   TSHFileInfo;  
  begin  
      FillChar(vSHFileInfo,   SizeOf(vSHFileInfo),   0);  
      SHGetFileInfo(PChar(mPath),   0,   vSHFileInfo,   SizeOf(vSHFileInfo),  
          SHGFI_SYSICONINDEX);  
      Result   :=   vSHFileInfo.iIcon;  
  end;   {   GetIconIndex   }  
   
  procedure   PathToMenu(mDirName:   string;   mMenu:   TMenu;   mItemClick:   TNotifyEvent);     //显示目录文件名及其图片文件  
      procedure   pScanPath(mDirName:   string;   mGoalMenuItem:   TMenuItem);     //指定的路径搜索  
      var  
          vSearchRec:   TSearchRec;  
          vPathName:   string;  
          K:   Integer;  
          vMenuItem:   TMenuItem;  
      begin  
          vPathName   :=   mDirName   +   '\*.*';  
          K   :=   FindFirst(vPathName,   faAnyFile,   vSearchRec);  
          while   K=0   do   begin  
              if   (vSearchRec.Attr   and   faDirectory   <>   0)   and   (Pos(vSearchRec.Name,   '..')   =   0)   then   begin  
                  vMenuItem   :=   TMenuItem.Create(mMenu);  
                  vMenuItem.Caption   :=   vSearchRec.Name;  
                  vMenuItem.Hint   :=   mDirName   +   '\'   +   vSearchRec.Name;  
                  vMenuItem.ImageIndex   :=   GetIconIndex(mDirName   +   '\'   +   vSearchRec.Name);  
                  vMenuItem.OnClick   :=   mItemClick;  
                  mGoalMenuItem.Add(vMenuItem);  
                  pScanPath(mDirName   +   '\'   +   vSearchRec.Name,   vMenuItem)  
              end   else   if   (Pos(vSearchRec.Name,   '..')   =   0)   then   begin  
                  vMenuItem   :=   TMenuItem.Create(mMenu);  
                  vMenuItem.Caption   :=   vSearchRec.Name;  
                  vMenuItem.Hint   :=   mDirName   +   '\'   +   vSearchRec.Name;  
                  vMenuItem.ImageIndex   :=   GetIconIndex(mDirName   +   '\'   +   vSearchRec.Name);  
                  vMenuItem.OnClick   :=   mItemClick;  
                  mGoalMenuItem.Add(vMenuItem);  
              end;  
              K   :=   FindNext(vSearchRec);  
          end;  
          FindClose(vSearchRec);  
      end;   {   pScanPath   }  
  begin  
      mMenu.Items.Clear;  
      pScanPath(mDirName,   mMenu.Items)  
  end;   {   PathToMenu   }  
   
   
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
              GetSystemImageList(ImageList1);       //获取图片  
              ImageList1.DrawingStyle   :=   dsTransparent;  
              MainMenu1.AutoHotkeys   :=   maManual;  
              MainMenu1.Images   :=   ImageList1;  
              PopupMenu1.AutoHotkeys   :=   maManual;  
              PopupMenu1.Images   :=   ImageList1;  
   
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      Dir:   string;  
  begin  
            Dir   :=   'E:\Naner\image';     //初始路径,请确保你的路径存在       ,该路径可改  
            if   SelectDirectory(Dir,   [sdAllowCreate,   sdPerformCreate,   sdPrompt],1000)   then  
                edit1.Text   :=   Dir;  
            PathToMenu(Edit1.Text,   MainMenu1,   ItemClick);     //添加到MainMenu  
            PathToMenu(Edit1.Text,   PopupMenu1,   ItemClick);   //添加到PopupMenu1  
   
  end;  
  procedure   TForm1.ItemClick(Sender:   TObject);  
  begin  
            if   FileExists(TMenuItem(Sender).Hint)   then   //避免目录  
                  ShellExecute(Handle,   'OPEN',   PChar(TMenuItem(Sender).Hint),   nil,   nil,   SW_SHOW);  
  //查看对应的图片  
  end;  
   
  end.  
  Top

2 楼kl2000()回复于 2005-06-03 17:00:38 得分 0

好象只能返回六个图标呢!Top

3 楼naner_china(naner)回复于 2005-06-03 17:07:58 得分 0

你查询的路径中只包含6个文件或图标  
  我查出一堆文件和图标  
   
   
  vPathName   :=   mDirName   +   '\*.*';   //设置查询返回的程序类型  
   
  Top

4 楼kl2000()回复于 2005-06-03 17:11:48 得分 0

我再试试看看!Top

5 楼kl2000()回复于 2005-06-08 17:05:24 得分 0

我替换了windows里面的DLL文件还是取出那几个图标!  
    那位还有什么办法?Top

6 楼sandyboy(雨霆)回复于 2005-06-14 16:27:40 得分 10

关注。Top

7 楼force2004(牛牛)回复于 2005-06-14 18:27:56 得分 10

GZ  
  Top

8 楼kl2000()回复于 2005-07-08 08:59:06 得分 0

再顶一次!   看今有什么收获!  
  今天下午结贴.Top

相关问题

  • 编写可靠的代码
  • 谁给编写个代码?
  • 谁会编写收藏夹代码??
  • 如何用代码编写菜单
  • 求vb代码编写规范文档
  • vb如何编写队列?源代码?
  • 怎么编写WMI的代码
  • (讨论)关于代码编写方式!
  • 如何编写代码复制图片?
  • 如何用C#编写这些代码?

关键词

  • vsearchrec
  • vmenuitem
  • vshfileinfo
  • mdirname
  • mmenu
  • pscanpath
  • geticonindex
  • vhandle
  • mgoalmenuitem
  • mitemclick

得分解答快速导航

  • 帖主:kl2000
  • naner_china
  • sandyboy
  • force2004

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo