书接上回,我们继续看一些较经常用到的组件公共属性(别忘了配合上表,从下往上看)。
倒数第三、四的 UndockWidth、UndockHeight 与上面的 DockSite、DockClientCount、DockClient、UseDockManager、DockManager 等属性是窗口化组件是否是一个停靠点,以及停靠或不停靠时的外观相关的一些设置属性,回头结合具体组件我们再细说。
Top、Left、Height、Width(上回已经说过了)分别用于指定组件的坐标位置:上边,左边(合起来就是左上角坐标,以像素计算),高度和宽度。
Tag:用于组件的分组或标识本身,配合脚本来实现,例如: 当Tag 为一时执行哪些语句。
TabStop:用于确定用户是否可以使用<Tab>键轮选组件,当窗体中有多个按钮或输入框时,我们可以用 <Tab>键跳转焦点(SetFocus方法)到我们想要的那个,逻辑型。而 TabOrder 的数值就是用来确定这个跳转的顺序先后(从小到大)。
ShowHint:确定是否激活提示,逻辑型。当激活时,当鼠标移到组件上可以出现一个提示,说明一下这个地方做什么的 ,而这个提示文字内容就由 Hint 来确定。
PopupMenu:用于指定在组件上单击鼠标右键时出现的弹出菜单的名字,这个菜单(也是组件)需要自己做,后面会详细说。
Parent: 用于指定组件的父组件,通常是容器组件,比如Panel框,可以在里面放入Label、Edit、Buttto等组件。注意它与上面的 Owner 的区别:通常Parent 只是容器,可以在脚本中通过为某个组件指定Parent而把它放入Parent容器中,而Owner 则是表示主组件(只适用于运行时和只读时),即某组件的所有者。
Name: 组件的唯一名称,通常设计时指定,在源代码中就可以用 Name来表示某个组件,类似变量名称。当然也可以在脚本中动态创建时指定。
Handle : 组件使用的系统窗口句柄(数值,只适用于运行时),能用 <Tab>键跳转获得焦点(SetFocus方法)的组件才有句柄,简单点说也就是可输入或者可点击的。
Focused:组件是否获得焦点(聚焦状态),逻辑型。
Font: 设置组件字体型号、大小、颜色等,可双击下拉进行选订。
Enabled:设置组件是否可用状态,不可用也就是无效、禁用状态,逻辑型。
DragMode、DragKind、DragCursor:分别是组件被拖拽时的模式(手动/自动)、是否自动停靠(被停靠组件通常为容器类型,DockSite属性设置为True表示可接受停靠)、以及被拖拽时的光标形状(可下拉选订)
Controls、ConstrolCount :对应于Parent而言,分别是当组件( 也就是Parent组件)的子组件的数组(只适用于运行时),数组类似于list列表,可以用下标区分如Controls[0],通常用于迭代。而 ConstrolCount 就是有几个子组件的数值。
类似的,Components、ComponentCount、ComponentIndex 则是对应于Owner 而言。
Caption:组件的标题,如Label.Caption就可以用来指定显示的文字。可能有些朋友不太习惯这个为什么不是用Text,这里提一下,可以这么区分:运行时能接受输入的,如Edit,用Text,否则用Caption.
Color: 组件的显示颜色,可通过下拉选订颜色。
Ctrl3D:组件是否有3d效果(阴影效果),逻辑型。
Cursor:组件当前的光标形状(可下拉选订)。
Constraints: 所有组件共有属性,在改变大小操作期间限定组件(或窗体)的最大与最小尺寸,可通过双击下拉指定。
BoundsRect、Borderwidth、BiDiMode:组件的边框外观,后两个可在设计时选订。
AutoSize: 组件是否可根据内容确定自己的大小,逻辑型。
Align: 确定组件在父组件区内的对齐方式(靠上、靠下、靠左、靠右、可用区域、指订、不指定),比方说,有一个组件已经选择了靠上(‘alTop'),第二个如果再选择靠上,那么就放到前一个组件的下方,如选择可用区域(’alClient'),那么除了前一个组件所用位置外,将占满父组件所有区域。其它的类似。
Anchors: 与父组件连接的间距(左、上、右、下)是否固定,可双击分别指订,通常只需选定两个,这样有利于窗体最大化与缩小时组件形状大小一致。
Action 标识与组件相连接的活动对象,也就是与一些类似SpeedButton等组件相连接,用于完成对应的动作(过程调用)。
到这里,我们已经把组件的共有属性过了一遍。下面用一个小例子先小试牛刀吧!
在设计窗体新建一个程序(File -> New Project), 在窗体上放入一个Panel,在Panel里放入两个Label,默认名分别为 Label1 和 Label2,再放入一个Edit 和一个Button按钮,稍拉拽布置一下,让布局看起来舒服一点。双击Button按钮,代码编辑窗内会自动生成‘def Button1Click(self, Sender): pass' 并把光标移到此处以输入代码,如果被设计窗体遮住了可以到设计窗体移开一些如图:
把'pass'去掉,输入下面三句(记得要缩进):
self.Edit1.Text=str(self.Panel1.ControlCount)
self.Label1.Caption=self.Edit1.Handle
self.Label2.Caption=self.Panel1.Controls[2].Handle
点击设计窗体上的绿色运行按钮来运行,你会看到一个新窗体,正是你设计窗体中的样子 (所见即所得),现在点击 Button1 按钮,程序运行结果如下图:
是的,我们已经改变了两个 Label 的显示内容(Caption) 和 Edit 的内容(Text),就是这么简单! 细心的你可能已经发现 :
Label.Caption赋值时并没有做 str()转化,那EdIT1.Text 不做转化应该也可以了?
你可以试一下的,然后,试试把Button1 的名字、颜色改变看看吧!
时间 13:41,不得不说,这样码字很耗时间啊,回见!
'