先给 ImageList1 添加图标如下:



关于 OverlayIndex 的提示:
在给一个节点指定 OverlayIndex 以前, 需要先用 ImageList1.Overlay 指定可用的 OverlayIndex 号.

测试效果图:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ImgList, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ImageList1: TImageList;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Edit2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  node: TTreeNode;
begin
  {指定 ImageList}
  TreeView1.Images      := ImageList1;
  TreeView1.StateImages := ImageList1;

  {设定 OverlayIndex, 最多 4 个}
  ImageList1.Overlay(3,0); {参数1是 ImageList 中的序号; 参数2是指定可选的 OverlayIndex}
  ImageList1.Overlay(4,1);
  ImageList1.Overlay(5,2);
  ImageList1.Overlay(6,3);

  Label1.Caption := 'StateIndex:';
  Label2.Caption := 'OverlayIndex:';

  Edit1.Text := '-1';
  Edit2.Text := '-1';

  Button1.Caption := '初始化';

  {给 TreeView1 填充}
  with TreeView1 do begin
    Align := alLeft;
    Items.Add(nil, 'AAA');
    Items.Add(nil, 'BBB');
    Items.Add(nil, 'CCC');
    Items.Add(nil, 'DDD');
    Items.Add(nil, 'EEE');
    Items.AddChild(Items[4], '111');
    Items.AddChild(Items[4], '222');
    Items.AddChild(Items[4], '333');
    Items.AddChild(Items[4], '444');
  end;

  {指定图标状态}
  for node in TreeView1.Items do
  begin
    node.ImageIndex := 0;    {默认图标为第 0 个}
    node.SelectedIndex := 1; {选择图标为第 1 个}
    node.StateIndex := -1;   {状态图标暂无}
  end;
end;

{Edit1 控制 StateIndex}
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  c: Char;
  edit: TEdit;
begin
  edit := TEdit(Sender);
  c := Chr(Key);
  if c in ['0'..'6'] then edit.Text := c else edit.Text := '-1'; {字符限制}

  TreeView1.Selected.StateIndex := StrToInt(edit.Text);          {作用于 TreeView}
end;

{Edit2 控制 OverlayIndex}
procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
var
  c: Char;
  edit: TEdit;
begin
  edit := TEdit(Sender);
  c := Chr(Key);
  if c in ['0'..'3'] then edit.Text := c else edit.Text := '-1'; {字符限制}

  TreeView1.Selected.OverlayIndex := StrToInt(edit.Text);        {作用于 TreeView}
end;

procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
  Edit1.Text := IntToStr(Node.StateIndex);
  Edit2.Text := IntToStr(Node.OverlayIndex);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TreeView1.Items.Clear;
  FormCreate(nil);
end;

end.

posted on 2008-03-16 00:42  万一  阅读(7716)  评论(13编辑  收藏  举报