outlookbar
http://www.51delphi.com/delphi/download?num=184
用Tdcoutbar
eg:
procedure TFrmMain.FormShow(Sender: TObject);
var dclv : TDCVertListView ;
dcgroup : TDCOutBarGroup ;
l:plist ;
lt : TListItem;
i : integer;
newitem,subitem : TMenuItem ;
begin
//功能:从一个table中选择caption,你也可以一个个写到DCOutBar中,不过这样麻烦
with adoquery do
begin
first;
while not eof do
begin
newitem := TMenuItem.Create(MM);
try
dcgroup := DCOutBar1.NewGroup;
dcgroup.Caption :=adotmp.fieldbyname('form_caption').asstring;
newitem.Caption := adotmp.fieldbyname('form_caption').asstring;
MM.Items.Add(newitem);
i := MM.Items.IndexOf(newitem);
dclv := dcgroup.ListView ;
with newitem do
//select adoqry1
if not adoqry1.isempty then
begin
adoqry1.first;
while not adoqry1.eof do
try
subitem := TMenuItem.create(newitem);
subitem.onclick := MenuClick;
subitem.Caption := adoqry1.fieldbyname('form_caption').asstring;
MM.Items.Items[i].Add(subitem);
adoqry1.next;
except
subitem.free;
end;
end;
end;
with dclv do
begin
LargeImages :=Img;
BackgroundMode :=TBackgroundMode(1);
GradientBeginColor :=clBlue;
GradientEndColor :=$00FFFF80;
if not adoqry.isempty then
begin
adoqry.first;
while not adoqry.eof do
begin
new(l);
l^.module_id :=adoqry.fieldbyname('module_id').value;
l^.form_caption :=adoqry.fieldbyname('form_caption').asstring;
l^.tag := adoqry.fieldbyname('module_id').asinteger;
lt :=dclv.Items.Add;
lt.ImageIndex :=lt.Index;
lt.Data :=l;
lt.Caption :=l^.form_caption;
adoqry.next;
end;
end;
adotmp.next;
end;
except
newitem.Free;
end;
end;
end;
end;
这是我程序中的源码,程序已经用了很久了,就是你说的那种要求,不过我的分类不是好友、
陌生人。。我写到数据库表中,那里是什么,我就取的什么,你也可以在属性中自己写