我如何给动态生成的控件按照运行时象在DELPHI编辑时一样,按住某键用鼠标点几个控件则可把这几个控件分成一组进行位置排列(200分)

  • 主题发起人 主题发起人 cccc
  • 开始时间 开始时间
提供一个思路:
用一个 tlist
把所有的的控件的 onclick 事件共用一个,在其中判断是否按下 shift,
如果按下,则加到 tlist 中,然后用一个循环对所有的控件的 left, top
进行修改,根据不同的 align 修改, 比如 左对齐就把所有的 left 设成
相同的, top 也一样。
 
谢谢SUPERMMX,我试着用您的方法,但还是有两个问题:1、我把在LIST中的控件属性取出来时用list.items.left但编译出错。2、还有我如何知道这个控件是否按了SHIFT键
 
superMMX请您再说的详细些,我想知道如何获得要排列的控件是否按了某键
 
1. tobject(list.items).left
2. 监视form的onkeydown
 
我试了编译时报错LEFT没有定义,
我不知道如何监视form的onkeydown
请您不吝赐教!!
 
用onmousedown代替onclick,shift的状态可由
ssShift in Shift判断。
(List.items as TButton).Left 可取出left!
 
OpuBF的意见是正确的
Tlist只是一个指针列表,你怎么能直接使用它的left属性呢?
必须将它转变为TButton对象,再使用left
建议你再深入学习一下Tlist的使用
 
我用as tbutton 还是不能取出left的值
我在list的列表中放了一些不同的控件(如label,edit,dbmomo)等,如何判断我
在第i个取的是那种?
 
tcontrol(list.items).left
你使用的是有窗口的控件,都是从TCONTROL中继承下来的。
FORM的KEYPREVIEW设置为TRUE,在ONKEYDOWN中监视SHIFT键
 
我是否可用list.add(sender)把响应该事件的控件添加到list 中?
 
to cccc:
应该可以的, 还有我说错了,在 onMouseDown 中检测 shift 键,
至于不能使用 .left, 你必须找所有控件的共同祖先,(当然得有
left 属性), 但是,我说的只是一个思路,没做过,

要做的好,不太容易,我回去试试。
 
我没大听懂,不过我只是提醒大家,注意一下组件的Tag属性,
这个属性可能能提供一些帮助,它本身没有任何含义,
也就是说,我们可以赋予它任何我们自己定义的含义
 
:to cccc
>>我是否可用list.add(sender)把响应该事件的控件添加到list 中?
添加的方法是 tcontrol(list.items).onclick := form1click;
:to supermmx
有窗口的控件的共同祖先是tcontrol,tcontrol有left,right ...等属性。
:to lczhuohuo
tag 只能是integer;不能为pointer

 
to sherman :
1, 他说的是把控件加到 tlist 里面。
2, 对是 TControl,
3, tag 是 integer, 但可以把 指针赋给它, LongInt(p);

to cccc:

我回去试了一下,挺好用的,只是要做的完全,要费很大工夫,
 
后退
顶部