procedure TForm1.ShowPathButClick(Sender: TObject); var i: Integer; begin for i := 0 to TreeView1.Items.Count -1 do begin ShowMessage(TreeView1.Items.Item[i].Text); end; end;这个里头的i不是你想要的吗???
那不是很容易吗,你可以使用下面类似的方法来得到结点的text: {*************************************************************** * 方 法 名 : TfrmMap.FindTreeNodeOnIndex * 编写目的 : 根据图片编号查找节点 * 作 者 : 黄仁光 * 参 数 : Tree:TTreeNodes;MapIndex:Integer * 结 果 : Integer * 编写日期 :2003年01月13日 ****************************************************************} function TfrmMap.FindTreeNodeOnIndex(Tree:TTreeNodes;MapIndex:Integer):Integer; var CurItem:TTreeNode; Index:Integer; pSelect:PMapNode; begin Result := -1; new(pSelect); CurItem := Tree.GetFirstNode; CurItem := CurItem.GetNext; while CurItem <> nil do begin pSelect := PMapNode(CurItem.Data); Index := pSelect.fIndex; if Index = MapIndex then begin Result := CurItem.AbsoluteIndex; break; end; CurItem := CurItem.GetNext; end; end; function TfrmMap.FindTreeNodeOnIndex(Tree:TTreeNodes;MapIndex:Integer):Integer; var CurItem:TTreeNode; Index:Integer; pSelect:PMapNode; begin Result := -1; new(pSelect); CurItem := Tree.GetFirstNode; CurItem := CurItem.GetNext; while CurItem <> nil do begin pSelect := PMapNode(CurItem.Data); Index := pSelect.fIndex; if Index = MapIndex then begin Result := CurItem.AbsoluteIndex; break; end; CurItem := CurItem.GetNext; end; end;
PATH的方法对同结点下不同名的情况可以用
tempStr: String;function TForm1.GetTreeNodePath(tempNode: TTreeNode): String;
begin
if tempNode.Parent <> nil then
begin
tempStr := tempStr + '/' + tempNode.Text;
tempStr := GetTreeNodePath(tempNode.Parent);
Result := tempStr;
end
else
Result := tempStr + '/' + tempNode.Text;
end;procedure TForm1.ShowPathButClick(Sender: TObject);
var
tempNode: TTreeNode;
tStr: String;
begin
if TreeView1.Selected <> nil then
begin
tempStr := '';
tStr := GetTreeNodePath(TreeView1.Selected);
ShowMessage(tStr);
end;
end;这是取PATH的一段例程,最后一个是根节点 ^^! 有时间我再改改
var
i: Integer;
begin
for i := 0 to TreeView1.Items.Count -1 do
begin
ShowMessage(TreeView1.Items.Item[i].Text);
end;
end;这个里头的i不是你想要的吗???
{***************************************************************
* 方 法 名 : TfrmMap.FindTreeNodeOnIndex
* 编写目的 : 根据图片编号查找节点
* 作 者 : 黄仁光
* 参 数 : Tree:TTreeNodes;MapIndex:Integer
* 结 果 : Integer
* 编写日期 :2003年01月13日
****************************************************************}
function TfrmMap.FindTreeNodeOnIndex(Tree:TTreeNodes;MapIndex:Integer):Integer;
var
CurItem:TTreeNode;
Index:Integer;
pSelect:PMapNode;
begin
Result := -1;
new(pSelect);
CurItem := Tree.GetFirstNode;
CurItem := CurItem.GetNext;
while CurItem <> nil do
begin
pSelect := PMapNode(CurItem.Data);
Index := pSelect.fIndex;
if Index = MapIndex then
begin
Result := CurItem.AbsoluteIndex;
break;
end;
CurItem := CurItem.GetNext;
end;
end;
function TfrmMap.FindTreeNodeOnIndex(Tree:TTreeNodes;MapIndex:Integer):Integer;
var
CurItem:TTreeNode;
Index:Integer;
pSelect:PMapNode;
begin
Result := -1;
new(pSelect);
CurItem := Tree.GetFirstNode;
CurItem := CurItem.GetNext;
while CurItem <> nil do
begin
pSelect := PMapNode(CurItem.Data);
Index := pSelect.fIndex;
if Index = MapIndex then
begin
Result := CurItem.AbsoluteIndex;
break;
end;
CurItem := CurItem.GetNext;
end;
end;
中的i怎么确定,我是说他代表的是什么呢?不是index吧
我怎么能通过ShowMessage()来看到啊,
type
TMap = Record
fIndex: Integer;
fName: String;
fCode: string;
fType: Integer;
fDate: TDate;
fFileType:String;
FileName: string;
fRe: string;
end;type
PMapNode = ^TMapNode;
TMapNode = record
fIndex:Integer;//图片编号
fCode:String;//图片编码
fName:String;//图片名称
fType:Integer;
FileName:String;//文件名
end;
{***************************************************************
* 方 法 名 : TfrmMap.AddRootNode
* 编写目的 :
* 作 者 : 黄仁光
* 参 数 : MapType:Integer
* 结 果 : TTreeNode
* 编写日期 :2002年12月18日
****************************************************************}
function TfrmMap.AddRootNode(MapType:Integer):TTreeNode;
var
RootNode:TTreeNode;
begin
treImage.Items.Clear;
case MapType of
0://单位方位图
begin
RootNode := treImage.Items.Add(nil,'单位方位图');
end;
1://建筑平面图
begin
RootNode := treImage.Items.Add(nil,'建筑平面图');
end;
2://建筑立面图
begin
RootNode := treImage.Items.Add(nil,'建筑立面图');
end;
3://楼层平面图
begin
RootNode := treImage.Items.Add(nil,'楼层平面图');
end;
4://消防部署图
begin
RootNode := treImage.Items.Add(nil,'消防部署图');
end;
5://最佳路径图
begin
RootNode := treImage.Items.Add(nil,'最佳路径图');
end;
end;
Result := RootNode;
end;{***************************************************************
* 方 法 名 : TfrmMap.AddChildNode
* 编写目的 :
* 作 者 : 黄仁光
* 参 数 : RootNode:TTreeNode;fIndex:Integer;fCode,fName:String;FileName:String
* 结 果 : None
* 编写日期 :2002年12月18日
****************************************************************}
procedure TfrmMap.AddChildNode(RootNode:TTreeNode;fIndex:Integer;fCode,fName:String;fType:Integer;FileName:String);
var
ChildNode:TTreeNode;
pMapChild:PMapNode;
begin
new(pMapChild);
pMapChild^.fIndex := fIndex;
pMapChild^.fCode := fCode;
pMapChild^.fName := fName;
pMapChild^.fType := fType;
pMapChild^.FileName := FileName;
ChildNode := treImage.Items.AddChildObject(RootNode,fCode,pMapChild);
end;function TfrmMap.FindTreeNodeOnCode(Tree:TTreeNodes;SearchString:String):Integer;
var
CurItem:TTreeNode;
Title:String;
begin
Result := -1;
CurItem := Tree.GetFirstNode;
while CurItem <> nil do
begin
Title := CurItem.Text;
if AnsiCompareStr(Title,SearchString) = 0 then
begin
Result := CurItem.AbsoluteIndex;
break;
end;
CurItem := CurItem.GetNext;
end;
end;{***************************************************************
* 方 法 名 : FindTreeNodeOnName
* 编写目的 :
* 作 者 : 黄仁光
* 参 数 : Tree:TTreeNodes;SearchString:String
* 结 果 : Integer
* 编写日期 :2002年12月28日
****************************************************************}
function TfrmMap.FindTreeNodeOnName(Tree:TTreeNodes;SearchString:String):Integer;
var
CurItem:TTreeNode;
Name:String;
pSelect:PMapNode;
begin
Result := -1;
new(pSelect);
CurItem := Tree.GetFirstNode;
CurItem := CurItem.GetNext;
while CurItem <> nil do
begin
pSelect := PMapNode(CurItem.Data);
Name := pSelect.fName;
if Name = SearchString then
begin
Result := CurItem.AbsoluteIndex;
break;
end;
CurItem := CurItem.GetNext;
end;
end;{***************************************************************
* 方 法 名 : TfrmMap.FindTreeNodeOnIndex
* 编写目的 : 根据图片编号查找节点
* 作 者 : 黄仁光
* 参 数 : Tree:TTreeNodes;MapIndex:Integer
* 结 果 : Integer
* 编写日期 :2003年01月13日
****************************************************************}
function TfrmMap.FindTreeNodeOnIndex(Tree:TTreeNodes;MapIndex:Integer):Integer;
var
CurItem:TTreeNode;
Index:Integer;
pSelect:PMapNode;
begin
Result := -1;
new(pSelect);
CurItem := Tree.GetFirstNode;
CurItem := CurItem.GetNext;
while CurItem <> nil do
begin
pSelect := PMapNode(CurItem.Data);
Index := pSelect.fIndex;
if Index = MapIndex then
begin
Result := CurItem.AbsoluteIndex;
break;
end;
CurItem := CurItem.GetNext;
end;
end;{***************************************************************
* 方 法 名 : GetMapRS
* 编写目的 :
* 作 者 : 黄仁光
* 参 数 : MapType:Integer
* 结 果 : None
* 编写日期 :2002年12月18日
****************************************************************}
procedure TfrmMap.GetMapRS(MapType:Integer);
var
qry:TADOQuery;
mySql:String;
fIndex:Integer;
fCode:String;
fName:String;
fFileType:String;
SubFileName:String;
FileName:String;
RootNode:TTreeNode;
iLoop:Integer;
begin
try
qry := TADOQuery.Create(nil);
qry.Connection := g_sysconnect;
mySql := 'select fIndex,fCode,fName,fFileType from Map where fType='+IntToStr(MapType);
if g_fun_ExecuteSQL(qry,mySql,2) then
begin
case MapType of
0://单位方位图
begin
SubFileName := TempMapDir+'\UnitDirMap';
end;
1://建筑平面图
begin
SubFileName := TempMapDir+'\BuiPlaneMap';
end;
2://建筑立面图
begin
SubFileName := TempMapDir+'\BuildEnvMap';
end;
3://楼层平面图
begin
SubFileName := TempMapDir+'\StaPlaneMap';
end;
4://消防部署图
begin
SubFileName := TempMapDir+'\DeployMap';
end;
5://最佳路径图
begin
SubFileName := TempMapDir+'\BestMap';
end;
end;
RootNode := AddRootNode(MapType);
qry.First;
while not qry.Eof do
begin
fIndex := qry.FieldByName('fIndex').AsInteger;
fCode := qry.FieldByName('fCode').AsString;
fName := qry.FieldByName('fName').AsString;
fFileType := qry.FieldByName('fFileType').AsString;
FileName := SubFileName+IntToStr(fIndex)+fFileType;
AddChildNode(RootNode,fIndex,fCode,fName,MapType,FileName);
qry.Next;
end;
end;
finally
FreeAndNil(qry);
end;
end;
Shift: TShiftState);
var
NodeIndex:Integer;
TargetNode:TTreeNode;
pMapChild:PMapNode;
fIndex:Integer;//图片编号
FileName:String;//文件名
begin
if Key = 13 then
begin
try
NodeIndex := FindTreeNodeOnName(treImage.Items,edtFindName.Text);
if NodeIndex <> -1 then
begin
try
TargetNode := treImage.Items[NodeIndex];
TargetNode.Selected := true;
TargetNode.Focused := true;
new(pMapChild);
Screen.Cursor := crHourGlass;
MapEntryMode := 1;//如果选择树里面的图片,说明图片表是编辑
pMapChild := PMapNode(TargetNode.Data);
FileName := pMapChild^.FileName;
MapIndex := pMapChild^.fIndex;
p_PicType := pMapChild.fType;//取得图片的类型
if FileName <> MapFileName then
begin
MapFileName := FileName;
fIndex := pMapChild^.fIndex;
ShowMapRS(fIndex);
end;
except
Screen.Cursor := crDefault;
Exit;
end;
end;
finally
Screen.Cursor := crDefault;
end;
end;
end;procedure TfrmMap.edtFindCodeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
NodeIndex:Integer;
TargetNode:TTreeNode;
pMapChild:PMapNode;
fIndex:Integer;//图片编号
FileName:String;//文件名
begin
try
NodeIndex := FindTreeNodeOnCode(treImage.Items,edtFindCode.Text);
if NodeIndex <> -1 then
begin
try
TargetNode := treImage.Items[NodeIndex];
TargetNode.Selected := true;
TargetNode.Focused := true;
new(pMapChild);
Screen.Cursor := crHourGlass;
MapEntryMode := 1;//如果选择树里面的图片,说明图片表是编辑
pMapChild := PMapNode(TargetNode.Data);
FileName := pMapChild^.FileName;
MapIndex := pMapChild^.fIndex;
p_PicType := pMapChild.fType;//取得图片的类型
if FileName <> MapFileName then
begin
MapFileName := FileName;
fIndex := pMapChild^.fIndex;
ShowMapRS(fIndex);
end;
except
Screen.Cursor := crDefault;
Exit;
end;
end;
finally
Screen.Cursor := crDefault;
end;
end;
tree->items->addobject(pnode,"",node);
node中保存给结点的唯一标志