delphi如何按照控件的左右顺序来遍历窗体中的每个控件
delphi默认是按照控件添加进窗体的顺序来遍历的, 有没有哪个属性能控制这个/?? |
#1 得分:10回复于: 2012-03-11 13:42:18
没有的,
Delphi是根据这里定义的次序进行加载的,所以此处Components[0]为Button1 如果控制焦点的话是TabOrder这个属性 |
|||
#2 得分:0回复于: 2012-03-11 13:43:37
object Edit1: TEdit
Left = 336 Top = 128 Width = 121 Height = 21 TabOrder = 2 Text = 'Edit1' end 第一个应该是object Edit1: TEdit,看错了下 |
|
|
#3 得分:0回复于: 2012-03-11 13:47:43
那controls[0]呢?
Components[0]和controls[0]有啥区别 我又如何才能改变这个次序,望指教. |
|
#4 得分:0回复于: 2012-03-11 13:48:01
好东西啊
|
|
#5 得分:0回复于: 2012-03-11 13:49:05
case5166
对就是这位仁兄的说法 |
|
#6 得分:0回复于: 2012-03-11 14:36:54
那如何实现对panel上的所控件进行位置排序,比如panel上有三个控件,添加进panel中的顺序分别是btn1,btn2,btn3,left小的排在左边,(btn2.left>btn3.left>btn1.left,排列的顺序就为btn1,btn3,btn2)
这种如体实现?? |
|
#7 得分:0回复于: 2012-03-11 15:19:04
可以用Panel.Components[0]来取得控件,然后判断是否是Button,如:
if Panel.Component[i] is TButton then |
#8 得分:0回复于: 2012-03-11 15:44:18
存细观察下可以发现DELPHI的添加次序还是很有规律的 在PANEL下则只需调整PANEL内的元件次序就可以了, (Components[i] as TControl).Left := (Components[i+1] as TControl).Left+10;这类代码来调整 |
|||
#9 得分:0回复于: 2012-03-11 15:48:37
|
|
|
#10 得分:0回复于: 2012-03-15 13:27:41
class procedure myformUtil.AdjustToolBar(aContainer: TWinControl;
bIsVert: Boolean; iSpace, iInitPosition: Integer); var col: TControl; ls: TStringList; i: Integer; begin if iSpace < 0 then iSpace := 4; if iInitPosition < 0 then iInitPosition := 10; aContainer.Controls[0].Left := iInitPosition; aContainer.Controls[0].Top := Round((aContainer.ClientHeight - aContainer.Controls[0].Height) / 2); aContainer.Controls[i].Left := iSpace + aContainer.Controls[i - 1].Left + aContainer.Controls[i - 1].Width; aContainer.Controls[i].Top := Round((aContainer.ClientHeight - aContainer.Controls[i].Height) / 2); end; 看看我这段代码,实现控件自动排序的,如何实现控件按原来的位置从左到右依次排序呢? 这个默认的排序规则是控件添加 进panel中的顺序. 高手指点指点.. |
#11 得分:0回复于: 2012-03-15 13:35:48
可以设置tag来实现,然后findcomponent
|
|
#12 得分:10回复于: 2012-03-23 22:08:03
如果窗体上的控件都是 TWinControl继承下来的 下面的代码对你可能有帮助
var P:TPoint; wnd:Thandle; vWinControl: TWinControl; begin P := self.ClientToScreen(Point(x,y)); wnd := WindowFromPoint(p);// if wnd<>0 then begin vWinControl := FindControl(wnd); end; end; |
|
#13 得分:0回复于: 2012-03-23 22:11:03
以上代码对TLabel,TImage无效 对TPanel,TEdit有效
对无效的TLabel,TImage等放在TPanel容器里面,上面的代码就可以用了 |
delphi lazarus opengl
网页操作自动化, 图像分析破解,游戏开发