to Kingron(WinAPI):   等待你的答复!!1

解决方案 »

  1.   

    我们在开发此种应用时,没有用到你这么,费劲的方法,哎……
    你知道TreeView控件有个强大的功能,那就是把分类树,写到一个文本文件中去,还可以
    Load进来,说到这你明白了吗 hehe^^ ,好好看看TreeView生成的文本文件,你就可以
    看到是什么结构了,它里面的分层是用Tab(#9)键实现的,所以你的明白了吧……
    什么没有??!! 好吧好吧,帮人帮到底,加分哦 hehe^^ 
    你的库要改一下,加一个级别字段和一个节点的序号,来说明层的级别和在树中的位置,然后
    把数据库中的记录按节点的序号顺序取出,取一条,判断它是第几层,就在这个节点名子前加
    几个Tab(#9),形成字符串,写到一个文本文件中,完了用一条TreeView.LoadFromFile('
    生成了文件名');你就看到了, hehe^^ 
    下面再说明一下节点的序号怎么用:
      分类名            节点序号
    A--                    1
      |
      -B-|                 2
      |  |
      |  B1                3
      -C                   4
    看明白节点序号怎么用了吗
    对了,还有,加图片的号ICO,要在TreeView的OnGetImageIndex和OnGetSelectedIndex两个
    事件中处理,先加上ImageList加好ICO,在TreeView的ImageList属性中加上ImageList控件
    源码如下:
    显示分类树部分:
    第一步:生成树结构文件
    var
      TempTreeFile:TextFile;  //用于存放数据的临时文件
      I:integer;              //当前节点的级别
      S:String;               
    begin
      AssignFile(TempTreeFile,'TempTree.txt');
      Rewrite(TempTreeFile);
      TreeQuery.Open;
      TreeQuery.First;
      try
        try
          with TreeQuery do
          while not eof do
          begin
            S:='';
            I:=1;
            while i<TreeQueryJdjb.AsInteger do   //TreeQueryJdjb.AsInteger是当前节点的级别
            begin
              S:=S+#9;  //根据节点的级别而产生几个字符#9
              inc(i);
            end;
            S:=S+TreeQueryJdmc.AsString;   //TreeQueryJdmc.AsString为当前节点所显示的的文本
            WriteLn(TempTreeFile,S);  //将生成的字符串写到文本文件中
            Next;
          end;
        finally
          CloseFile(TempTreeFile);
        end;
      finally
        TreeQuery.Close;
      end;
    end;
    第二步:利用TTreeView组件的LoadFromFile方法将树结构从文件"TempTree.txt"装入即可
    TreeView1.LoadFromFile('TempTree.Txt');一般在主窗体的Create中调用。TreeView加ICO部分:
    procedure TMain.TreeView1GetImageIndex(Sender: TObject; Node: TTreeNode);
    begin
      if Node.HasChildren then
        if Node.Expanded then
          Node.ImageIndex := 1
        else
          Node.ImageIndex := 0
      else
        if Node.Selected then
          Node.ImageIndex := 1
        else
          Node.ImageIndex := 0;
    end;procedure TMain.TreeView1GetSelectedIndex(Sender: TObject;
      Node: TTreeNode);
    begin
      Node.SelectedIndex := Node.ImageIndex;
    end;
    加分!!!加分!!!!!!!!!!!!
      

  2.   

    to Kingron(WinAPI):    不知你有没有好的方法,等待你的答复!!
    to CDSoftwareWj(95927):    你说采用Txt文件是好,但是我需要的是TreeView中的每一项还和另外一个数据库有联系,就是当我点击TreeView中任意一项时能够读取放在node.data中的数据Subkey,然后根据该subkey从另外的库中筛选出属于该节点的数据记录,然后显示在ListView控件中,如你所说的,就不能够做到了!
      

  3.   

    to Kingron(WinAPI):    不知你有没有好的方法,等待你的答复!!
    to CDSoftwareWj(95927):    你说采用Txt文件是好,但是我需要的是TreeView中的每一项还和另外一个数据库有联系,就是当我点击TreeView中任意一项时能够读取放在node.data中的数据Subkey,然后根据该subkey从另外的库中筛选出属于该节点的数据记录,然后显示在ListView控件中,如你所说的,就不能够做到了!
      

  4.   

    hehe^^ 原来是这样呀 要是把我们公司的源码都给了你……hehe^^ 
    我们公司里也在开发这样的程序(模块),要是向你说的那样就不能一句俩句的说明白的了
    光是在设计初期我们三个就从数据库结构,程序流程等各各方面考虑,不过这个阶段以过去了
    我们在开发时没有用到什么指针啦,什么node.data什么的,就是用了这种方法,程序是不能
    给你,不过可以提醒你,好好看看节点的序号 hehe^^ 我们的设计是:
     分类树库           主库
     节点序号         节点序号其中核心部分是:
    node:=当前节点 (TreeView.Selected)
    I:=0
    while node<>nil do
    begin
      I:=i+node.index+1;
      node:=Node.parent;
    end;
    ShowMessage(IntToStr(I));
    在不会再说吧 hehe^^ 不是我不帮你哦 是……是……哎,你总要自己研究研究吧
    一个SQL就搞定了!!!!
    给分给分!!!!!!!!!!!不给就不帮了!!! hehe^^
      

  5.   

    to CDSoftwareWj(95927): 我已做了快一个星期了,都没过关,我学DELPHI不久,你们都不帮我谁帮我啊! 告诉我吧!谢谢了,改天请你吃饭!
      

  6.   

    我倒!!! I 服了 You !!
    怎么请??在网上??nonono
    源程序不能给你是肯定的!!(为了公司)
    但是按我的思路开发,一定没有问题!!(我们以做出来了)
    先自己做吧,到了关键时候我一定帮你!(为了你这个从来不知道的朋友)
    还有就是:我没有多少时间(现在也在做我们的程序在加班…忙!),只是我们上网方便(公司
    一天24小时都在网上),上班时老板看见我们上网就要……(恐怖画面请自行想像…)
    你可以和我E联系,我的是[email protected],先说了我可没有多少时间的哦!!!!!!
      

  7.   

    我以前用VB。VFP做数据库软件,没何难的,没想到DELPHI我作品的主页你可以去看一看。应该还不是很差http://fullstrong.yeah.net  你可以去看看的。
      

  8.   

    Delphi 是强大的(只要你能掌握点 hehe^^)
    是VB、VFP不能比的,这点是没的说,好我去看看
      

  9.   

    to CDSoftwareWj(95927):  谢谢你的回答,我要下班了,我写Email跟你联系吧。
      

  10.   

    写程序好烦啊,
    到 猪哥的网站下一控件包吧,是EXPRESSQUANTUMGRID 中的dbtreeview网址忘了,  只记得’男儿有志当凌云‘的口号了,查一下了
      

  11.   

    这么简单的事情,搞得这么复杂干嘛!
    你定义一个记录类型的指针,记录一个 ID,
    type 
      Mycord=Record
      begin
        id:integer;
        ...
      end;
      pMyRecord=^Myrecord;
    然后通过 Node.Data 和 pMyrecord 联系起来,
    pMyrecord.ID 和数据库中的记录联系起来,不就等于
    每一个 node 对应一条记录。