{"id":326,"date":"2008-05-17T21:01:06","date_gmt":"2008-05-17T21:01:06","guid":{"rendered":"http:\/\/6teen.ru\/?p=45"},"modified":"2008-05-17T21:01:06","modified_gmt":"2008-05-17T21:01:06","slug":"9520","status":"publish","type":"post","link":"http:\/\/pblog.ru\/lab\/?p=326","title":{"rendered":"TreeView \u0438 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445"},"content":{"rendered":"<p>TreeView \u0438 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<br \/>\n<!--more--><\/p>\n<pre class=\"alt2\" style=\"margin:0px; padding:6px; border:1px inset; width:580px; height:320px; overflow:auto\"><div>TreeView \u0438 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\n\nframez\n\u0415\u0441\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0438\u0434\u0430 id | name | idpar, \u0433\u0434\u0435 idpar - id \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0432 \u044d\u0442\u043e\u0439 \u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0435. \u0412 treeview \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u0440\u0435\u0432\u043e \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u0414\u0435\u0440\u0435\u0432\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435, \u0430 \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c (\u0442.\u0435. \u0432\u0435\u0442\u0432\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 +) \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0443 \u0437\u0430\u043f\u0438\u0441\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u0434\u043e \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.\n\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u044f \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e \u0434\u0435\u0440\u0435\u0432\u043e \u0438 \u0432\u0441\u0435... \u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0443 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b \u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u044f \u043f\u0440\u043e\u0431\u0443\u044e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c 1 \u0432\u0435\u0442\u043a\u0443, \u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435 \u0434\u0435\u0440\u0435\u0432\u043e... \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u043d\u044c \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u0447\u0435\u043c \u0434\u0435\u043b\u043e\n\u042f \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0430 \u043c\u043d\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e.\nprocedure tmainform.n10click(sender: tobject);\nbegin\n\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f\nwith tgroupeditform.create(self, 0, 0, true) do\ntry\nshowmodal;\nfinally\nfree;\nend;\nshownode(grouptview.selected);\nend;\n\nprocedure tmainform.shownode(node : ttreenode);\nvar\nlist : tstringlist;\ni : integer;\nbegin\nlist := tstringlist.create;\nwhile node.parent <> nil do\nbegin\nlist.add(node.text);\nnode := node.parent;\nend;\ngrouptview.fullcollapse;\ngrouptview.items.item[0].expand(true);\nfor i := list.count-1 downto 1 do\nbegin\nwhile node.getnextchild(node) <> nil do\nif node.text = list.strings[i] then node.expand(true);\nend;\nlist.free;\nend;\n--------------------------------------------------------------------------------\n\n\u0430 \u0437\u0430\u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0434\u0435\u0440\u0435\u0432\u043e?\n\u0435\u0441\u043b\u0438 \u0442\u0430\u043a \u0443\u0436 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c, \u0442\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0435\u0442\u043a\u0443, \u043d\u0435 \u043d\u0430\u0434\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0435\u0451.\n\u044f \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439 \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0435\u0440\u0435\u0432\u043e\u043c - \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e \u0441\u0440\u0430\u0437\u0443 \u0432\u0441\u0435 \u0438 \u043d\u0430\u0431\u043e\u0440\u0443 \u0441\u0442\u0440\u043e\u044e \u0434\u0435\u0440\u0435\u0432\u043e. \u0417\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u043a\u043e\u043b\u043e 2 \u0442\u044b\u0441, \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\n\ntype tnodevalue = class\npublic\nname: string;\nnode: ttreenode;\nid: extended;\norgid: extended;\nbsotype: extended;\nparentid: extended;\nplaceid: extended;\nconstructor create(ds: tdataset);overload;\nconstructor create(pid, porgid, pbsotype, pparentid, pplaceid: extended; pname:string);overload;\nprocedure assigndata(pid, porgid, pbsotype, pparentid, pplaceid: extended; pname:string);\nend;\n....\nprocedure ttempl.rebuildtree;\nvar root: ttreenode;\nnv: tnodevalue;\nbegin\ntv.items.beginupdate();\ntry\ntv.items.clear();\nfnodesmanager.clear();\ncds.emptydataset();\n\nfillcds(querytemplatetree);\ncds.first();\nif cds.recordcount>0 then\nbegin\nnv := tnodevalue.create(cds);\nroot := tv.items.addchildobject(nil, nv.name, nv);\nnv.node := root;\nfnodesmanager.add(nv);\nfillchildren(cds, root, tv.items, cds.fieldbyname('templateid').asfloat);\nend;\nif tv.items.getfirstnode() <> nil then\nbegin\ntv.items.getfirstnode.expand(false);\ntv.items.getfirstnode.selected := true;\nend;\nfinally\ntv.items.endupdate;\nend;\nend;\n\nprocedure ttempl.fillchildren(ds: tclientdataset; root: ttreenode;\nnodes: ttreenodes; parentid: extended);\nvar nd: ttreenode;\ni: integer;\nlst: tlist;\nnv: tnodevalue;\npos: integer;\nbegin\ncds.setrange([parentid], [parentid]);\nlst := tlist.create();\ntry\nwhile not cds.eof do\nbegin\nnv := tnodevalue.create(cds);\nnd := nodes.addchildobject(root, nv.name, nv);\nnv.node := nd;\nlst.add( pointer(fnodesmanager.add(nv)) );\ncds.next();\nend;\ncds.cancelrange();\nfor i:=0 to lst.count-1 do\nbegin\npos := integer(lst[i]);\nnv := fnodesmanager.items[ pos ];\nfillchildren(cds, nv.node, nodes, nv.id);\nend;\nfinally\nlst.free();\nend;\nend;\n...\nprocedure ttempl.tvchange(sender: tobject; node: ttreenode);\nvar nv: tnodevalue;\nbegin\npmtemplatetreepopup( pmtemplatetree);\nif node = nil then\nexit;\nnv := tnodevalue(node.data);\nsetsubdsparams(nv);\nend;\n\ncds \u044d\u0442\u043e tclientdataset, \u0432 \u043d\u0435\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u044b\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u043f\u043e parentid\n\n\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: http:\/\/www.delphimaster.ru\/\n<\/div><\/pre>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>TreeView \u0438 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[430,386],"tags":[1924,618,212],"_links":{"self":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/326"}],"collection":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=326"}],"version-history":[{"count":0,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=\/wp\/v2\/posts\/326\/revisions"}],"wp:attachment":[{"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=326"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=326"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pblog.ru\/lab\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}