9 Delphi用户接口设计详述

TObject->TPersistent->TComponent->TControl->大部分VCL组件(例外的如Ttimer父类为TComponent)

Delphi组件分两大类:父类(其对象实体可作为其他对象的容器)和普通组件(需放置在父类对象中)。父类组件必定继承自TWinControl,而普通组件则未继承TWinControl

TFormTLabel的继承图:

TObject

                                           |

TPersistent

|

TComponent

                                           |

TControl

                                     |                 |

                            TWinControl  TGraphicControl

                                     |                 |

                   TScrollingWinControl TCustomLabel

                                     |                          |

                            TCustomForm           TLabel

                                     |

                              TForm

说说TWinControl类:此类是所有窗口控制组件的基础类,它具有下列特性,只有继承了此类的组件,才会具有这些特性。

Ø  程序运行时,可接受程序的焦点。如TLabel不能通过Tab来移动到该控件。

Ø  可作为其他控制组件的父类。

Ø  拥有handle属性。

然而并非所有继承自TWinControl的控件都有以上所有属性,有些仅有以上部分属性。

二、TForm的属性

1、继承自TComponent(组件)

    1ComponentCount:只读。该组件实体内部拥有的组件数量,运行时dock(附着)到该组件实体的其他控制组件,不计入总数。如form拥有多少控件。

2ComponentIndex:只读。指出该组件在其父类所有组件中的位置编号,以0开始。Form上有好多个控件,一般使用时,用的是formComponentCount属性和form子控件的componentindex属性。

3Components定义:property Components[Index:Integer]:TComponent;

使用此属性配合ComponentIndex的属性值可操作其拥有的任意一个控件,而不必使用其其拥有的控件的name。如form1拥有label1edit1,假设label1componentindex0,则有两种方式控制这俩控件:①form1.Components[0].captionlabel1. caption

4ComponentState:只读。指出该组件当时所处的状态,此值是一个集合值。

5Owner:只读。指出拥有它的组件,换言之,即负责析构该组件的是哪个组件。

6Tag:读写。一个integer类型的值,由程序员自由使用。其意义如同一个全局变量。

2、由TControl继承来的属性

    1Action:参考第10ActionList

2Align:读写。决定该组件在父类里如何排列。如form1的父类是整个屏幕,其Align属性决定了在桌面如何排列。

3Anchors:读写。决定该组件以何种方式固定在它所属的父类里。Anchors属性有四个项目:akLeftakRightakTopakBottom。四者分别对应到该组件的4个边,且以上四者的值为TrueFalse。当某项目的值为true时,表示当该组件的父类改变大小时,该项目所对应的边与其父类的边的距离保持不变。FormAnchors属性值无意义(即使改变也看不出),其他组件的Anchors有用。

4AutoSize:若为true,则该组件的大小会随时调整为正好容纳得下内容的尺寸。

5BiDiMode:一般默认文字显示是自左向右,若程序在由右向左模式下时,就可更改它使符合要求。

6BoundsRect:只读。表示该组件四方外线与其父类在位置上的关系。

7color:决定该控制组件的背景颜色。

8Constraints:读写。决定该组件大小的限制值是什么:可设置高度最大值和最小值,宽度最大值和最小值。

9Cursor:光标移到该组件时,光标的外观图形。

10)关于拖拽:过程是先使得某个组件支持拖拽,再选择拖拽的方式(手动还是自动),要拖拽并放置到另一个组件上时,需设置该组件使得其支持放置。

DragKind:决定该组件以正常方式拖拽时可以有附着的行为。DragKind属性值有两种:dkDrag(仅对支持拖拽的组件(form)只做拖拽不附着)dkDock(该组件即使不是浮动的组件(buttonlabel)也可在执行中拖拽,且会附着在最后停滞的父类上)DragMode:决定该组件开始拖拽(drag-and-drop)或拖放并附着(drag-and-dock)的操作。其值有两种:dmAutomatic(鼠标拖动该组件时,会自动开始拖拽行为的操作)dmManual(无法直接拖拽,仅限于执行BeginDrag时,每调用一次,可拖拽一次)DockSite:指定该组件是否可作为其他组件拖拽并附着其上的目标。

LRDockWidth:该组件以水平方式附着到父类时该组件的宽度值。

TBDockHeight:该组件以垂直方式附着到父类时该组件的高度值。

UndockWidthUndockHeight:该组件在浮动状态下的宽度和高度。

HostDockSite:指出该组件所附着的组件是什么。若未曾有过附着(dock)的行为,即该组件在设计时就放置在父类上,则此值为nil

FloatingDockSiteClass:指定该组件的临时父类的类型。当拖拽一个组件令他附着在某个父类前,在该组件脱离原本的父类,而尚未附着到另一个父类前,该组件处于浮动的状态。而组件无法独自浮动在窗体外,因此当组件处于浮动状态时必须有一个临时父类来收纳该组件。而该暂时父类会在该组件一脱离父类时,自动建立,供该组件附着,等该组件附着到目的地父类时,此暂时父类自动析构。

11)关于字体。Font:设置该组件上的文字属性。ParentFont:组件的font属性是否需要参照其父类的font属性。为true时,与父类相同;若更改组件的font值,则此属性自动变为false,即不再参照其父类。

12)鼠标放在某组件上时的提示文字。要允许提示(ShowHint),然后显示提示文字(Hint)

13PopupMenu:设置该组件的弹出式菜单。

14ControlState:指出该组件在运行时的状态。ControlState:决定该组件的类特征,比如是否可接受鼠标点击消息。

3、由TWinControl继承的属性

1AlignDisabled:只读。该组件是否允许其内的子组件重新布置。通过EnableAlignDisableAlign来设置。

2BorderWidthBrush:组件的边的宽度;画该组件背景的画刷的颜色和花纹。

3ControlCount:直接放置在该组件(父类)中的组件数量。只有可作父类的组件才拥有此属性。且ControlCount属性必定比起Controls属性中最大索引大1

4Controls:列出直接放置在该组件(父类)上的所有组件。用法同ComponentCountComponents

5)关于附着。DockClientCount:附着在父类上的组件数量。VisibleDockClientCount:附着在父类上的可视的组件数量。DockClients:列出所有附着在父类上的组件。

6Handle:调用需要窗口处理的Windows API时,会用到此属性。

7)关于显示帮助。HelpContext:在该组件上按下F1时,显示的内容。HelpKeyword:为组件说明文件标题的关键字。HelpType:此组件说明文件的标题由ID编号还是关键字决定。

8)关于TabTabOrder:在该组件父类中,对Tab反应的顺序位置。TabStop:是否可用Tab键来选择该组件。

4、由TScrollingWinControl继承来的属性

1AutoScroll:该组件外框是否可自动产生滚动条。

2HorzScrollBarVertScrollBar:该父类的水平和垂直滚动条。

5、由TCustomForm继承来的属性

1Active:只读。指出该form是否拥有程序的焦点。

2ActiveControl:读写。决定程序焦点在该form的哪个组件上。

当程序焦点刚进入一个Form时,此FormActiveControl属性为True的控件接受焦点。一个Form中不会有两个组件其ActiveControl属性同时为True。当程序焦点要离开某个组件时,则在该组件的OnExit发生前,其ActiveControl属性会自动更新为False,而接受焦点的组件,其ActiveControl属性立即更新为True

3MDI窗体。ActiveMDIChild:指出焦点在该MDI窗体的哪个组件上。MDIChildCount:这个FormMDI窗体的数量。MDIChildren:列出此MDI Form的所有子窗体。

4)控件透明。AlphaBlend:指出此Form(包括其子组件)的颜色是否为透明色。为True时,透明。透明程度由AlphaBlendValue决定。当AlphaBlendValue属性值不超过5时,几乎看不到。

5)设置某个颜色变为透明色。TransparentColor:该Form(包括其子组件)是否可以有一种颜色以完全透明的状态显示。TransparentColorValue:指出该Form内要显示为透明的颜色。

6)设置border外观。BorderIcons:指定显示在该Form的标题栏上的Icon。属性定义:

type TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);

TborderIcons = set of TborderIcon;

属性应用:Form1.BorderIcons := [biSystemMenu, biMaximize, biHelp];

BorderStyle:指定该Form在外框上的外观和行为展现。属于TformBorderStyle类,其值有以下六种:

bsDialog:外框固定,为标准对话框。bsSingle:外框固定,但拥有标准单线外框线条。

bsNone:外框固定,无外框线条且无标题栏。bsSizeable:拥有可改变大小的外框。

bsToolWindow:和bsSingle相似,但该FormCaption没有图示。

7)

Canvas:提供对该组件可绘图范围的处理。有些组件表面的可用范围(client area)可在其上绘图,那是一个抽象的绘图空间,此范围可视为一块画布,而Canvas属性则提供了在该组件可绘范围内绘图的行为。

Floating:只读。指出该Form是否附着到其他窗口上。一个窗口要么为浮动窗口,要么附着(dock)在其他窗口上。

FormStateFormStyleForm当时的状态和样式。

IconForm标题栏的图标,此图标在Form最小化时显示。

KeyPreview:决定该Form是否可在控制组件前接受键盘消息。

         如:Form1上放置多个Edit控件,让用户在Edit控件输入文字后,按“Enter”键直接让焦点进到下一个Edit,就需设置此属性为True。在FormKeyDown事件中:

if key = 13 then

         Form1.Perform(WM_NEXTDLGCTL,  0,  0);

Menu:读写。决定该Form的主菜单。程序设计时,第一个放到该Form上的MainMenu组件会自动设为主菜单。若放了多个MainMenu控件,则需设置此属性。

ModalResult:读写。此值为ShowModal的返回值。此属性默认为mrNone。当调用一个formShowModal后,若将此值设置为任何非0值,则会立即关闭该Form

Parent:读写。作用:当设置一个FormParent后,其浮动范围不能超出其父类的可用范围。

ParentBiDiMode:决定此属性是否参考父类的BiDiMode属性。

依据屏幕分辨率调整Form大小:Scaled:决定该Form大小是否依据PixelsPerInch属性所设置的值变化。PixelsPerInch:读写。此Form设计时所在系统的分辨率。

ScaledTrue时,若设置PixelsPerInch不同于系统,则会据此值重设该Form的大小。

Position:该Form的大小及其在屏幕上的位置。

WindowMenu:指定MDI父窗体的窗口菜单。

WindowState:代表该Form如何显示在屏幕上。如最大化最小化:wsMinimizedwsMaximized

二、TForm的方法:

1、由TObject继承来的方法。

关系调查:

         ClassName:以字符串形式返回该对象所属实体的类名称。

         ClassNameIs:判别该对象是否属于某个类。当传入值等于ClassName的返回值则为True

ClassParent:该对象所属类的父类。

InheritedFrom:判断两个类之间是否有继承关系。

对象销毁:

         Free:释放对象实体所占内存。当对象变量的值为nil,即未建立实体时,可用Free。不要在某对象的事件区,使用自己的Free方法。如不要在Form1OnClick中,调用该Form Free方法。

         Destroy:与Free区别:不可对无实体变量执行Destroy

CleanupInstance:不要直接调用,对象析构时,自动调用。

FreeInstance:不要直接调用,对象析构时,自动调用。

对象建立:

NewInstance:所有的建立方法都会自动调用NewInstance,勿直接调用。配置内存给该类的类型实体,并返回新实体的指针,内部调用InstanceSize方法。

InstanceSize:以字节大小返回该对象类每个实体所占的空间大小。

InitInstance:不要直接调用。

2、由TPersisteng继承的方法

Assign:复制另一个相似对象的内容。TForm类的这个方法必须override后再使用。

3、由TComponent继承的方法

关系调查

         HasParent:是否有父类。

对象销毁

DestroyComponents:不要直接调用。销毁该对象所拥有的所有组件。

Destroying:不要直接调用。该组件及其所拥有的组件都将被销毁。

子组件更改:

         InsertComponentRemoveComponent:将某个组件加入为这个组件所有的子组件。将某个组件由该组件的Components属性值中删除。

         IsComponentOf:指出该组件是否为某个接口的实现。

ExecuteActionUpdateAction:不要直接调用。

4、由TControl继承的方法

还记得介绍属性的时候说的拖拽吗?DragModedmManual时这些方法就派上用场了。

BeginDragEndDragDraging(判断该组件是否处于拖拽状态)DragDrop(出发该组件的OnDragDrop事件)

移动组件位置:显示前后位置、附着行为、坐标更改

BringToFront:将该组件放置在它所在父类中所有组件之前。

SendToBank:把该组件放置在它所在父类中所有组件的最下层。

ClientToScreen:返回该组件内的某一坐标点在屏幕坐标上的位置。

ScreenToClient:将屏幕上的某一坐标点位置,转为该组件可用范围内的坐标位置。

ParentToClient:将该组件父类的某个坐标点位置转为该组件可用范围内的坐标位置。

Dock:勿直接调用。Dock行为的内部操作。

ManualDock:作该组件的Dock行为。

ManualFloat:令该组件解除Dock状态。

ReplaceDockedControl:让该组件附着到另一组件所附着的位置。

文字显示:显示方式(由右向左还是由左向右)、文本内容

DrawTextBiDiModeFlags:返回标志,表面当时该组件的BidiMode属性的设置。

DrawTextBiDiModeFlagsReadingOnly:指出该组件的文字是否要由由右向左读。

GetControlsAlignment:指出该组件内的文字以何种方式排列。

UseRightToLeftAlignment:文字显示由右向左。

UseRightToLeftReading:指出该组件内的文字读取时是否使用由右向左。

UseRightToLeftScrollBar:指出该组件的垂直滚动条是否出现在左边。

IsRightToLeft:指出该组件是否要倒转为由右向左。用于中东地区时有用。

GetTextBuf:取得该组件的文字,并将文字拷贝到buffer中,然后返回所拷贝的字符串的数量。

GetTextLen:返回该组件的Text属性值的长度。

SetTextBuf:设置该组件内的文字。

 

Perform:响应该组件是否接受了特定的Windows系统信息。Perform可以依序处理Windows的信息队列,并立刻响应信息给该组件的窗口程序。

Refresh:重画屏幕上的组件。它会调用Repaint方法。

5、由WinControl继承来的方法。

BroadCast:给窗口控件内的所有组件广播消息。传入的参数即代表要发送的消息。

ControlAtPos:返回在该组件内部某个位置上的组件。

ContainsControl:辨别某个组件是否位于该组件之内。

排序:DisableAlignEnableAlignReAlign

DockDrap:触发该窗口的OnDockDrap事件

子组件位置更改:少用。尽量通过更改Parent属性值实现。

InsertControl:将某个组件加入到父类的Controls属性值之列。

RemoveControl:将某个组件由此父类的Controls属性值之列删除。

 

Invalidate:重画该组件。当该组件内部有两个以上的区域需重画时,Invalidate可一次重画整个窗口,可防止多次重画所引起的闪烁现象。

RePaint:重画。会调用InvalidateUpdate来重画该组件。

Update:立即处理和绘图相关而未解决的信息。

UpdateControlState:勿用。显示此窗口控制组件,令其所有的父类作适当的调整。

PaintTo:将此窗口控制组件画到所指定的画布上。

ScaleBy:缩放该父类及其内组件的大小。

SetBounds:一次设置好此窗口控件的尺寸。

6、由TScrollingWinControl继承来的方法

当重新排列一个Form上的组件时,可先DisableAutoRange(停止该组件自动产生霍消除滚动条的能力)待完成其内组件排列的操作后,可使用EnableAutoRange再打开该组件自动处置滚动条的能力。

ScrollView:令滚动条自动卷至可见到该Form中某组件的位置。

7、由TCustomForm继承来的方法

Close:若程序的主窗体调用close,则会自动调用ApplicationTerminate方法终结整个程序。

CreateCreateNewCreate创建的窗体和原来的一样,而CreateNew是创建一个空白的。

IsShortCut:当form获得焦点时,若用户按下快捷键,会自动调用此方法。若设置了某个快捷键,则IsShortCut会执行适合的命令,并返回True;反之若该按键不属于快捷键,则返回False

MouseWheelHandle:发送鼠标滚轮消息给合适的组件。

ReplaceDestroy:最好用Free取代这两个方法。因无对象实体时报错。

ShowShowModal:显示。以模态显示。

8TForm新增的方法:都跟MDI有关

ArrangeIcons:布置MDI子窗体在最小化时的图标。

Next:让该Form的下一个MDIForm成为作用中的(active)窗体。

Previous:前一个。

Title:令其内的MDI子窗体,以相同大小布满该Form的可用范围。仅对非最小化的子窗体有用。

三、TForm的事件

对事件要探究其触发的时机。

1、由TControl继承来的事件

Resize

OnCanResize:复位操作时触发。

OnConstraintResizeOnCanResize发生后。

OnResize:该组件完成重新调整大小的操作后,立即触发。

ClickOnClickOnDbClick

MouseOnMouseMoveOnMouseUpOnMouseDown

OnContextPopup:按下右键,弹出菜单显示出来时,触发。

Dock

OnDragDrop:当用户将拖拽中的某个对象放置在该对象范围内时,触发该对象的OnCanResize

OnDragOver:当被拖拽的组件经过此组件范围时,触发。

OnStartDock:当用户开始拖拽该组件时,触发该组件的OnStartDock

OnEndDock:拖拽结束时触发。

2、由TWinControl继承来的事件

Dock

OnDockDrop:其他组件附着到该组件是触发。DockSiteTrue,被拖拽组件其DragKinddkDock时才会触发此事件。

OnDockOver:经过时触发。限制条件同上。

OnUndock:当用户试着把dock到此父类内的某组件删除时,会触发此父类的OnUndock

OnGetSiteInfo:此事件在OnDockDrop之前发生,即在暂时浮动状态下,被鼠标拖拽之时发生。

KeyBoardOnKeyDownOnKeyUpOnKeyPress(按住时)

MouseOnMouseWheelOnMouseWheelDownOnMouseWheelUp

3、由TCustomForm继承来的事件

OnActivate:当该Form成为作用中的(active)窗体时触发。

OnDeactivateForm失去焦点时触发。

显示隐藏:

一个窗体建立到显示发生的事件:OnCreate->OnShow->OnActivate->OnResize->OnPaint

OnHideOnDestroy

 

OnShortCut:按下键盘按键时触发。

四、TLable的类成员

仅介绍不同于TForm的属性。分为两类:由TGraphicControlTCustomFormLabel继承。

TCustomFormLabel继承来的属性

AlignmentLabel组件内文字在水平方向的分布方式。

TGraphicControl继承来的属性

LayoutLabel组件内文字在垂直方向的分布方式。

AutoSize:该Label是否依其Caption文字长度自动改变其宽度。

WordWrap:该LabelCaption文字长度超过其Width时,是否会换行显示。换行需AutoSizeTrue

FocusControl:指定和该Label关联的窗口控制组件。当用户按下该Label设置的快捷键时,FocusControl所指定的窗口组件,会于此时获得程序的焦点。

ShowAccelChar:决定该Label文字中的“&”如何显示。当该LabelShowAccelCharTrue时,其Caption中的“&”作为一个下划线显示。此时若希望Caption中有“&”,则需写成“&&”。而有下划线的字符就是该Label设置的快捷键。若为False,则显示“&”。

10章标准组件介绍及其实例

1Frames组件

若没有现成的Frames组件,需先File->New->Frame来建立一个Frame。点选Frames组件后,会打开一个对话框,列出包含的所有Frame。所选择的Frame会成为窗体上的组件。

2MainMenu组件

Items:用来描述MainMenu菜单内的项目。

Images:列出可放在选项文字旁的图标。前提是该程序拥有ImageList组件,才能以某个ImageList组件为此MainMenuImages属性。这些只是允许主菜单选择图标。设置Item项的图标还需选中该Item,然后设置其ImageIndex值。注意:设置图标后,快捷键的下划线会消失,但仍有用。

设置快捷键:Caption属性加入‘&’可设置快捷键。另一种方式:ShortCut属性中选择(此种方式适用于菜单以中文显示时)

分割线:将某个项的Caption属性设为‘-’。

选择“222”,然后右键选择“Create SubItem”即可创建右侧下拉菜单。

 

 

 

 

3PopupMenu组件

两步:给组件设置哪个弹出菜单(通过属性“PopupMenu”来设置),设计PopupMenu

快捷键:只能通过ShortCut设置。Caption中‘&’只是用来显示下划线,不具有快捷键的功能。

4Label组件

5Edit组件

常用属性:

AutoSelect:该Edit取得focus时,其内所有文字是否会自动被选中。

CanUndo:只读。可让组件恢复到某些改动行为前的状态。

HideSelection:当focus离开此组件时,是否放弃所选择的文字。

Modified:用户是否改过其内文字。

PasswordChar:设置其内文字显示在屏幕上的外观。若为#0:直接显示;#1#2……:以空格代替;#:以#代替;*:以*代替;若为2:则以2代替。以此类推。

SelLength:指出所选择的文字数量。

SelStart:指出选中文字的第一个字符在所有文字中的排序。

SelText:代表所选择的文字内容。

常用方法:

         Undo:恢复到改动前。

ClearUndo:撤销掉Undo缓冲区的内容,则将无法恢复到改动前的状态。

CopyToClipboard:将选择的文字以CF-TEXT格式拷贝到剪贴板中。

CutToClipboard:将选择的文字以CF-TEXT格式剪贴到剪贴板中。

PasteFromClipboard:将剪贴板里的内容贴到该组件编辑区中光标处。

SelectAll:选择所有。

6Memo组件:多行的文字编辑块。

常用属性:

CarPos:光标在该编辑区内的坐标位置。

Lines:容纳此memo拥有的每行文字。Lines本身属于一种内建类(TStrings),它拥有以下常用方法:AddAppendInsertDeleteClearMoveSaveToFileLoadFromFile

WantReturns:决定在Memo文本内按enter键是否会换行。

WantTabs:是否会跳格。

WordWrap:其内文字是否以多行方式显示。

常用方法:

ClearClearSelectionCopyToClipboardCutToClipboardPasteFromClipboardSelectAllUndo等。

7CheckBox组件

常用属性:

Alignment:决定文字在前还是选择框在前。

AllowGrayed:为True时,此组件有三种状态:正常选中、灰色、正常未选。

Checked:是否选中。

8RadioButton组件

         同一父类内,不可能有两个同时被选中。可通过更改其父类来实现同时选中。

9ListBox组件

能建立一个可自动产生滚动条的列表栏,里面每行文字都是一个选项。

常用属性:

Columns:直接可见的列数。

ItemIndex:所选选项在选项栏中的序号。

Items:和Memo组件的Lines同属于Tstrings类。

MultiSelect:是否可多选。

SelCount:指出所选取选项的数目。前提是MultiSelectTrue

Selected:检验某个选项是否被选中。

Sorted:指出ListBox中的选项是否按照字母属性排列。

10ComboBox组件:下拉式的文字列表。

常用属性:

ItemIndex:被选取项目的序号。

Items:同ListBox

SelLengthSelStartSelText:同Edit

11ScrollBar组件

         可建立一个供用户改变某组件可见范围的滚动条。

常用属性:

Kind:水平还是垂直滚动条。

LargeChange:点击滚动条左右两边的空间,或按下Page upPage Down时,滚动条每次移动的距离。

SmallChange:点击滚动条左右两端箭头按钮时,滚动条每次移动的距离。

MinMax:滚动条所能滑到的最小、大位置。

PageSize:此滚动条的宽度。必须介于MinMax之间。

PositionScrollBar当前位置。

12RadioGroup组件:专门用来容纳RadioButton的父类。只能通过其Items属性来为其放置RadioButton。优点:自动排列RadioButton

常用属性:

Columns:拥有几列RadioButton

ItemIndexRadioGroup中被选取的RadioButton的序号。

Items:列出此组件内的RadioButton选项。

13ActionList组件:可建立一个事件的集合,以集中管理程序对用户操作(Action)的响应。

常用属性:

ActionCount:指出此ActionList包含的操作项(Action)的数量。

Actions:包含此ActionList的操作项,且利用索引值可指定ActionList内的某个操作项。此属性值属于TCntainedAction类,此类对象拥有两个常用事件:OnExecuteOnUpdate

举例:form上放置一个buttonActionList。设计ActionList,并实现OnExecute事件。然后将buttonAction设置为实现的ActionList,然后你会发现该buttonOnClick会自动关联到该ActionListOnExecute

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐