delphi控件属性⼤全-详解-简介button 组件:
CAPTION 属性:⽤于在按钮上显⽰⽂本内容
Cancel 属性:是否设置成默认的取消按钮,当设置为真的时候(true)按ESC触发改按钮的事件!Default 属性:是否设置成默认的确认按钮,当设置为真的时候按ENTER键的时候触发事件
Hint 属性:设置当⿏标在按钮上短暂停留是显⽰的提⽰内容。
Showhint 属性:是否显⽰提⽰内容默认为假!
Bitbtn 组件
Kind 属性:他的值就是位图按钮组件上所显⽰的图标!
GLYPH 属性:⽤于在位图按钮上显⽰加载后的位图图形!
Numclyphs 属性:⽤于指定位图按钮上所能使⽤的位图个数!
Layout 属性:⽤于指定位图在位图组件上的位置!
Speedbutton 组件
Flat 属性:是否具有OFFICE 2000的风格
Groupindex 属性:设置分组。
DOWN 属性:设置改按钮是否处于按下状态
Allowallup 属性:设置同⼀组的快速按钮是否具有同时弹起的状态。
Radiobutton 组件
Checked 是否处于选中状态
Alignment ⽤于设置选择框和⽂字的排列⽅式!
Checkbox 组件
Allowgrayed ⽤来设置当前组件被选种时,是否为变灰状态!
State 设置当前复选框的状态。
⽂本类组件
label 组件
Alignment ⽤来设置标签中的⽂本在⽔平⽅向的排列⽅式!
AUTOSIZE ⽤来设置标签的尺⼨⼤⼩,是否随CAPTION属性中⽂字的字体⼤⼩⽽进⾏⾃动调节!Font ⽤来设置显⽰⽂字的字体,颜⾊!
Layout ⽤于设置标签中的⽂本在垂直⽅向的排列⽅式!
WORDWRAP ⽤于设置是否⾃动换⾏!
EDIT组件
Charcase ⽤于设置组件中⽂字的⼤⼩写显⽰⽅式!
TEXT ⽤于显⽰编辑框中的⽂字内容
Modified ⽤来判断edit组件⾥的⽂字内容是否被修改过,若为假,就是没有被修改过!Passwordchar 设置显⽰密码字符!
memo组件
lines ⽤于访问框中每⼀⾏的内容
Maxlength 设置⽂本框中最⼤的⽂字输⼊量
Scrollbar 设置是否需要滚动条
Wantretruns ⽤于设置在框中按’enter’键是否起回车作⽤
Wanttabs ⽤于设置在框中按’tab’键是否起移位作⽤。
Maskedit 组件
Editmask 属性⽤于设置所要显⽰⽂字的格式。
Labeledit 组件
Editlabel ⽤于对labeledit组件的标签部分进⾏设置!
Labelposition ⽤于设置标签放置的位置
Labelspaceing ⽤于调整标签和编辑区之间的间距,单位是象素
组合框组件
combobox 组件
dropdowncount ⽤于设置下拉后的列表框所有显⽰的列表项的数⽬!
Style ⽤于设置组合框显⽰时的样式,有以下五种样式
1. csdropdown: 标准格式,⽤户可以在编辑框中输⼊,每个列表项的⾼度相同
2. csdropdownlist: 只有列表框,没有编辑框,每个列表项的⾼度相等
3. csownerdrawfixed: 有编辑框和列表框,但⽤户不能在编辑框中输⼊,每个列表项的⾼度由itemheight 属性来指定
4. csownerdrawvariable: 有编辑框和列表框,但⽤户不能在编辑框中输⼊,每个列表项的⾼度可以不同
5. cssimple:只有编辑框,没有列表框
droppeddown 表⽰列表框是否已被下拉!
Timer
Enabled 表⽰记时器是打开还是关闭
Interval 设置两个ontimer事件的时间间隔,单位是毫秒,最⼤值允许是:32767
添加代码:
form1.Label1.Caption:='今天是'+formatdatetime('yyyy-mm-dd',now); //
form1.Label2.Caption:='现在是'+formatdatetime('hh:mm:ss',now);
now 获取单前系统时钟!
使⽤对话框(消息框)函数与对话框过程
对于⼀些简单信息的输⼊和输出,可以使⽤对话框.DELPHI提供的内部对话框有两种:
1. 信息对话框使⽤过程 SHOWMESAGE, SHOWMESSAGEFMT,函数MESSAGEDLG. MESSAGEDLGPOS,CREATEMESSAGEDIALG.
2. 输⼊对话框使⽤函数INPUTBOX, INPUTQUERY.
1).SHOWMESSAGE与SHOWMESSAGEFMT过程
SHOWMESSAGE过程显⽰⼀个最简单的对话框,其语法格式为:
SHOWMESSAGE(信息内容);
说明:SHOWMESSAGE过程显⽰的对话框以应⽤程序的执⾏⽂件名作为标题,对话框只含有⼀个OK按钮,单击该按钮对话框即关闭并返回. SHOWMESSAGEFMT过程
语法格式为:
showmessagefmt(信息内容,参数组);
说明:此过程与上⼀个过程其本相同,只是参数多了格式化的字符.
例: showmessagefmt(‘%s已进球%d个!’,[‘公⽜队’,11]);
2)MESSAGEDLG与MESSAGEDLGPOS函数
这两个函数可以显⽰⼀个信息对话框,并等待⽤户的响应.
MESSAGEDLG函数
语法格式为: 变量名:=MESSAGEDLG(信息内容,类型,按钮组,HELPCTX);
说明: 信息内容是显⽰在对话框中的信息.
类型是对话框的类型,其取值有:
mtwarning含有感叹号的警告对话框.
Mterror含有红⾊叉符号的错误对话框.
Mtinfomation含有蓝⾊I符号的信息对话框.
Mtconfirmation含有绿⾊?号的确认对话框
Mtcustiom不含图标的⼀般对话框,对话框的标题是程序的名称.
按钮组指定对话框中出现的按钮组,其中出现的按钮与参数有:
MBYES YES按钮,函数返回值为:6
MBNO NO按钮,函数返回值为:7
MBOK OK按钮,函数返回值为:1
MBCANCEL CANCEL按钮,函数返回值为:2
MBHELP HELP按钮.
MBABORT ABORT按钮,函数返回值为:3
MBRETRY RETRY按钮,函数返回值为:4
MBIGNORE IGNORE按钮,函数返回值为:5
MBALL ALL按钮,函数返回值为:8
MBNOTOALL NOTOALL按钮,函数返回值为:9
MBYESTOALL YESTOALL按钮,函数返回值为:10
按钮组可以组成某种形式,如[MBYES,MBNO]表⽰对话框中出现两个按钮:”YES”和”NO”;也可以常量形式如,MBOKCANCEL表⽰对话框中出现两个按钮:”OK”和”CANCEL”
例: 密码框.
procedure TForm1.Button1Click(Sender: TObject);
var
x:integer;
begin
='123' then
showmessage('密码正确,欢迎进⼊!')
else
begin
x:=messagedlg('密码错误,请重新输⼊!',mterror,[mbyes,mbno],0);
if x=6 then
begin
<:='';
edit1.SetFocus;
end
else
close;
end;
end;
3. MESSAGEDLGPOS函数
调⽤MESSAGEDLGPOS函数,可以屏幕的指定位置显⽰信息对话框,其语法格式为:
变量=MESSAGEDLGPOS(信息内容,类型,按钮组,,HELPCTX,X,Y);
它⽐MESSAGEDLG只是多了⼀项功能,即具有X,Y显⽰位置坐标.
4. INPUTBOX与INPUTQUERY函数
1)INPUTBOX的作⽤为显⽰⼀个输⼊对话框.
格式为: 变量:=INPUTBOX(对话框信息,信息内容,默认内容);
对话框信息为指定对话框的标题.
信息内容为指定在对话框上出现的⽂本.
默认内容为在出现对话框时⾃动出现的输⼊内容.
2)INPUTQUERY函数
与INPUTBOX相似出现⼀个输⼊框.只是对CANCEL按钮(退出事件)另作处理,将返回⼀个布尔值.
格式为: 变量=INPUTQUERY(对话框标题,信息内容,字符串变量);
在出现对话框时如果单击OK输⼊框中的值将赋值到变量中,并且函数返回TRUE;若⽤户单击CANCEL按钮,变量值不变并返回FALSE;可以根据返回值的不同作出判断.
例:
procedure TForm1.Button1Click(Sender: TObject);
var
x:integer;
begin
x:=strtoint(inputbox('求和','请输⼊求和值','0'));
if x=strtoint(edit1.Text)+strtoint(edit2.Text) then
edit3.Text:='正确'
else
edit3.Text:='错误';
end;
分组控件GROUPBOX.
也可称之为框架.
⼀般来说此框架的作⽤是⽤于对某⼀组界⾯的分类,没有实质作⽤.
例如:
⾯板PANEL
此⾯板的功能作相似与GROUPBOX。它有多种三维效果.
主要属性有:
BEVELINNER:图形⾯板内层边框斜⾯的类型.
BEVELOUTER: 图形⾯板外层边框斜⾯的类型
Bevelwidth:斜⾯的宽度.
BORDERWIDTH:内层与外层边框之间的宽度.
摘⾃:Delphi www ⼤全
译者:
Delphi提供了开放的API,是程序员可以增强Delphi IDE的功能。共有4种开放⼯具的APIs:属性编辑器、控件编辑器、专家/导航和版本控制系统。本⽂讨论属性编辑器和控件编辑器,给出的例⼦说明如何写⾃⼰的Delphi属性、控件编辑器。
属性编辑器
属性编辑器是Delphi IDE的扩展。这听起来⾮常复杂和困难,但是实际上是很简单的。我们可以为枚举类型构造⼀个属性编辑器。记得TForm的颜⾊属性吗?当我们想改变它的值,看到了下拉框中列出了所有的可选值。那就是枚举类型的属性编辑器,我们也同样能做到,只需要⼏⾏代码,没什么特别的。注意到程序员并没有写⼀个属性编辑器,⽽是通知Delphi使⽤枚举类型的属性编辑器,为它的枚举特别定义的。
现有的属性编辑器
在我们搞清楚属性编辑器到底内部是什么之前,先看看Delphi中已有的。开始⼀个新⼯程,在implementation中加⼊"uses DsgnIntf;"编译,打开browser查TPropertyEditor(只要输⼊TPrope):
如果没算错的话,在DSGNINTF中注册了⾄少21个客户属性编辑器(custom property editors),注意:
事实上,还有更多的属性编辑器在其他
单元中,例如C:\DELPHI\LIB\PICEDIT.DCU.中的TPictureEditor。
TPropertyEditor
对象察看器为所有的属性提供缺省的编辑。我们可以使⽤不同的⽅法重载这种⾏为,来使⽤特别的属性编辑器(21种预制的属性编辑器都扩充了对象察看器来处理其属性)。那么,究竟是怎样⼯作的呢?它是起源⼀个基类,我们必需重载已达到我们的⽬的。五个新的Delphi 2.0的⽅法-其中三个是变量相关的-在编译开关{$IFDEF WIN32}中⼀保证⼀下代码在所有的delphi版本中适⽤。
Type TPropertyEditor = class protected function GetPropInfo: PPropInfo; function GetFloatValue: Extended; function GetFloatValueAt(Index: Integer): Extended; function GetMethodValue: TMethod; function GetMethodValueAt(Index: Integer): TMethod; function GetOrdValue: Longint; function GetOrdValueAt(Index: Integer): Longint; function GetStrValue: string; function
GetStrValueAt(Index: Integer): string; {$IFDEF WIN32} function GetVarValue: variant; function GetVarValueAt(Index: Integer): variant; {$ENDIF} procedure Modified; procedure SetFloatValue(Value: Extended); procedure SetMethodValue(const Value: TMethod); procedure Set
OrdValue(Value: Longint); procedure SetStrValue(const Value: string); {$IFDEF WIN32} procedure SetVarValue(const Value: variant); {$ENDIF} public destructor Destroy; override; procedure Activate; virtual; function AllEqual: Boolean; virtual; procedure Edit; virtual; function GetAttributes: TPropertyAttributes; virtual; function GetComponent(Index: Integer): TComponent; function GetEditLimit: Integer; virtual; function GetName: string; virtual; procedure GetProperties(Proc: TGetPropEditProc); virtual; function GetPropType: PTypeInfo; function GetValue: string; virtual; procedure GetValues(Proc: TGetStrProc); virtual; procedure Initialize; virtual; {$IFDEF WIN32} procedure Revert; {$ENDIF} procedure SetValue(const Value: string); virtual; {$IFDEF WIN32} procedure ValueAvailable: Boolean; {$ENDIF} property Designer: TFormDesigner read FDesigner; property PrivateDirectory: string read GetPrivateDirectory; property PropCount: Integer read FPropCount; property Value: string read GetValue write SetValue; end; TPropertyEditor编辑对象察看器中⼀个或是⼀串控件的⼀个属性。属性编辑器根据属性的类型⽽被创建,由RegisterPropertyEditor注册的类型决定。稍候有⼀个指⽰程序员如何使⽤这些⼯程的例⼦。所有的published属性都将出现在对象察看器中,当设计者进⾏读写属性的值时,其属性编辑器(为这种属性类型的)将被使⽤。
在以下的时间⾥,我们将只注意⽅法中的需要被重载的重要部分,属性编辑器的⾏为。
GetAttributes
这是最重要的⽅法,他决定了属性编辑器的类型和⾏为。有三种属性编辑器(除了缺省的编辑框):下拉框(我们在前⾯提到过的),分属性列表和对话框。
GetAttributes返回TPropertyAttributes类型,包含了⼀下内容:
paValueList:属性编辑器能返回属性的枚举列表。如果GetValues调⽤过程附带值,这个属性必需设置。这将使在对象察看其中的属性的右边出现下拉按钮。
paSubProperties: 属性编辑器有⼦属性时,将在当前属性下⽅显⽰成标准的⼤纲格式。如果GetProperties产⽣属性对象时这个属性必需设置。
paDialog:表⽰这个编辑⽅法将产⽣对话框。这将在对象察看其中的属性右边出现'...'按钮。
paSortList: 对象察看器将把GetValues返回的列表按照字母排序。
paAutoUpdate: 每当编辑发⽣改变是调⽤SetValue⽅法,⽽不是改变别提交时。例如Caption属性。
paMultiSelect: 允许多个控件被选择时显⽰属性的值。有些属性不适合多选的情况。例如Name属性。
没有caption属性的控件是
paReadOnly: 属性值不允许改变。
GetValue:返回属性的串值,缺省时返回'(unknown)',这应该被重载以返回适当的值。
GetValues:当GetAttributes返回paValueList时被调⽤。它必须为每⼀个属性所接受的值调⽤参数函数。TEnumProperty将在列举中传递所有的参数。
SetValue(Value):设置属性的值。属性编辑器必须能够知道调⽤哪⼀个SetXxxValue函数。如果字符串不是合适的格式或不是合法的值,属性编辑器应该产⽣⼀个例外,描述产⽣的问题。SetValue可以忽略所有的改变,允许通过Edit⽅法编辑所有的属性。例如Picture属性。Edit
当'...'按钮被安下或是属性被连击识别调⽤。这样,例如弹出⼀个对话框,通过更有效的⽅法,⽽不是简单的⽂本来编辑属性。例如Font属性。
TFileNameProperty
使⽤这⼏个重要的⽅法我们就能写出⾃⼰的属性编辑器了:为filename建⽴⼀个⼤卡⽂件对话框属性编辑器。我们得记住编写控件从本质来说是⾮可视化的任务,写书信编辑器并不复杂。我们需要制定⼀个我们说想要的'Dialog'类型,所以我们在GetAttributes中返回[paDialog]。然后,我们在Edit过程中处理,这次包含⼀个TOpenDialog来到任何存在的⽂件。
unit FileName; interface uses SysUtils, DsgnIntf; Type TFileNameProperty = class(TStringProperty) public function GetAttributes: TPropertyAttributes; override; procedure Edit; override; end; procedure Register; implementation uses Dialogs, Forms; function TFileNameProperty.GetAttributes: TPropertyAttributes; begin Result := [paDialog] end {GetAttributes}; procedure TFileNameProperty.Edit; begin with TOpenDialog.Create(Application) do try Title := GetName; { name of property as OpenDialog caption } Filename := GetValue; Filter := 'All Files (*.*)|*.*'; HelpContext := 0; Options := Options + [ofShowHelp, ofPathMustExist, ofFileMustExist]; if Execute then SetValue(Filename); finally Free end end {Edit}; procedure Register; begin RegisterPropertyEditor(TypeInfo(TFileName),nil, '', TFileNameProperty) end; end. 注意到我们调⽤属性编辑器的GetName函数来得到属性的名字。
属性编辑器需要注册过程(register)在delphi中来注册它本⾝(确切的说是在delphi应⽤程序中)。我们可以只为⼀个控件注册属性编辑器,也可以我所有的相同类型的属性注册。例如上⾯的例⼦TFileNameProperty就是为所有的控件做的。当然,属性编辑器必需安装了并且⾸先注册。
为了在Register过程中注册,我们需要调⽤RegisterPropertyEditor。它有4个参数:第⼀个是属性类型的类型信息的指针。这⾥,我们使⽤
内置的函数TypeInfo。第⼆个是这个编辑器应⽤的控件类型,如果为nil,这个编辑器为所有控件的所有给定的类型的属性。这⾥,我们希望属性编辑器为所有的控件的TFileName类型⼯作。所以只需要把第⼆个参数置为nil。第三个参数时属性的名字,这个参数只有在第⼆个参数指定了控件的类型的情况下才有作⽤。同样,我们把它置为空字符串。第四个参数属性编辑器的⾃⼰的类型,这⾥是TFileNameProperty。
安装属性编辑器和安装控件类似。这⾥,属性编辑器有⾃⼰的注册过程(不失为某个控件的属性编辑器,⽽是某个属性的)。⼀般来说,如果⼀个属性编辑器是为特别控件的特别属性,最好和控件⼀起注册。现在,我们只要把带有TFileNameProperty的单元FILENAME加到控件版中(delphi 1:使⽤Options | Install Components,Delphi 2中使⽤Component | Install。
安装之后,在任何控件的TFileName类型的属性,我们可以看到省略号,这表明对话框的属性编辑器已在这个属性中安装了。
如果点击省略号,导致Delphi 2弹出如下对话框。
只⽤了⼏⾏代码,我们就写出了为所有控件的TFileName类型的属性的TFileName属性编辑器。这仅仅是个例⼦,展⽰了属性编辑器在编写Delphi控件和程序的巨⼤潜能。
在我们研究下⼀个例⼦之前,来看看TPropertyEditor其他可以别重载的⽅法:
Activate
这个⽅法在属性被选中时别调⽤。这可能有⽤,决定某些属性被选中时的⾏为。只有GetAttributes返回paSubProperties和paMultiSelect 时,才学要准确的控制。
AllEqual
当超过⼀个控件被选中时别调⽤。如果这个⽅法返回true,调⽤GetValue,否则在对象察看其中显⽰空⽩。只有在GetAttributes返回paMultiSelect时被调⽤。
GegComponent
返回属性编辑器的控件的索引。当项获得控件时要⽤倒它。只有在GetAttributes返回paMultiSelect时,属性编辑器才能处理多个控件。GetEditLimit
返回使⽤这可以输⼊的值得字符串的个数,对象察看其内置的编辑器对这有限制,缺省值为255。
GetName
返回属性的名字,缺省时值时从类型信息中得到的。如果属性的值和对象察看其中所显⽰的不⼀样时才有必要重载。
GetProperties
应该在被编辑的属性的每⼀个⼦属性时重载,调⽤PropertyProc,并为每⼀个⼦属性传递⼀个新的TPropertyEditor。缺省时,假定没有⼦属性,PropertyProc不别调⽤。TClassProperty将为每⼀个published属性传递⼀个新的属性编辑器。TSEtProperty为每⼀个元素传递⼀个新的编辑器。
GetPropType
返回被编辑的属性的类型信息的指针。
Initialize
由属性编辑器创建之后,使⽤之前调⽤。属性编辑器经常被创建,但因为不是整个选择的公⽤属性⽽被抛弃,Initialize只有在对象察看器使⽤时,⽽不是被抛弃属性编辑器时调⽤。
以下是创建新的TPropertyEditor类其他⾮常有⽤的属性和⽅法
Name 属性
GetName返回的属性的名称。
PrivateDirectory 属性
是.exe或Delphi.ini指定的⼯作⽬录(Working Directory),如果属性编辑器需要辅助程序或是状态⽂件(模版、例⼦等),他们应保存在这个⽬录中。
Properties indexed property
TProperty代表了所有被属性编辑器编辑的控件,如果不只有⼀个控件,每个控件都有创建的相应的TProperty,⼀般来说,⽤不着它,因为Get/SetXxxValue⽅法能适当的处理它。
Value属性
作为字符串,GetValue返回属性的当前值。
Modified
调⽤它来指⽰属性的值是否改变了。SetXxxValue⽅法会⾃动调⽤,如狗我们直接调⽤SetXxxValue,我们必须同样调⽤Modified。GetXxxValue
得到属性中的⼀个属性的值。调⽤TRroperty适当的GetXxxValue⽅法来得到相应的值。
SetXxxValue
设置所有属性的值。调⽤TRroperty适当的GetXxxValue⽅法来得到相应的值。
TPicture 属性编辑器
好了,我们已经明⽩如何时属性编辑器的⾏为像对话框,只是我想起了Delphi中最令⼈急躁的属性编辑器:图形、图标、图像的picture编辑器。并不是它不⼯作,⽽是他并不友好。如果我们点击了Load按钮,在对话框中选这所需要的⽂件。问题是,在关闭对话框之前,我们⽆法看到⽂件中的内容。返回Picture编辑器,决定是否适合要求,所以我们呢不得不⼀次⼜⼀次的点击Load按钮。这在我们现在许多⼩⽂件中查时特别令⼈恼⽕。
我们需要预览功能,看看⽬录种的图形⽂件中的图像,这对我来说是⼀个新的属性编辑器(Borland公司没有提供PICEDIT.DCU的源代码,PICEDIT.DFM通⽤没⽤,所以我们只能写⾃⼰的Picture编辑器,⽽不是增强现有的。
TImageForm
⾸先,我们的实际想要的对话框或表单,我已经设计了如下所⽰的⼀个,右下⾓显⽰了所选择的⽂件的图形,根据我们的需要,甚⾄可以对图像进⾏拉伸(对⼩图像没什么价值,对⼤图形就有效了)。
Win31:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论