|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"動的配列を TreeView に展開"
{
フィールドに動的配列とレコード型の入れ子構造をもった変数データを
ツリービューに展開します
フォームに、ツリービューとラベルを各1枚用意します
}
unit KenMati;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;
type
typeMember=record
Name:string; //個人の名前
Age:integer; //年齢
end;
typeSetai=record
nameSetai:string; //世帯の名前
Jinkou:integer; //世帯の人数
Member:array of typeMember;//構成員の個別情報
end;
typeMati=record
nameMati:string; //町の名前
Jinkou:integer; //町の人口
Setai:array of typeSetai;//世帯の個別情報
end;
typeKen=record
nameKen:string; //県の名前
Jinkou:integer; //県の人口
Mati:array of typeMati; //町の個別情報
end;
TForm1 = class(TForm)
TreeView1: TTreeView;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
Ken:array of typeKen;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
i,j,k,l:integer;
tLevel:integer;
tNode : array[0..5] of TTreeNode;
begin
{ データの設定 }
setlength(Ken,2); //2県
with Ken[0] do begin
nameKen:='群馬県';
jinkou:=200000;
setlength(Mati,3);
with Mati[0] do begin
nameMati:='前橋市';
jinkou:=300000;
end;
with Mati[1] do begin
nameMati:='高崎市';
jinkou:=200000;
setlength(Setai,2);
with Setai[0] do begin
nameSetai:='出る杭';
jinkou:=2;
setlength(Member,jinkou);
with Member[0] do begin
name:='良夫';Age:=90;
end;
with Member[1] do begin
name:='良子';Age:=80;
end;
end;
with Setai[1] do begin
nameSetai:='美辞';
jinkou:=2;
setlength(Member,jinkou);
with Member[0] do begin
name:='麗句';Age:=190;
end;
with Member[1] do begin
name:='麗子';Age:=1000;
end;
end;
end;
with Mati[2] do begin
nameMati:='玉村町';
jinkou:=10000;
end;
end;
with Ken[1] do begin
nameKen:='東京都ですよ';
jinkou:=10000000;
setlength(Mati,2);
with Mati[0] do begin
nameMati:='港区';
jinkou:=500000;
end;
with Mati[1] do begin
nameMati:='中央区';
jinkou:=300000;
end;
end;
{ ツリービュー }
tLevel:=0;
for i:=0 to high(Ken) do begin
tNode[tLevel]:=treeview1.items.add(nil,Ken[i].nameKen);
tLevel:=tLevel+1;
for j:=0 to high(ken[i].Mati) do begin
tNode[tLevel]:=treeview1.items.addchild(tNode[tLevel-1],Ken[i].Mati[j].nameMati);
tLevel:=tLevel+1;
for k:=0 to high(ken[i].Mati[j].Setai) do begin
tNode[tLevel]:=treeview1.items.addchild(tNode[tLevel-1],Ken[i].Mati[j].Setai[k].nameSetai);
tLevel:=tLevel+1;
for l:=0 to high(ken[i].Mati[j].Setai[k].Member) do begin
tNode[tLevel]:=treeview1.items.addchild(tNode[tLevel-1],Ken[i].Mati[j].Setai[k].Member[l].name);
end;//for l
tLevel:=tLevel-1;
end;//for k
tLevel:=tLevel-1;
end;//for j
tLevel:=tLevel-1;
end;//for i
label1.caption:='';
treeview1.showhint:=true;
end;
procedure TForm1.TreeView1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i,j,k,l:integer;
tNode : TTreeNode;
msg:string;
begin
label1.caption:='';
tnode:=treeview1.getnodeat(x,y);
i:=-1;j:=-1;k:=-1;l:=-1;
while tnode<>nil do begin
label1.caption:=tnode.text+'/'+label1.caption;
case tnode.Level of
0:i:=tnode.index;
1:j:=tnode.index;
2:k:=tnode.index;
3:l:=tnode.index;
end;//case
tnode:=tnode.parent;
end;//while
if l>=0 then
msg:=inttostr(ken[i].mati[j].setai[k].member[l].age)+' 才'
else if k>=0 then
msg:=inttostr(ken[i].mati[j].setai[k].jinkou)+' 人'
else if j>=0 then
msg:=inttostr(ken[i].mati[j].jinkou)+' 人'
else
msg:=inttostr(ken[i].jinkou)+' 人';
treeview1.hint:=msg;
end;
end.
98/10/29(木) 19:26 妙義のかたつむり(QWK05270) __@ノ'
Original document by 妙義のかたつむり氏 ID:(QWK05270)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|