用treeview控件制作几年的日历列表(50分)

  • 主题发起人 主题发起人 可可儿
  • 开始时间 开始时间

可可儿

Unregistered / Unconfirmed
GUEST, unregistred user!
有一组数据:2002年01月01日,2002年01月02日,2002年02月01日,2003年01月01日,
希望用treeview表示为列表的形式:年、月、日为不同级
像:2002年
01月
01日
02日
02月
01日
2003年
01月
01日
如此这般,谢谢!
 
小妹妹,帮你回答了有什么好处?
 
下载例子看看
http://www.playicq.com/databack/treeviewcode.exe
 
function TForm1.MonthDays(iYear,iMonth:Word):Word;
begin
case iMonth of
1,3,5,7,8,10,12: Result:=31;
4,6,9,11: Result:=30;
2://如果是闰年
if IsLeapYear(iYear) then Result:=29
else Result:=28
else
Result:=0;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var i,j,k,L : integer;
tNode : TTreeNode;
tYNode,tMNode : TTreeNode;
begin
tNode := tvYear.Items.Add(nil,'日期列表');
for I:= 2002 to 2050 do
begin
tYNode := tvYear.Items.AddChild(tNode,IntToStr(I)+'年');
for J := 1 to 12 do
begin
if J < 10 then
tMNode := tvYear.Items.AddChild(tYNode,'0'+IntToStr(J)+'月')
else
tMNode := tvYear.Items.AddChild(tYNode,IntToStr(J)+'月');
L := MonthDays(i,j);
for K := 1 to L do
if K < 10 then
tvYear.Items.AddChild(tMNode,'0'+IntToStr(K)+'日')
else
tvYear.Items.AddChild(tMNode,IntToStr(K)+'日');
end;
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
beginYear,endYear:integer;
y,m,day:word;
d:tdateTime;
nY,nM:TTreeNode;
begin
beginYear:=2002;
endYear:=2004;
d:=strtodate(inttostr(beginYear)+'-1-1');
decodeDate(d,y,m,day);
ny:=nil;
nm:=nil;
while y<=endYear do
begin
if (m=1) and (day=1) then
ny:=treeview1.Items.Add(nil,FormatDateTime('yyyy"年',d));
if (day=1) then
nM:=treeview1.Items.AddChild(ny,FormatDateTime('mm"月',d));
treeview1.Items.AddChild(nm,FormatDateTime('dd"日',d));
d:=d+1;
decodeDate(d,y,m,day);
end;
end;
 
thank you !
不过我的问题本来是这样的:要列出的日期不是按顺序排列的,也不是每一天都有的,像
2002年2月12日 2002年2月22日 2002年5月5日 2003年5月5日
帮忙就帮到底吧,小妹谢了
 
可可儿.你好
 
多人接受答案了。
 
后退
顶部