1.修正tree 由于weakref的一个问题
2.优化编辑器目录功能
This commit is contained in:
JianjunLiu 2023-03-23 17:58:13 +08:00
parent a9a4ee5dfc
commit 16e449ea50
2 changed files with 416 additions and 221 deletions

View File

@ -276,7 +276,7 @@ type TEditerForm = class(TVCform) //
FEdter := New TEditer(self);
Fdirview := new tdirviewer(FEdter);
Fdirview.fcbtn.OnClick := function(o,e)begin
Fdirview.fcloseclick := function(o,e)begin
Fdirview.Visible := false;
fdirspliter.Visible := false;
end
@ -1560,46 +1560,51 @@ end
type tdirviewer = class(tcustomcontrol)
uses tslvcl;
private
fms;
ffolder;
ftb;
[weakref]ftbns;
[weakref]fsbtns;
fimgs;
public
[weakref] fcloseclick;
function create(AOwner);
begin
inherited;
Width := 300;
addtoolbar();
fnodes := array();
FEdit := new tedit(self);
imglst := new tcontrolimagelist(self);
bmp := new TBitmap();
bmp.readvcon(HexFormatStrToTsl(folderbmp()));
imglst.addbmp(bmp);
bmp.readvcon(HexFormatStrToTsl(filebmp()));
imglst.addbmp(bmp);
bmp.readvcon(HexFormatStrToTsl(dllbmp()));
imglst.addbmp(bmp);
bmp.readvcon(HexFormatStrToTsl(searchbmp()));
Width := 300;
FEdit.parent := self;
FEdit.Align := alTop;
FTree := new TTreeView(self);
FTree.Align := alClient;
FTree.parent := self;
ftree.ImageList := imglst;
ftree.ImageList := fimgs;
FRootdirs := array();
FTree.onEmptyNodeExapanding:= thisfunction(emptyexpanding);
Fnodeinfos := array();
fdircrc := array();
FEdit.parent := self;
FEdit.onchange := function()begin
s := FEdit.text;
nd := ftree.rootnode;
if trim(s) and (nd.ItemCount>0) then
begin
for i,v in fsbtns do v.Enabled := true;
end else
begin
for i,v in fsbtns do v.Enabled := false;
end
end
FEdit.onkeyup := function(o,e)begin
if e.CharCode=13 then
begin
e.skip := true;
dofind();
if ssShift in e.shiftstate() then findup();
else finddown();
end
end
fcbtn := new tbtn(self);
fcbtn.caption := "";
fcbtn.Parent := self;
fbtn := new tbtn(self);
fbtn.caption := "";
fbtn.BKBitmap := bmp;
fbtn.parent := self;
fbtn.onclick := thisfunction(dofind);
mus := new TPopupmenu(self);
fms := array();
for i,v in array("添加工作目录","移除工作目录","刷新","打开") do
@ -1637,35 +1642,104 @@ type tdirviewer = class(tcustomcontrol)
end
end
FTree.PopupMenu := mus;
s := "0502000000060400000074797065000203000000696D670006040000006461746
100023F01000089504E470D0A1A0A0000000D4948445200000012000000120806
00000056CE8E57000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA864000000D449444154
384F63F84F2530920CFAB465CDFF4FDBD6417998E0757F3394850AB01A745395E
FFF9783BBA12208F0BC22EBFFD3CC48280F1560F5DAE7EDEBFFDF3696FDFFFDEC
71A8087E43400067187D39B0EBFF3D47DDFF3FAE5F26680808E00DEC6FE74EFE7
FE06F4BD01010C06B10C8250FFCACFFDF54E1FDFF79F716A8287680D32090218F
22DCC0EC4F5BD7FEBFA527F1FFDBF183603E3680D52090218F9302A13C08F87AE
CC0FFBB16CAFFBF5F3C031541051806BD01A6135C61F2FDC2E9FFF79CF4A03C54
80378C4801A3061102FFFF03001C3CE074AD27DED70000000049454E44AE42608
200";
bmp := new TBitmap();
bmp.readvcon(HexFormatStrToTsl(s));
fcbtn.BKBitmap := bmp;
FTree.OnSelChanged := thisfunction(treenodeselchanged);
selnowork();
end
fcbtn;
fms;
ffolder;
function treenodeselchanged(o,e);
begin
rnd := ftree.rootnode;
//没有工作目录
if rnd.ItemCount<1 then return selnowork();
//没有选择节点
t := FEdit.text ;
if trim(t) then
begin
for i,v in fsbtns do v.Enabled := true;
end else
begin
for i,v in fsbtns do v.Enabled := false;
end
it := e.ItemNew;
if not it then
begin
return selnonode();
end
//选中节点为工作目录
if it.parent = rnd then return selnodeiswork();
//选中目录为普通节点
selnodenotwork();
end
function addtoolbar(); //初始化工具栏
begin
ftb := new TToolBar(self);
fimgs := new tcontrolimagelist(self);
fimgs.Width := 20;
fimgs.Height := 20;
bmp := new TBitmap();
bmp.readvcon(HexFormatStrToTsl(folderbmp()));
fimgs.addbmp(bmp);
bmp.readvcon(HexFormatStrToTsl(filebmp()));
fimgs.addbmp(bmp);
bmp.readvcon(HexFormatStrToTsl(dllbmp()));
fimgs.addbmp(bmp);
ftbns := array();
fsbtns := array();
for i,v in gettbicons() do
begin
bt := new TToolButton(ftb);
bt.caption := i;
bmp.readvcon(HexFormatStrToTsl(v));
fimgs.addbmp(bmp);
bt.ImageId := fimgs.ImageCount-1;
bt.parent := ftb;
if i in array("添加工作目录","移除工作目录","打开","刷新") then ftbns[i] := bt;
if i in array("查找","反向查找") then fsbtns[i] := bt;
bt.onclick := thisfunction(toolclick);
end
ftb.ImageList := fimgs;
ftb.parent := self;
end
function toolclick(o,e); //工具栏事件
begin
case o.caption of
"关闭":
begin
if fcloseclick then call(fcloseclick);
end
"刷新":
begin
refreshdir();
end
"打开":
begin
editnode();
end
"添加工作目录":
begin
addgzml();
end
"移除工作目录":
begin
nd := FTree.CurrentNode;
delrootdir(nd);
end
"查找":
begin
finddown();
end
"反向查找":
begin
findup();
end
end
end
function muclick(o,e);
begin
case o.caption of
"添加工作目录":
begin
if not ffolder then ffolder := new TFolderChooseADlg(self);
if ffolder.OpenDlg() then
begin
return addrootdir(ffolder.Folder);
end
addgzml();
end
"移除工作目录":
begin
@ -1678,163 +1752,20 @@ CC0FFBB16CAFFBF5F3C031541051806BD01A6135C61F2FDC2E9FFF79CF4A03C54
end
"打开":
begin
nd := ftree.CurrentNode;
if not nd then return ;
ins := Fnodeinfos[nd.handle];
ed := Owner;
if ins then
begin
if ins.isfile then
begin
Owner.OpenAndGotoFileByName(ins.fullname);
end else
_wapi.openresourcemanager(ins.fullname);
end
editnode();
end
end ;
end
function dofind(o,e);
function finddown();
begin
s := lowercase(trim(FEdit.text));
if not s then return ;
it := ftree.CurrentNode;
getallnodes();
return finds(it,s);
dofind(false);
end
function finds(it,s)
function findup();
begin
bit := it;
flag := false;
ct := length(fnodes);
firstx := 0;
for i,v in fnodes do
begin
if v=it then
begin
firstx := i+1;
break;
end
end
for i := 0 to ct -1 do
begin
idx := (firstx+i) mod ct;
it := fnodes[idx];
if pos(s,lowercase(it.caption)) then
begin
FTree.SetSel(it);
return 1;
end
end
return 0;
end
function doControlALign();override;
begin
if FEdit and FTree and fbtn and fcbtn then
begin
rc := ClientRect;
rc1 := array(rc[0]+20,rc[1],rc[2]-30,rc[0]+24);
rc3 := array(rc[2]-26,rc[1],rc[2]-2,rc[0]+24);
rc4 := array(rc[0]+1,rc[1]+2,rc[0]+19,rc[1]+20);
rc2 := array(rc[0],rc[1]+25,rc[2],rc[3]);
FEdit.SetBoundsRect(rc1);
FTree.SetBoundsRect(rc2);
fbtn.SetBoundsRect(rc3);
fcbtn.SetBoundsRect(rc4);
end
end
function loadall(nd,ct,mct);
begin
if not nd then
begin
nd := FTree.rootnode;
end
if nd.ItemCount<1 and nd.dirtype then lazyload(nd,0);
ct+= nd.ItemCount;
for i:= 0 to nd.ItemCount-1 do
begin
if ct>=mct then return ;
loadall(nd.GetNodeByIndex(i),ct,mct);
end
end
function countfile(dir,n,ct);
begin
n++;
if ct<=n then return ;
iof := static iofileseparator();
fs := filelist("",dir);
if not fs then return n;
for i,v in filelist("",dir+iof+"*") do
begin
fn := v["FileName"];
if pos("H",v["Attr"]) then continue;
if fn="." or fn=".." then continue;
if pos("D",v["Attr"]) then
begin
countfile(dir+iof+fn,n,ct);
end else n++;
end
end
function lazyload(it,ex);
begin
ins := Fnodeinfos[it.handle];
iof := iofileseparator();
if ins then
begin
dir := ins.fullname();
ct := 0;
dirs := array();
files := array();
subs := filelist("",dir+iof+"*");
crc := getmsgd_crc32(tostn(subs));
if fdircrc[crc] then return it.dirtype := false ;
fdircrc[crc] := true;
for i,v in subs do
begin
fn := v["FileName"];
if fn="." or fn=".." then continue;
if pos("H",v["Attr"]) then continue;
if pos("D",v["Attr"]) then
begin
dirs[i] := array(dir+iof+fn,it);
end else
begin
nd := FTree.CreateTreeNode();
iid := 1;
if pos(".dll",lowercase(fn)) or pos(".exe",lowercase(fn)) or pos(".lib",lowercase(fn)) then iid := 2;
files[i] := array(fn,dir,iid,nd);
end
end
for j,v in files do
begin
iid := v[2];
fn := v[0];
dir := v[1];
nd := v[3];
nd.ImgId := iid;
nd.SelImgId := iid;
nd.Caption := fn;
nd.parent := it;
ndinfo := new tdirnodeinfo();
Fnodeinfos[nd.handle] := ndinfo;
ndinfo.isfile := true;
ndinfo.fname :=fn;
ndinfo.Folder := dir ;
ct++;
end
for j,v in dirs do
begin
adddir(v[0],v[1]);
ct++;
end
if ct then
begin
if ex then it.expand();
end
begin
it.dirtype := false;
end
end
dofind(true);
end
function emptyexpanding(o,e);
begin
it := e.item;
@ -1905,6 +1836,8 @@ CC0FFBB16CAFFBF5F3C031541051806BD01A6135C61F2FDC2E9FFF79CF4A03C54
fnodes := array();
return 1;
end
private //菜单回调
function refreshdir();
begin
fbackrootdirs := array();
@ -1926,6 +1859,198 @@ CC0FFBB16CAFFBF5F3C031541051806BD01A6135C61F2FDC2E9FFF79CF4A03C54
fbackrootdirs := array();
fdircrc := array();
end
function dofind(d);
begin
s := lowercase(trim(FEdit.text));
if not s then return ;
it := ftree.CurrentNode;
getallnodes();
return finds(it,s,d);
end
function finds(it,s,d)
begin
bit := it;
flag := false;
ct := length(fnodes);
firstx := 0;
for i,v in fnodes do
begin
if v=it then
begin
firstx := i+(d?(-1):1);
break;
end
end
if d then
begin
sa := array(ct-1,-1)->0;
end else
begin
sa := 0->(ct-1);
end
for ii,i in sa do
begin
idx := (firstx+i) mod ct;
it := fnodes[idx];
if pos(s,lowercase(it.caption)) then
begin
FTree.SetSel(it);
return 1;
end
end
return 0;
end
function addgzml(); //添加工作目录
begin
if not ffolder then ffolder := new TFolderChooseADlg(self);
if ffolder.OpenDlg() then
begin
return addrootdir(ffolder.Folder);
end
end
function editnode(); //打开
begin
nd := ftree.CurrentNode;
if not nd then return ;
ins := Fnodeinfos[nd.handle];
ed := Owner;
if ins then
begin
if ins.isfile then
begin
Owner.OpenAndGotoFileByName(ins.fullname);
end else
_wapi.openresourcemanager(ins.fullname);
end
end
function selnodeiswork();
begin
for i,v in ftbns do
begin
v.Enabled := true;
end
//移除,添加,刷新,打开
end
function selnodenotwork();
begin
//刷新,打开
for i,v in ftbns do
begin
if i in array("打开","刷新") then
begin
v.Enabled := true;
end else
begin
v.Enabled := false;
end
end
end
function selnonode();
begin
//添加,刷新
for i,v in ftbns do
begin
if i in array("添加工作目录","刷新") then
begin
v.Enabled := true;
end else
begin
v.Enabled := false;
end
end
end
function selnowork();
begin
//添加
for i,v in ftbns do
begin
if i in array("添加工作目录") then
begin
v.Enabled := true;
end else
begin
v.Enabled := false;
end
end
for i,v in fsbtns do v.Enabled := false;
end
private //加载相关
function loadall(nd,ct,mct); //加载所有节点
begin
if not nd then
begin
nd := FTree.rootnode;
end
if nd.ItemCount<1 and nd.dirtype then lazyload(nd,0);
ct+= nd.ItemCount;
for i:= 0 to nd.ItemCount-1 do
begin
if ct>=mct then return ;
loadall(nd.GetNodeByIndex(i),ct,mct);
end
end
function lazyload(it,ex);//惰性加载节点
begin
ins := Fnodeinfos[it.handle];
iof := iofileseparator();
if ins then
begin
dir := ins.fullname();
ct := 0;
dirs := array();
files := array();
subs := filelist("",dir+iof+"*");
crc := getmsgd_crc32(tostn(subs));
if fdircrc[crc] then return it.dirtype := false ;
fdircrc[crc] := true;
for i,v in subs do
begin
fn := v["FileName"];
if fn="." or fn=".." then continue;
if pos("H",v["Attr"]) then continue;
if pos("D",v["Attr"]) then
begin
dirs[i] := array(dir+iof+fn,it);
end else
begin
nd := FTree.CreateTreeNode();
iid := 1;
if pos(".dll",lowercase(fn)) or pos(".ocx",lowercase(fn)) or pos(".exe",lowercase(fn)) or pos(".lib",lowercase(fn)) then iid := 2;
files[i] := array(fn,dir,iid,nd);
end
end
for j,v in files do
begin
iid := v[2];
fn := v[0];
dir := v[1];
nd := v[3];
nd.ImgId := iid;
nd.SelImgId := iid;
nd.Caption := fn;
nd.parent := it;
ndinfo := new tdirnodeinfo();
Fnodeinfos[nd.handle] := ndinfo;
ndinfo.isfile := true;
ndinfo.fname :=fn;
ndinfo.Folder := dir ;
ct++;
end
for j,v in dirs do
begin
adddir(v[0],v[1]);
ct++;
end
if ct then
begin
if ex then it.expand();
end
begin
it.dirtype := false;
end
end
end
private
function getname(fname,n,dir);
begin
@ -1963,27 +2088,6 @@ CC0FFBB16CAFFBF5F3C031541051806BD01A6135C61F2FDC2E9FFF79CF4A03C54
nodes(nd.GetNodeByIndex(i),nds);
end
end
function searchbmp();
begin
return "0502000000060400000074797065000203000000696D670006040000006461746
100020502000089504E470D0A1A0A0000000D4948445200000018000000180806
000000E0773DF8000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA8640000019A49444154
484BED942FABC2601487170D1A440D62D0E0D2D06214C14FB02698449BF82564C
92018FC0676510441B098B681268320220836A36098E97739F3782FF2BEF35DF0
A67B1F58F89DFD79DEEDECBC1A7E993F24389FCF58AFD7B8DD6E5C098752D0E97
490CBE5A069DAF7512C16311C0EF98AF7040AB6DB2D32990C9ACD26369B0D2E97
0B3CCFC3E170C0783C46229180699A381E8F7C871CA9E07EBFFB2B9D4C265C915
32E97D1683438C9910AEAF53A2CCBE214CCF57A453299C462B1E08A8820389D4E
88C5629CD4F4FB7DB45A2D4E2282603E9F43D7754E6A6CDB462A95E2242208BAD
D2EAAD52AA77050BF56AB15A75704C16C36433E9FE7A4861EFCEE930A82FD7E8F
6834CA490DF5A056AB7112110444A552C16030E014CCF32F1A8D465C11910AE8B
5C3CE41BBDDE624472A20A8D9F178DC9FE4DD6EC7D5C7AA9F936C18C6CB391981
0282FA417B113D2C9D4EA3542AF96F562814D0EBF5FC4564B359B8AECB7788BC1
53CA1AD83E683FAE2380E571F908416B05C2EB9F24A28810A924422114CA753AE
FCF011011134A01F1304F12F50007C017768621EE3E529620000000049454E44A
E42608200";
end
function filebmp();
begin
return "0502000000060400000074797065000203000000696D670006040000006461746
@ -2048,6 +2152,97 @@ E80B14172C86AC9B220B1B0E1FFD2F5DBA0E18FC02031901CB25AB22CB874E336
B26C98285AB37C32D58BD65F7FF82FA1E1436B2C1308CD702108029049533F53D
33FEC7E4D6FC0F4A2EF9DFD03B132C86CC768BC842311C84D1018605200072053
91813FCFF0F007C3FE0AC714133290000000049454E44AE42608200";
end
function gettbicons();
begin
r := array();
r["关闭"] := "0502000000060400000074797065000203000000696D670006040000006461746
10002C401000089504E470D0A1A0A0000000D4948445200000014000000140806
0000008D891D0D000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA8640000015949444154
384F9D9431CA83401085F7625E21E015BC8156D639809D95AD36C142248568ED0
93C8277B0B0D99F4F32B2EB8EE1270F1EAC3B6FBE85901963156DDB66C771B455
55D93CCF6D1CC7873973478D8CA600B82C8B4D92C44651F4D564C85EE501BBAE5
39BBF991E5727709E67B5E13FA6577400D775F502455178DF9AAF19180770DF77
9BA6A917444DD3780DAEA921170A03961986C10B636968DB36A87187B4076199B
22C830296C6F7FB7DDE7146DA431896C9B24C2D6201F0BFC3C87DE06A58E6F178
A845B18010672D2386659800AD289EA6E983B3C759CB886119C6492BE2BEEF4F9
080B9D3B218966136B5E2EBF50A00F20035372B8665B4DFA5AEEBDB467988CCB5
06CBB035DC65F07C3E6F1BC4F22059B98301EB183DB686DBE006EF7CCDC8E6399
7C32F9B46EC6E1C6F7DFDB271DC4D833C20626BB8CBE2CE6464C3B80A8088ADC1
A0339B8C1313803973478D4C286BFF00D135DFBA6F19E4A90000000049454E44A
E42608200";
r["添加工作目录"]:=folderbmp();
r["移除工作目录"] := "0502000000060400000074797065000203000000696D670006040000006461746
10002F101000089504E470D0A1A0A0000000D4948445200000014000000140806
0000008D891D0D000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA8640000018649444154
384F9594A1AEC2301486270978C41C8684CC20090A3B4B022F805C160C9204378
5018F4060103C0104349E81C5E030047FEEFD0FA7A5BD1B2BF74B9AECB4E7FFE8
9A328F3EB0DFEF0BC727728508789E573826938974DBB0F072B9647680D0E170C
81D9D4E8785663F1C5AD8EBF5323BF8EF80430BC1743AA57ABD2ED5F7341A0DCE
2AB470B55A51B95C96EACD7C3E9727A2D3E944F7FB5DAA17954A85B30A2DDCED7
6BC751375960A757626584756A1BBCFE7332F5EAF5799710B6FB71BAF23ABD0DD
8FC7834AA5124B142EE1F178E40CB28A77F72FB55A8D168B85546EE166B3E18C8
9256CB7DB341E8FA5720B67B319674C2C61B7DBA5C16020955B381A8D38636209
A328A2300CA5720BFBFD3E674C2C619224D46C36A5720B5BAD16674C2CE172B9A
46AB52A955BE8FB3E674C2CE176BB6581BA06100641C0CF60381C6AE1F3F9E45E
644C2CA1BADC699ACACCEBEF9607BE2EE8352F35B084D8199AD6EBB5CC7C063DE
6DB282C2188E3981B715E45033DE8FD4B4608F0EB38ABA291FF16443F3022F41A
5192ECC50000000049454E44AE42608200";
r["刷新"] := "0502000000060400000074797065000203000000696D670006040000006461746
100029C01000089504E470D0A1A0A0000000D4948445200000014000000140806
0000008D891D0D000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA8640000013149444154
384FBD940D8D834010464F10064000064000180001200004A0000318000128C00
0063030CD9B63B62D85CB5ED3F42513C8EEEC373F3BF0231FE67B82EBBA4ADBB6
92A6A90441A0C67B5DD732CFF3EEF5CAA960DFF72A1086A15455255DD7A9F11EC
7B1EE956529DBB6ED27EE3C099215360C83DAD9012020C1C8F8E8A382E338BAD2
78FAB02C8B8AE679BEAFFCA2824551489224AE5764E90355E0FFD85357323D222
23DC2D117FC49C87082599669D3C9EEAA7767344DA3591A4E9045B2FC2F9CF98E
209742D9BE585B6C360D2768BDF0BD6184B88C63654E102136F9027CB091C1984
51375826059F2BDFAC098E14FAB18747812044AB1A8D334EDAB7758638FE00CF4
B1452F8240FA163D8A221578FCEBB07735FCA782C02D7288C653920D3E6B7F0DF
EA5E0BB7C5850E4063EDA83420076B5E10000000049454E44AE42608200";
r["查找"]:="0502000000060400000074797065000203000000696D670006040000006461746
100023601000089504E470D0A1A0A0000000D4948445200000014000000140806
0000008D891D0D000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA864000000CB49444154
384FED91310A8340104573201BB1110BC1422CC446F068DEC033D968A3853636D
AD8083FFC75922059758349970703C39FD9C7B27BC397F90BAFF35B615114D299
93E7B9742B4F615996B02C0B599649720E777986671F6C6E58D7351CC7319272C
7B66D545525C9CADB1BB66D0BCFF30EA59CB9AE8BA6692479A1FD94BEEF110481
56CACCF77D745D27C916AD900CC380288A3652F66118AAD91EBB42324D1392245
122561CC718C751A67A0E85649E67A469AA8AFD19A742B22C8B2A138C849FF017
5E05B8030D10FC4ABB5F29D00000000049454E44AE42608200";
r["反向查找"] := "0502000000060400000074797065000203000000696D670006040000006461746
100023A01000089504E470D0A1A0A0000000D4948445200000014000000140806
0000008D891D0D000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA864000000CF49444154
384FEDD1CF0A454014C7F1D959B1B2623536BC25CF63230B29A5A4B010C50BFD6
E8733F736F973955B77E3B31A67CC7714811F7B82F7FD2738CF33A669E2A7735F
83C330200802F8BE8FBEEF797AEC34D8751D3CCF43188688A208524A344DC3BBF
B0E83755DC375DD25A650D4711C5455C593ADDD605996B06D5B8B2914A5BDA228
78A2DB04F33C876559CBC1237491699AC8B28C271F5A304D531886711A53284AE
F2649C293D53B18C731841097620A45E90C9D55B42F1CC79157D7B56DCBABD5EE
4FB9E309DE05BC002EB9F422B338307C0000000049454E44AE42608200";
r["打开"] := "0502000000060400000074797065000203000000696D670006040000006461746
10002C201000089504E470D0A1A0A0000000D4948445200000014000000140806
0000008D891D0D000000017352474200AECE1CE90000000467414D410000B18F0
BFC6105000000097048597300000EC300000EC301C76FA8640000015749444154
384FB5D43D4BC350140660FF89820AFE1135D2440545AB82E26235A9427129A25
25C6A116A9DD4BD4E756951076D87BAD4D14E814AA042B01532660CBC72AE69B8
FD8A37105F38907393F364B8371941C8F93FB0542C428DED627D35EA5B1F8D863
B01E8BA8ED657CBED7EE381715545A55CC15BADE65B9DD0F3F482F1D1313C3D3C
BAAB1C48374443181585307E363048D0DE4ECC43799C1208A4C1EDCD2D388EE3F
53C461106697023BA06DBB6597F9848F4611421F0408B636569199665B1FE2899
F4B0FA7BBD0BFE13246C5151609A26EBCF52A92E80769E9FF505098BCC4A300C8
3F599741AFB9AC6AE3B11063F9B4DCC476448D333EC30E7B2D93E8C220CDEE5F3
B838CFE0F6FA86A183308A3048674D96E6303531C9BE88611106EF0B05BC56ABF
86EB7DD95C109B42922190AD25110F939F4D6D5650E0BB2E22A1C28FAFBEAADD3
E313949F5F5C8503C34AC820F003058F6573F619F1EC0000000049454E44AE426
08200";
return r;
end
fbackrootdirs;
FTree;

View File

@ -1780,8 +1780,8 @@ type TcustomTreeCtl = class(ttreelistwnd)
FOnSelChanging;
FonEmptyNodeExapanding;
FOnSelChanged;
FCurrentNode;
autoref
FCurrentNode;
FNodeHierarchyWidth;
FMulSelected;
FMulSelects;