我想取 进程路径 比如c:\bin\dd.exe 的图标 显示在 进程名 那里 请问怎么显示
以下是参考图片
还有下次在打开程序 图标还在。
以下是参考地址
http://bbs.2ccc.com/topic.asp?topicid=352779

解决方案 »

  1.   

    我上次已经给出例子了,你需要做的只是将你的列表按照一定规则保存为一个列表,例如可以使用 XML。
    下次启动程序的时候就依次读取每条 XML 信息,然后再用下面的例子获取关联图标,根本不用将图标保存起来为一个文件,一来麻烦,二来是没必要,除非你要自定义图标功能。{
    提取系统关联图标例子uses
      ShellAPI;记得设置 ListView 的 SmallImages 为 指定的 Imagelist, 每添加一条 xml 内容,
    就指定它的 ImageIndex,
    这样就是你要的效果了。
    }
    var
      Icon: HIcon;
      IconIndex: Word;
      FileName: PChar;
    begin
      FileName := 'C:\';//试一试获取 C 分区的关联图标
      Icon := ExtractAssociatedIcon(HInstance, FileName, IconIndex);
      DrawIcon(Form1.Canvas.Handle, 10, 10, Icon);//测试,在窗体画出来看一下
      Image1.Picture.Icon.Handle := Icon;//在Image1中显示出来
      ImageList1.AddIcon(Image1.Picture.Icon);//添加进ImageList1供ListView使用。
    end;
      

  2.   

    怎么保存和写入listview 到xml...
    格式如下 文件名字 文件ID 文件路径 文件参数 还有你说的那个imagelist保存列表
      

  3.   

    unit Unit1;
    {
    你只需要用 delphi 编译后,然后运行 Demo.exe, 手动添加需要的程序,然后关闭,程序自动保存 XML,下一次启动 Demo.exe 时自动加载上次的项目。
    sail2000
    2010-05-11
    于 广州
    }
    interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ImgList, ExtCtrls,
      // --XML--
      XMLDoc,
      xmldom,
      XMLIntf,
      msxmldom;const
      XMLFileName = 'Data.xml'; //XML 文件名type
      TForm1 = class(TForm)
        ListView1: TListView;
        ImageList1: TImageList;
        EdtFileName: TLabeledEdit;
        EdtFileID: TLabeledEdit;
        EdtFilePath: TLabeledEdit;
        EdtFilePar: TLabeledEdit;
        BtnAddItem: TButton;
        BtnDel: TButton;
        procedure BtnAddItemClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure BtnDelClick(Sender: TObject);
      private
        { Private declarations }
        XML: TXMLDocument;
        ListCount: Integer;    procedure LoadItem;
        procedure SaveItem;
        function AddItem(FileName, FileID, FilePath, FilePars: string): Boolean;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses
      ShellAPI;
    {$R *.dfm}function TForm1.AddItem(FileName, FileID, FilePath, FilePars: string): Boolean;
    var
      Icon: HIcon;
      IconIndex: Word;
      Ico: TIcon;
      i: Integer;
    begin
      Result := False;
      if FileExists(FilePath) then
      begin
        with ListView1.Items.Add do
        begin
          if Trim(FileName) = '' then
            FileName := ExtractFileName(FilePath);
          Caption := FileName;
          SubItems.Add(FileID);
          SubItems.Add(FilePath);
          SubItems.Add(FilePars);
        end;    Ico := TIcon.Create;    Icon := ExtractAssociatedIcon(HInstance, PChar(FilePath), IconIndex);
        Ico.Handle := Icon;
        ImageList1.AddIcon(Ico); // 添加进ImageList1供ListView使用。
        Ico.Free;
        i := ListView1.Items.Count - 1;
        ListView1.Items.Item[i].ImageIndex := i; // 指定对应索引    Result := True;  end;end;procedure TForm1.LoadItem;
    var
      nodeList: IXMLNodeList;
      node: IXMLNode;
      i: Integer;
      sFileName, sFileID, sFilePath, sFilePars: string;
    begin
      node := XML.DocumentElement;
      nodeList := node.ChildNodes;
      // ShowMessage(IntToStr(nodeList.Count)); //Debug Dialog
      if nodeList.Count > 0 then
      begin
        ListCount := nodeList.Count;
        for i := 0 to nodeList.Count - 1 do
        begin
          node := XML.DocumentElement;
          node := node.ChildNodes.Nodes[i];      sFileName := node.Attributes['FileName']; { 获取 文件名字 属性 }
          sFileID := node.Attributes['FileID']; { 获取 文件 ID 属性 }
          sFilePath := node.Attributes['FilePath']; { 获取 文件路径 属性 }
          sFilePars := node.Attributes['FilePars']; { 获取 参数 属性 }      AddItem(sFileName, sFileID, sFilePath, sFilePars);
        end;
      end;
    end;procedure TForm1.SaveItem;
    var
      pNode: IXMLNode; { 定义节点: 父节点 }
      s: string;
      i: Integer;
    begin
      XML.XML.Clear;
      XML.Active := True; { 必须先激活 }
      XML.Version := '1.0'; { 设置版本 }
      XML.Encoding := 'UTF-8'; { 设置语言 }
      XML.StandAlone := 'yes';
      XML.Options := [doNodeAutoIndent, doAutoPrefix]; { 自动缩进 }  pNode := XML.AddChild('Root'); { 添加 pNode 是根节点 }  for i := 0 to ListView1.Items.Count - 1 do { 循环 ListView 的 Item }
      begin
        pNode := XML.ChildNodes.Nodes['Root']; { 复位 pNode 是根节点 }
        pNode := pNode.AddChild('Item');
        s := ListView1.Items.Item[i].Caption;
        pNode.SetAttribute('FileName', s); { 文件名字 }
        s := ListView1.Items.Item[i].SubItems.Strings[0];
        pNode.SetAttribute('FileID', s); { 文件ID }
        s := ListView1.Items.Item[i].SubItems.Strings[1];
        pNode.SetAttribute('FilePath', s); { 文件路径 }
        s := ListView1.Items.Item[i].SubItems.Strings[2];
        pNode.SetAttribute('FilePars', s); { 文件参数 }
      end;  s := ExtractFilePath(ParamStr(0)) + XMLFileName;
      XML.SaveToFile(s);
    end;procedure TForm1.BtnAddItemClick(Sender: TObject);
    begin
      if not AddItem(EdtFileName.Text, EdtFileID.Text, EdtFilePath.Text,
        EdtFilePar.Text) then
        ShowMessage('信息不完整');
    end;procedure TForm1.BtnDelClick(Sender: TObject);
    var
      i, j: Integer;
    begin
      i := ListView1.ItemIndex;
      if i <> -1 then
      begin
        ListView1.DeleteSelected;
        ImageList1.Delete(I); //删除对应图标
        for j := i to ListView1.Items.Count  - 1 do //重新指定图标索引
        begin
          ListView1.Items.Item[j].ImageIndex := ListView1.Items.Item[j].ImageIndex -1;
        end;
      end;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      SaveItem;
      XML.Free;
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      s: string;
      pNode: IXMLNode; { 定义节点: 父节点 }
    begin
      XML := TXMLDocument.Create(Self);
      s := ExtractFilePath(ParamStr(0)) + XMLFileName;
      if FileExists(s) then
      begin
        XML.Active := True;
        XML.LoadFromFile(s);
        LoadItem;
      end
      else
      begin
        XML.XML.Clear;
        XML.Active := True; { 必须先激活 }
        XML.Version := '1.0'; { 设置版本 }
        XML.Encoding := 'UTF-8'; { 设置语言 }
        XML.StandAlone := 'yes';
        XML.Options := [doNodeAutoIndent, doAutoPrefix]; { 自动缩进 }    pNode := XML.AddChild('Root'); { 添加 pNode 是根节点 }
        XML.SaveToFile(s);
      end;
    end;end.
    其中 XML 文件是这样结构,很简单;<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Root>
      <Item FileName="calc.exe" FileID="001" FilePath="C:\WINDOWS\system32\calc.exe" FilePars="-np"/>
      <Item FileName="Notepad.exe" FileID="001" FilePath="C:\WINDOWS\system32\Notepad.exe" FilePars="-np"/>
      <Item FileName="explorer.exe" FileID="001" FilePath="C:\WINDOWS\explorer.exe" FilePars="-np"/>
      <Item FileName="regedit.exe" FileID="001" FilePath="C:\WINDOWS\regedit.exe" FilePars="-np"/>
    </Root>
      

  4.   

    代码可以去你的帖子看我的回复,有下载
    http://bbs.2ccc.com/topic.asp?topicid=352779
      

  5.   

    想把图标动态的添加到drawgrid中