📄 makecodetree.pas
字号:
unit MakeCodeTree;
interface
uses ComCtrls,db,SysUtils;
type
TCodeTree=class
private
function AddTreeNode(tv:TTreeView;vParentCode,vCode, vName: String): Boolean;
function GetString(s, se: String; n: Integer): String;
public
function GetNodeCode(vNode: TTreeNode): String;
function GetNodeName(vNode: TTreeNode): String;
function GetNode(tv:TTreeView;vCode: String): TTreeNode;
function MakeCodeTree(tv:TTreeView;aDataSet:TDataSet):Boolean;
end;
const
SepStr:string='-';
implementation
uses BaseVar;
function TCodeTree.GetNodeCode(vNode: TTreeNode): String;
begin
Result:=GetString(vNode.text,SepStr,1);
end;
function TCodeTree.GetNodeName(vNode: TTreeNode): String;
begin
Result:=GetString(vNode.text,SepStr,2);
end;
function TCodeTree.AddTreeNode(tv:TTreeView;vParentCode,vCode, vName: String): Boolean;
begin
tv.Items.AddChild(GetNode(tv,vParentCode),vCode+SepStr+vName);
end;
function TCodeTree.MakeCodeTree(tv:TTreeView;aDataSet:TDataSet):Boolean;
begin
tv.Items.Clear;
aDataSet.First;
with aDataSet do
while not Eof do
begin
AddTreeNode(tv,FieldByName('父项代码').AsString,FieldByName('代码').AsString,FieldByName('名称').AsString);
next;
end;
end;
function TCodeTree.GetNode(tv:TTreeView;vCode: String): TTreeNode;
function GetNodeByCode(vNode:TTreeNode;vCode:string):TTreeNode;
var
i:Integer;
begin
Result:=nil;
if GetNodeCode(vNode)=vCode then //找到节点
begin
Result:=vNode;
exit;
end
else
if vNode.HasChildren then
begin
//浏览子节点
for i:=0 to vNode.Count-1 do
begin
Result:=GetNodeByCode(vNode.Item[i],vCode);
if Result<>nil then exit;
end;
end;
end;
var
i:Integer;
begin
Result:=nil;
if vCode='' then
Result:=nil
else
begin
for i:=0 to tv.Items.Count-1 do
begin
Result:=GetNodeByCode(tv.Items[i],vCode);
//如果找到节点
if Result<>nil then Break;
end;
end;
end;
function TCodeTree.GetString(s, se: String; n: Integer): String;
var
rs:String;
i,j:Integer;
begin
i:=0;
rs:='';
if n=1 then
begin
while s[i]<>se do
begin
rs:=rs+s[i];
i:=i+1;
end;
result:=trim(rs);
exit;
end;
j:=1;
i:=0;
rs:='';
while j<>n do
begin
while s[i]<>se do i:=i+1;
while s[i]=' ' do i:=i+1;
I:=I+1;
j:=j+1;
end;
// I:=I+1;
while (s[i]<>se) and (i<=Length(s)) do
begin
rs:=rs+s[i];
i:=i+1;
end;
result:=trim(rs);
exit;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -