编程高手快快快看过来!越快越好!(100分)

  • 主题发起人 主题发起人 yanliang
  • 开始时间 开始时间
Y

yanliang

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有这么两个问题
1 用DELPHI画一棵树。假设这是一棵完全二叉树,即第K层有(2的K次幂-1)个结点,
当输入要画的结点个数,这个程序就可自动的画出整棵树。每个结点用一个矩形表示。
对那些非叶子结点当鼠标左键点击时,弹出一个FORM用以显示这个结点的一些信息;
对叶子结点当鼠标左键点击时,在这个结点下面显示其所有子树。
2 虚拟内存。以上面的树为例,假设现在要完整的画出这棵树,需要4*4单元的大小
的平面,而电脑屏幕只有1*1单元的大小,现在要想完整的看见整棵树,必须
拖动Vertical Scrollbars 或者horizontal Scrollbars,怎样实现这一技术?
 
"对那些非叶子结点当鼠标左键点击时,弹出一个FORM用以显示这个结点的一些信息;
对叶子结点当鼠标左键点击时,在这个结点下面显示其所有子树。"
是否不对,应该为
"对那些叶子结点当鼠标左键点击时,弹出一个FORM用以显示这个结点的一些信息;
对非叶子结点当鼠标左键点击时,在这个结点下面显示其所有子树。"

如果如上:
问题1:把每个节点形成时,加上序号(按顺序),当点击节点时,通过序号判断节点的位置
(由于知道层数),既然位置判断出来,显示只是简单操作而已.
序号形成如下:
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
判断算法为:
如果序号小于2的K-1且大于2的K-2(K为层数),说明节点为叶子节点;否则,为非叶子节点.
 
找本混沌与分形图形生成的书看看
 
Kill Night:
你的思路很对,我用pascal语言实现了这一功能,可如何用delphi实现?
你知道什么地方有DELPHI下的mapx(mapinfo)的插件吗?如果用mapx做可能会方便一些.
 
To yanliang:
  兄弟,Pascal都实现了,Delphi里面照搬就行了,当然,你要做界面的话,再学
学Delphi吧。
 
现在的问题是这棵树非常大,一个屏幕显示不了,需要再加上几个屏幕才能显示得了,
这怎么办?也就是说,要用DELPHI实现虚拟屏幕,这如何实现?
 
一个最简单的办法是直接将树画在ScrollBox里. 在ScrollBox里加两个Label, caption
为空或空格, Transparent 为True, 一个放在左上角, 另一个放在右下角.
运行时根据你计算的大小调整右下角label的位置就行了, 滚动全由ScrollBox完成 :)
 
不知你把这棵树旋转-90度试试;-)
我的意思是你可以在类似treeview的上面来实现树和对树的操作,就象erwin一样。
这样,子树的展开与收缩,叶子结点的判断都是非常容易实现的。
 
用ScrollBox作为容器,用Label(或Panle,...)作为节点矩形。
对每一个节点,计算好位置后,创建一个Label,用Lable.Tag保存对应节点数据指针,
同时设置OnClik事件过程,当然,还可以设置其它属性,如颜色等。
在OnClick事件过程里,从TLabel(Sender).Tag得到节点数据指针,根据节点数据确定进一
步处理。
 
多人接受答案了。
 
后退
顶部