不知如何定义dbtreeview的imageindex |
尚未結案
|
zhuangquanmin
一般會員 發表:5 回覆:6 積分:2 註冊:2005-04-13 發送簡訊給我 |
写了一个dbtreeview,不知如何定义它imageindex 为表中的字段值,请大大帮下,谢谢.
unit dbtreeviewex;
interface
uses ComCtrls, DB, Classes;
type
TTreeNodeInfo = record
Id: string;
ParentId: string;
end;
TDBTreeViewex = class(TTreeView)
private
fTable: TDataSet;
fId, fParentId, fName,fimageindex: string;
function AddItem: TTreeNode;
function FindItem(Id: string): TTreeNode;
public
function GetId: string;
procedure BuildTree;
procedure ClearTree;
published
property FieldId: string read fId write fId;
property FieldParentId: string read fParentId write fParentId;
property FieldName: string read fName write fName;
property Fieldimageindex: string read fimageindex write fimageindex;
property DataSource: TDataSet read fTable write fTable;
property ActiveId: string read GetId;
end;
procedure Register;
implementation
function TDBTreeViewex.FindItem(Id: string): TTreeNode;
var i: integer;
NodeInfo: ^TTreeNodeInfo;
begin
Result := nil;
for i := 0 to Items.Count - 1 do
begin
NodeInfo := Items[i].Data;
if NodeInfo^.Id = Id then
begin
Result := Items[i];
Exit;
end;
end;
end;
function TDBTreeViewex.GetId: string;
var NodeInfo: ^TTreeNodeInfo;
begin
if Selected = nil then Result := ''
else
begin
NodeInfo := Selected.Data;
Result := NodeInfo^.Id;
end;
end; function TDBTreeViewex.AddItem: TTreeNode;
var NodeInfo: ^TTreeNodeInfo;
ObjParent: TTreeNode;
Name, CurId: string;
begin
ObjParent := FindItem(fTable.FieldByName(fId).AsString); if ObjParent <> nil then
begin
Result := ObjParent;
Exit;
end
else
begin
New(NodeInfo);
NodeInfo^.Id := fTable.FieldByName(fId).AsString;
NodeInfo^.ParentId := fTable.FieldByName(fParentId).AsString;
Name := fTable.FieldByName(fName).AsString;
if fTable.FieldByName(fParentId).AsString <> '' then
begin
ObjParent := FindItem(Name);
if ObjParent <> nil then
Result := Items.AddChildObject(ObjParent, Name, NodeInfo)
else
begin
CurId := fTable.FieldByName(fId).AsString;
if fTable.Locate(fId, fTable.FieldByName(fParentId).AsString, []) then
begin
Result := Items.AddChildObject(AddItem, Name, NodeInfo);
fTable.Locate(fId, CurId, []);
end
else
Result := Items.AddObject(Selected, Name, NodeInfo);
end;
end
else
begin
Result := Items.AddObject(Selected, Name, NodeInfo);
end;
end;
end; procedure TDBTreeViewex.BuildTree;
var ChangeEvent: TTVChangedEvent;
Node:TTreeNode;
begin
if (fTable = nil) or (not fTable.Active) then Exit;
ChangeEvent := OnChange;
OnChange := nil;
Items.BeginUpdate;
ClearTree;
fTable.First;
while not fTable.Eof do
begin
AddItem;
node.ImageIndex:=ftable.fieldbyname(fimageindex).AsInteger;
node.SelectedIndex:=ftable.fieldbyname(fimageindex).AsInteger;
fTable.Next;
end;
AlphaSort;
Items.EndUpdate;
OnChange := ChangeEvent;
end; procedure TDBTreeViewex.ClearTree;
var NodeInfo: ^TTreeNodeInfo;
i: integer;
begin
Items.BeginUpdate;
for i := 0 to Items.Count - 1 do
begin
NodeInfo := items[i].Data;
Dispose(NodeInfo);
end;
while Items.Count > 0 do Items.Delete(Items[0]);
Items.EndUpdate;
end; procedure Register;
begin
RegisterComponents('Data Controls', [TDBTreeViewex]);
end; end.
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |