admin 管理员组

文章数量: 1086019


2024年3月8日发(作者:二叉树遍历的题目)

[PB]-控件(一)

////////////////////////////////

命令按钮-CommandButton-cb_1

图象按钮-PictureButton-pb_1

【事件】

◆Clicked

控件单击时

◆Constructor

在窗口的打开事件之前立即触发

◆Destructor

在窗口的关闭事件之后立即触发

◆DragDrop

当被拖动对象释放时触发

◆DragEnter

被拖动对象的中心通过边缘进入时触发

◆DragLeave

被拖动对象的中心离开时触发

◆DragWithin

被拖动对象的中心位于其内时触发

◆GetFocus

在接受焦点之前(在选中并激活之前)触发

◆LoseFocus

当失去焦点时触发

◆Other

当非powerbuilder事件消息发生时触发

◆RButtonDown

鼠标右键按下时触发

◆Help

【属性】

命令按钮有24个属性,图形按钮除了具有和命令按钮完全相同的24个属性外,还有另外5个属性用来设置图形和文字的显示。

▲Visible

取值为False时,不显示此按钮

▲Enabled

取值为False时,按钮为灰色,不可用

▲Default

取值为True时,表示该按钮是缺省按钮,当用户没有选择控件,按Enter键时触发该按钮的Clicked事件

▲Cancel

取值为True时,表示当用户单击Esc键时,可以触发按钮的Clicked事件

▲FlatStyle

////////////////////////////////

列表框-listBox

图形列表框-pictureListBox

【属性】

listbox有35个属性,picturelistbox有40个属性,其中35个和listbox完全相同,另外5个用来设定图形的相关属性。

▲Sorted,指定列表框中的内容是否排序,不管数字还是字符都按照字符处理,按照ASCII大小进行排序

▲VscrollBar、HscrollBar,指定当项目纵向或横向显示不下时,是否显示滚动条

▲MultiSelect,此属性为True时表示使用鼠标可以直接同时选中多项

▲ExtendSelect,也有进行多项同时选择的属性,但选择方法不同于MultiSelect属性,必须配合Ctrl或Shift按钮,当同时指定这两个属性时,ExtendedSelect属性将会屏蔽MultiSelect属性

▲DisableNoScroll,此属性为True时,不管是否必须要滚动条,都显示滚动条;为False时只有在项目多,需要显示滚动条时显示滚动条

▲ItemPictureIndex[]

integer类型的只读数组,使用该数组可以获取每个图片项目的索引。该数组通过AddItem()和DeleteItem()函数修改。

▲PictureHeight

integer类型,标识图片在控件中显示的高度。只有当前在控件列表中没有项目时才能设置该属性。

▲PictureWidth

Integer类型,图片在控件中显示的宽度。该属性缺省值为0,表示使用添加图片时图片的缺省宽度。在添加图片之前应该首先设置好该属性,这样添加的图片才能按照该尺寸显示。

▲PictureMaskColor

long类型,图片的标志颜色,当使用AddPicture函数添加图片时,新添加的图片使用该颜色。

▲PictureName[]

数组类型,保存的是在初始化时添加的图片文件名称。注意,这里保存的是初始化时的文件名,运行过程中删除或者添加的图片不会影响该数组的内容。

【事件】

这两个控件的缺省事件都是SelectionChanged,当重新选择了项目时,触发该事件。该事件和DoubleClicked事件是经常使用的事件,除了这两个事件以外的其他10个事件和命令按钮的同名事件触发时机完全相同

【函数】

listbox总共有35个函数,经常使用的有14个。

★Reset

该函数用来清除列表框中的所有项目,使用方法是:()。函数执行成功返回1,否则返回-1

★AddItem

在列表框最后添加一个项目,如果列表框的Sorted属性为True,则添加的项目重新排序。列表框的属性Item[]是一个记录列表框项目的数组,通过指定索引号可以获得项目的内容,但使用AddItem函数不能修改该属性。用该函数添加过项目以后就应该慎用Item[]了,否则会出现数组超界的运行错误,最好使用Text来引用列表框中项目的文字,该函数总是安全的。AddItem函数的使用格式是:m(string)

★TotalItems

该函数可以读取列表框中总共有多少个项目。它的使用格式是:tems()。该函数返回一个整型数值,表示列表框中总共有多少个项目。列表框的第一个项目的索引号是1,最后一个的索引号等于tems()。

★State

该函数用来表示判断指定索引号的项目是否选中,使用格式是:(index)。返回值为integer类型,1表示指定索引号的项目是选中状态,0表示指定索引号的项目没有被选中。

★Text

该函数用来读取指定索引号的项目的内容,使用格式是:(index)。返回一个string类型的数值。

和该函数功能类似,列表框还有一个Item[]属性也可以返回指定索引号的项目的内容。但是和Text函数与很大的区别,该属性反应的都是列表框在创建初的内容,如果列表框使用了Sorted属性或者用AddItem、InsertItem、Reset、DeleteItem、Dirlist等都不能修改Item[]属性,也就是说,在使用了这些函数或属性修改了列表框中的内容或项目的排列顺序后,Item[]属性返回的仍然是列表框创建时的信息。

★DeleteItem

删除指定索引号的项目。语法:item(index)。返回-1表示失败,NULL表示参数为NULL,其他正整数表示删除后列表框中的项目数

★InsertItem

在指定索引号前插入内容为item的项目。语法:Item(item,index)。返回-1表示插入失败,NULL表示有参数为NULL,其他正整数表示插入项目在列表框中最后的实际位置。

★Dirlist

语法:t(filespec,filetype,{statictext})。功能:在列表框中显示指定类型的文件。参数:listbox为要显示文件名的列表框,filespec为要显示文件的路径及后缀,statictext为窗口上的要显示路径的statictext控件名称,filetype表示文件的类型。返回值;NULL表示至少有个参数为NULL,True表示操作正确完成,False表示列表框不能正确显示指定文件。

filetype文件属性:

0 可读写文件

1 只读文件

2 隐含文件

4 系统文件

16 子目录

32 归档文件

16384 驱动器

32768 可读写文件以外的

*同时显示多种类型的文件,可以使用加号联结。例如同时要显示可读写、子目录、驱动器,参数filetype可以使用表达式 0+16+16384

★DirSelect

语法:ect(selection)

功能:如果目前列表框中的内容是使用函数Dirlist获得的,该函数会将用户在

列表框listbox中选择的项目的内容保存在string类型变量selection中;如果目前列表框中的内容不是使用Dirlist获得的,该函数返回的值不能正确反映实际的内容

返回值:NULL表示至少有一个参数是NULL,True表示用户选择的是目录、驱动器,False表示用户选择的是文件。

String ls_pathname

String ls_pattern

Ls_pattern = '*.txt'

If lb_ect(ls_pathname) Then //用户选择的是目录或驱动器

lb_t(ls_pathname + ls_pattern,0) //显示用户选择的目录或驱动器下的文件

Else

//用户选择的是文件,进行其他相关处理

End If

★FindItem

语法:em(text,index)

功能:在listbox列表框中从索引号为index+1的项目开始搜索,看是否有内容为text的项目。

返回值:没有找到或者发生错误则返回-1,有参数为NULL时返回NULL,正确执行并找到了匹配的项目则返回与之匹配的第一个项目的索引号。

*该查找是前面部分匹配。例,要查找“a”,项目“a”、“an”、“artist”都符合要求,而“a”在其他位置的,如“ca”就和要查找的不匹配。

例:在sle_1的Modified事件中,在lb_1查找所有和用户输入字符匹配的项目的索引号和内容。

int li_pos,li_pri

li_pos = lb_em(,0)

li_pri = li_pos

do

MessageBox(String(li_pos),lb_(li_pos))

li_pri = li_pos

li_pos = lb_em(,li_pos)

loop until li_pos <= li_pri

★SelectedIndex

语法:edIndex()

功能:在listbox列表框中查找第一个选中的项目。

返回值:如果找到选中项目,则返回该第一个选中项目的索引号;如果listbox为null则返回null,如果没有找到选中项目或者查找过程中发生了错误则返回-1。

★selectedItem

语法:edItem()

功能:获取列表框listbox中选中项目的内容。通常在列表框不允许同时选中多行时使用,当允许多行同时选中时,经常使用state和text函数来获取选中项

目的内容。

返回值:如果有选中项目,则返回选中项目的内容,如果没有选中项目则返回空值" ",如果listbox为NULL,则返回NULL。

★selectItem

语法:Item(item,index)

功能:在不允许多选的listbox列表框的索引号为index之后查找内容为item的项目,如果找到则选中该项目。*该查找也是前面部分匹配,同函数finditem的匹配相同。当列表框允许多选时,该函数不起作用,这时应该使用finditem和setstate来实现该功能。函数setstate不影响已经选中行的状态。

返回值:如果正确执行并找到了匹配的项目,则返回匹配项目的索引号,如果没有匹配的项目,则返回0,如果发生了错误则返回-1,如果有参数为NULL,则返回NULL。

指定index:item( itemnumbe)

★TotalSelected

语法:elected()

功能:获取在listbox列表框中选中的项目数。该函数只在列表框允许多选时起作用,在不允许多选列表框中,即使有选中,项目也返回-1。

返回值:正确执行时返回列表框中选中的项目数,没有选中项目时返回0,执行错误时返回-1,如果listbox为NULL,则返回NULL。

★SetState

语法:te(index,state)

功能:高亮显示指定的项目;不影响已经高亮显示的项目;state:true-select,fasel-not selected

retrun value:Integer. Returns 1 if it succeeds and -1 if an error occurs.

If any argument's value is NULL, SetState returns NULL.

★ture(picturename)

其中controlname为图形列表框或者下拉图形列表框控件的名称;picturename为字符类型,是要添加的图形文件名称。

函数返回值:Integer. Returns the picture index number if it succeeds and

-1 if an error occurs.

如果想添加pb系统提供的那些常用图片,比如想添加checkin!图片,可以使用下面的语句:

plb_ture("checkin!")

该函数的操作相当于在pictures属性页中的操作。

★Picture(index)

其中controlname为图形列表框或者下拉图形列表框控件的名称;index为integer型,是要删除的图片的索引号,如果指定的索引号不存在则不会删除任何图片。

返回值:Integer. Returns 1 if it succeeds and -1 if an error occurs.

////////////////////////////////

在PB中提供了三类条状控件,ScrollBar-滚动条、TrackBar-轨迹条和ProgressBar-进度条

ScrollBar(滚动条)

【属性】

▲MinPosition和MaxPosition

缺省值分别是0和100,用来指定滚动条上滑块的最左(最上)和最右(最下)位置时所代表的数值。

▲Position

缺省也是0,指滑块的位置。它是一个相对位置,相对于MinPosition和MaxPosition而言的。

【事件】

◆LineLeft和LineRight(对应LineUp和LineDown)

当单击横向滚动条左侧的小箭头时触发LineLeft事件,在该事件下编写脚本使小滑块向左移动;单击横向滚动条右侧的小箭头时触发LineRight事件,在该事件下编写脚本使小滑块向右滑动

◆PageLeft和PageRight(对应PageUp和PageDown)

当单击横向滚动条小滑块和左侧小箭头之间空白时触发PageLeft事件,在该事件下编写脚本使小滑块向左移动较大的距离;单击横向滚动条小滑块和右侧小箭头之间的空白触发PageRight事件,应该在该事件下编写脚本使下滑块向右移动较大的距离

◆Moved

当在小滑块上按下鼠标并移动时触发该事件,该事件下的脚本应该跟随鼠标移动的方向改变小滑块的位置

TrackBar(轨迹条)

该控件也是一个通过改变滑块位置来输入数据或显示信息的控件。和滚动条不同的是,使用该控件数值不能发生连续的变化,一般经常用来输入timer事件的时间间隔或者窗口的尺寸等

ProgressBar(进度条)

【属性】

▲MinPosition和MaxPosition

这两个属性的含义和ScrollBar的同名属性含义相同

▲Position

这是一个非常重要的属性,在脚本中读取或者设置该属性。它决定小滑块的当前位置,是一个相对于MinPosition和MaxPosition属性而言的相对量。可以用(MaxPosition – MinPosition)/Position算出当前位置

▲SetStep

它指每次前进或后退的幅度,也是一个相对值,缺省为10

▲SmoothScroll

它指定进度条是否平滑前进,缺省为False。建议将该属性设置为True,这样界面显示效果好一些

【函数】

★OffsetPos

语法:Pos(Increment)

功能:使进度条control中的光亮条前进increment长度。当到达或超过进度条的最大值时不能自动重新开始。例如,当前高亮条长度为70,进度条hpb_1的最大值为100,使用函数hPB_Pos(40)只能使高亮条宽度为100,而不是10。

返回值:如果执行成功则返回1,否则返回-1。

★StepIt

语法:()

功能:使进度条control中的光亮条前进SetStep长度。当到达或超过进度条的最大值时可以重新开始。例如,当前高亮条长度为70,进度条hPB_1的最大值为100,使用函数hPB_(40)可以使高亮条宽度达到100后再到达10的位置。

////////////////////////////////

文本编辑:SingleLineEdit-单行编辑器、EditMask-屏蔽编辑器、MultiLineEdit-多行编辑器、RichTextEdit-富文本编辑器

文本显示:StaticText-静态文本控件、StaticHyperLink-静态联结

SingleLineEdit(单行编辑器)

【属性】

▲Visible

缺省为True。当为False时,该控件在窗口上隐藏。

▲Enabled

缺省为True。当为False时,该控件不能获得焦点,用户不能进行编辑和选中;控件背景为灰色。

▲DisplayOnly

缺省为False。当为True时,该控件中的文字不能被修改,并且也不能输入,但可以选中、复制。

▲Password

缺省为False。当为True时,在该输入框中输入的内容显示为“*”号,星号的数目等于输入的字符的数目,加密规则依赖于操作系统。其实际内容和用户输入的内容一致。

▲AutoHScroll

缺省为True,表示当用户输入的内容显示不下时,可以自动横向滚动光标,但是不显示滚动条。

▲HideSelection

缺省为True,表示只有当单行编辑器获得焦点时,才高亮显示选中文本。建议使用缺省值,因为将该属性设置为False,没有获得焦点时,选中的内容就高亮显示,这容易让用户造成错误。

▲Limit

缺省是0,表示没有长度限制。可以输入其他一个数字,表示该单行编辑框中最多接受用户输入的字符个数,最大数字是32 767。

▲TextCase

有三个选项,upper!表示用户输入的内容中的字母都自动转换成大写,lower!表示都自动转换成小写,anycase!表示不做转换。

▲Text

这是该控件运行时最经常使用的一个属性。可以给该属性赋值来将特定信息显示在单行编辑器中,也可以读取该属性而获得单行编辑器中的内容。设计状态下,在Text属性输入框中录入的文字在窗口刚刚打开时显示在单行编辑框中。

▲Border

是否显示边框,缺省为True

【事件】

单行编辑器提供了12个事件,Modified是经常使用的事件,其他事件和命令按钮的同名事件完全相同

◆Modified

该事件的触发时机是在编辑器中输入内容后,焦点离开该编辑器时

【函数】

单行编辑器提供了很多的函数,其中需要掌握的有10个经常使用的函数,这10个常用函数是CanUndo、Clear、Copy、Cut、Paste、SetFocus、ReplaceText、SelectedStart、SelectedText、SelectText。其中,前面的6个函数是无参数函数,可以直接用on()形式使用,从字面意思可以理解函数的功能。后面的4个函数和下拉列表框中的同名函数用法相同

MultiLineEdit(多行编辑器)

【属性】

它的很多属性使用缺省值即可满足要求,常用属性有14个,其中Visible、Enabled、DisplayOnly、AutoHScroll、HideSelection、RightToLeft、Border、Case、Limit和单行编辑器的同名属性意义相同。还有以下5个属性需要关注

▲HscrollBar

是否显示横向滚动条,缺省为False。当该属性为True时,显示横向滚动条,某行文字的宽度大于控件的宽度,则滚动条可用,否则灰色显示不可用。当属性为False时,输入的文字大于控件宽度,则自动换行。

▲VscrollBar

是否显示纵向滚动条,缺省为False。当该属性为True时,显示纵向滚动条,如果文字的高度大于控件的高度,则滚动条可用,否则灰色显示不可用。当属性为False时,输入的文字大于控件高度时,就不允许再增加新的数据行。

▲AutoVScroll

是否在需要时自动显示纵向滚动条,缺省为False。如果设置为True,在当前内容显示满控件时,增加新的数据行将会出现纵向滚动条。

▲IgnoreDefaultButton

是否忽略Enter按钮,缺省为False。如果属性为True并且当前焦点在多行编辑器中,这时使用Enter键则会在多行编辑器中增加一个新行;如果属性为False,则会触发窗口上Default按钮的Clicked事件。

▲Alignment

文本的对齐方式,是一个枚举型取值,有Center!、Justify!、Left!、Right!四个取值,缺省为Left!。

【事件】

多行编辑器提供了12个缺省事件,触发时机和单行编辑器的12个事件完全相同。经常使用的事件也是Modified,参考单行编辑器

【函数】

多行编辑器也提供了很多的函数,和单行编辑器的同名函数的用法及注意事项完全相同,需要注意的是两个单行编辑器没有的函数LineCount和LineLength。这两个函数经常配合使用,对多行编辑器中的文本逐个字符处理。

★LineCount()

可以获取editname中数据的实际行数,不管每行后面是否有回车或换行符号。函数执行错误返回-1,如果editname为Null,则返回Null。

★LineLength()

可以获取editname中当前光标所在行的字符数,包括空格。执行错误返回-1,当editname为Null时返回Null

EditMask(屏蔽编辑器)

【属性】

EditMask控件的许多常用属性和SingleLineEdit的同名属性都相同。另外,还有3个属性需要特别地关注,它们是Spin、Increment和MinMax,这些属性共同规定了使用微调小按钮录入数据的一些动作和特征

▲MaskDataType

使用一些特殊的符号可以指定EditMask能够接受的数据格式,首先使用属性MaskDataType指明EditMask要接受的数据类型,该属性是EditMask控件非常重要的属性。该属性的取值是枚举类型,有6个取值,它们是:DateMask!、DateTimeMask!、DecimalMask!、NumericMask!、StringMask!、TimeMask!

不同的数据类型使用不同的格式符号,例如#表示数字,!表示一个大写字母等等,这些都可以在属性窗口的Mask输入框中输入或者直接选择,也可以在运行时使用脚本动态设定。设定完MaskDataType属性之后,就应该设置Mask属性了,该属性的取值是一个字符串,规定EditMask控件的数据格式,例如,em_="

(###)########"可以设置电话号码格式

▲Spin

该属性指定是否使用微调输入数据,缺省是False。如果属性为True,每次用鼠标单击微调按钮时,向上箭头则逐渐增加,向下箭头则逐渐减小,步长是Increment属性规定的值。

▲Increment

规定使用微调时输入内容每次增大的幅度。该属性只有当Spin属性为True才起作用,并且只对日期类型或者数值类型起作用。

▲Min、Max

用来规定最大和最小值。

经常使用来读取或设置它的文字。也可以在运行时使用脚本修改该属性,格式为用两个波浪号(~)联结的数字所构成的字符串,例如:em_="100~~1000"

【函数】

该控件提供了很多的函数,但绝大多数都和多行编辑器的同名函数功能或用法相同。只有函数GetData需要关注一下

★GetData()

该函数的语法是:a ( datavariable )

功能是获得EditMaskName中的原始数据,并保存在Datavariable变量中。

Datavariable变量的类型和屏蔽编辑器中的数据类型一致,可用的数据类型有date、DateTime、decimal、double、string和time。成功执行则返回1,执行过程中发生错误则返回-1,如果参数为Null则返回Null。

注意该函数读取的是屏蔽编辑器中原始的数据,而不是实际显示的格式(可以用获得显示格式的数据)

RichTextEdit(富文本编辑器)

【属性】

▲DocumentName

打印编辑器中的内容时,文件在打印队列中的名称。

▲RulerBar

是否显示标尺,缺省为False。标尺可以作为编辑时对齐、调整间距的参照。如果PopMenu属性为True,用户在程序运行时就能通过右键弹出菜单来决定是否显示标尺。

▲TabBar

是否在编辑器的编辑区域上方显示Tab工具条。使用该工具条可以灵活设定Tab按钮所前进的距离,在工具条上用鼠标单击即可添加一个Tab位。如果PopMenu属性为True,用户在程序运行时就能通过右键弹出菜单来决定是否显示Tab工具条。

▲ToolBar

是否显示工具条。工具条可以提供设定显示格式、对齐方式、字体等一些工具,缺省为False。如果PopMenu属性为True,用户在程序运行时就能通过右键弹出菜单来决定是否显示工具条。

▲HeaderFooter

指定在编辑器上是否有页眉和页脚。建议选中该属性,因为如果没有该属性,当用户保存具有页眉或页脚的文件后就会丢失页眉或页脚;如果设置了该属性就不

会丢失,打开没有页眉和页脚的文件时也不会有冲突。该属性只能在设计状态下设定,在运行时只能读取该属性。

▲PopMenu

是否允许用户在运行时使用鼠标右键弹出菜单。该属性缺省为False,建议设置为True,因为这样用户有更大的灵活性,可以设定自己喜欢的工作环境,这是Windows应用程序界面设计所提倡的。

▲ReturnVisible

是否显示回车符号,缺省为False。回车符号是行的结束符号,通常情况下是隐含的。如果PopMenu属性为True,用户在程序运行时就能通过右键弹出菜单来决定是否显示回车符号。

▲InputFieldsVisible和InputFieldNamesVisible

当数据由DataWindow提供时使用该属性,它们控制用户是否可以看到数据字段和名字。

▲WordWrap

到达一行末尾时是否自动换行。

▲PicturesAsFrame

控制是否将图片显示为图文框。

▲DisplayOnly

是否文档仅仅用于显示,而不允许用户修改。

▲InputFieldBackColor

输入字段的背景颜色,当数据由DataWindow提供时,该属性有效。

▲UndoDepth

可以撤消历史操作的数目,每次使用Ctrl+Z快捷键或者执行函数undo()时,撤消一个操作。

【事件】

◆FileExists

当用户试图将控件中的内容保存到已经存在的文件时触发该事件,该事件的参数filename可以在脚本中直接使用,返回值1表示停止处理,0表示继续处理。一般在该事件中编程让用户确认是否覆盖已经存在的文件。下面是该事件下的一个典型脚本:

integer li_rtn //保存用户的确认信息

li_rtn = Messagebox("确认",filename + "已经存在,是否覆盖?

",Question!,YesNo!,2)

If li_rtn = 1 Then //用户选择了“yes”

return 0 //保存

Else

return 1 //不保存

End If

◆InputFieldSelected

当用户选择一个输入字段(在该字段内双击或按了Enter键)时触发该事件。

◆Modified

当对控件中的内容做第一次改动时触发该事件。

◆PictureSelected

当用户在一个位图上双击或者按下了Enter键时触发该事件。通常在该事件中调用相应的位图编辑软件。

◆PrinterFooter

当要打印每页的页脚时触发该事件。该事件的两个参数CurrentPage和TotalPages可以在脚本中直接使用,表示当前页号和总页号。

◆PrinterHeader

当要打印每页的页眉时触发该事件。该事件中的两个参数和PrinterFooter事件中的两个参数完全相同。

◆RButtonDown

当PopMenu属性为False并且用户在该控件上按下鼠标右键时触发该事件。

◆RButtonUp

当PopMenu属性为False并且用户在该控件上松开鼠标右键时触发该事件。

StaticText(静态文本控件)

静态文本控件经常用来显示一定的提示信息,其中的文字在运行时用户不能进行编辑,可以用脚本改变其显示的内容。该控件在运行时不能获得焦点,即使将它的Tab Order值设置为非0也无法获得焦点。

该控件的缺省属性中惟一应该修改的就是text,其他没有必要也很少进行修改。

该控件虽然也提供了很多的事件,例如Clicked事件、DoubleClicked事件等,但很少在该控件上编写脚本,因为该控件一般就是用来显示信息,很少希望用户和该控件进行交互

StaticHyperLink(静态联结)

该控件也提供了很多的事件,但很少在上面进行编程。在该控件上单击鼠标即可自动调用操作系统上的缺省浏览器,打开该控件URL属性指定的页面

////////////////////////////////

下拉列表框-dropdownlistbox、图形下拉列表框-dropdownpicturelistbox

【属性】

下拉列表框提供了37个属性,图形下拉列表框除了这37个属性外,还有5个专门与图形有关的属性。因为具有列表框的特性,所以很多同名属性和Listbox的含义相同

▲AllowEdit

该属性设置是否允许用户输入新的项目,缺省为不允许

▲AutoHScroll

该属性设置当录入新项目或者删除数据时是否允许自动滚动编辑框,缺省不允许。下拉列表框的宽度大于Limit规定的数值,则没有必要设置该属性;否则就应该设置该属性为True。该属性实际上是单行编辑器的特征。

▲Enabled

该属性设置是否允许进行选择,缺省值是True

▲Limit

该属性用来规定用户可以输入的字符的最大宽度,0表示没有限制,最大是32 766个,缺省是0。该属性是单行编辑器的特征。

▲ShowList

该属性规定是否总显示下拉列表

▲Sorted

和列表框的属性相同,该属性定义各个项目是否自动排序显示,缺省为False。当该属性为True时,动态添加到下拉列表框中的项目会自动排序显示到适当的位置

▲ItemPictureIndex[]

integer类型的只读数组,使用该数组可以获取每个图片项目的索引。该数组通过AddItem()和DeleteItem()函数修改。

▲PictureHeight

integer类型,标识图片在控件中显示的高度。只有当前在控件列表中没有项目时才能设置该属性。

▲PictureWidth

Integer类型,图片在控件中显示的宽度。该属性缺省值为0,表示使用添加图片时图片的缺省宽度。在添加图片之前应该首先设置好该属性,这样添加的图片才能按照该尺寸显示。

▲PictureMaskColor

long类型,图片的标志颜色,当使用AddPicture函数添加图片时,新添加的图片使用该颜色。

▲PictureName[]

数组类型,保存的是在初始化时添加的图片文件名称。注意,这里保存的是初始化时的文件名,运行过程中删除或者添加的图片不会影响该数组的内容。

【事件】

这两个控件的事件完全相同,都提供了14个事件。缺省事件是SelectionChanged,它和Modified事件是两个经常使用的事件。

◆SelectionChanged

在重新选择了下拉列表中的项目时触发。参数index可以直接引用,是当前选中项目的索引号。典型编程是获取用户当前所选项目的内容,然后根据用户所选内容进行其他相关的处理

◆Modified

在输入了新的项目后按下Enter或者Tab键而使下拉列表框失去焦点时触发。

典型编程是获取用户当前输入的内容,然后使用函数将其添加到当前的下拉列表框中,以便用户在退出应用程序之前无需再重新输入该项目。

◆DoubleClicked

双击时触发,很少在该事件下编写脚本

*其他事件和命令按钮的同名事件完全相同

【函数】

下拉列表框提供了37个函数,图形下拉列表框除此之外又增加了3个用户图形处理的函数。在这37个函数中,经常使用的有AddItem、DeleteItem、DirList、DirSelect、FindItem、InsertItem、Reset、SelectItem、Text、TotalItems、SelectedLength、SelectedText、SelectText、ReplaceText等14个函数,其中,前面的10个和列表框的同名函数用法相同,下面介绍后面的4个函数

★SelectedLength

语法:edLength ( )

功能:获取在editname中选中项目的字符数目,包括空格。注意,该函数只有在下拉列表框选中项目并且没有失去焦点时,才能正确获得所选项目的字符数目,所以在很多的事件或控件中编程使用该函数都返回0,因为这些事件触发时,下拉列表框失去了焦点,所以一般在下拉列表框的SelectionChanged事件中使用该函数。另外,下拉列表框的AllowEdit属性必须为True,才能正确执行该函数,否则该函数执行错误。

返回值:-1表示执行过程中发生了错误,0表示没有选中的项目,Null表示editname为Null,其他正整数表示选中项目的字符数目。

★SelectedText

语法:edText ( )

功能:返回editname中选中项目的内容。该函数在下拉列表框选中项目并且没有失去焦点时,可以正确返回选中项目的内容。

返回值:当有错误发生或者没有选中项目时返回空值(“”),当editname为Null返回Null,正确执行时返回选中项目的内容。

★SelectText

语法:Text ( start, length )

功能:在editname的编辑框中,从第start字符开始选中length个字符。

返回值:返回选中的字符个数,如果发生了错误则返回-1,如果有参数为Null则返回Null。

★ReplaceText

语法:eText (string )

功能:在editname中用指定的字符串string来替换选中的字符。?

返回值:返回string字符串的长度,如果发生错误则返回-1,如果有参数为Null则返回Null。

*除了上面介绍的4个常用函数外,图形下拉列表框还提供了3个专门用于图形的函数,它们是AddPicture、DeletePicture和DeletePictures。

////////////////////////////////

[PB]-控件(二)

////////////////////////////////////

Tab控件-Tab

【其他】

■调整标签页的顺序:点击标签以选中标签控件,在属性视窗中进入到Page

order属性页,在Page Name列中点击选中要调整顺序的标签页,然后使用鼠标拖动到适当的位置即可。

■虽然标签控件是一个相当不错的控件,但因为它上面可以放置很多的其他控件,所以应该想法减少该控件运时耗费的资源。该控件的属性CreateOnDemand设置为True时,可以使得标签页只有在选中时才创建它上面的控件,这样可以减少窗口的初始打开事件,减少在不必要时对所有控件实例化所耗费的资源。

■引用标签上的控件:lName。即Tab控件名称.Tab页面名称.控件名称。tab___1。如果脚本所在控件和被引用控件在同一个标签页时,可以直接使用控件名称,但使用全称引用也没有错误;如果脚本所在控件在其他标签页、窗口或者其他的标签控件上,这时都应该使用全称来引用。

【属性】

这里所说的标签属性包括两方面的内容,一是标签控件的属性,另一个是标签页的属性,这两个属性是完全不同的属性。

*常用标签控件属性

▲Name

String类型,为标签控件设定名称,应该尽量采用可读性较好的名称,以便引用。

▲Tag

String类型,可以用于任何目的的标记值。

▲Visible

布尔类型,设定标签控件是否可见。该属性缺省为True。

▲Enabled

布尔类型,当取值为False时,用户不能在不同的标签页之间切换,并且也不能使用标签页中的控件。该属性缺省为True。

▲PictureOnRight

布尔类型,指定标签上图片的位置。该值为True时,图片在右面,否则在左面。

▲PowerTips

布尔类型,该属性是一个很不错的属性,当鼠标指针在标签上停留片刻时,如果该属性为True则会显示一些提示信息,如果该属性为False就不会显示提示信息。这个属性对于用户快速掌握开发的应用软件有很大的帮助。

▲FixedWidth

布尔类型,设置标签宽度是否固定。当该值为True时所有标签的宽度和最长的标签的宽度看齐,当该值为False时标签的宽度自动调整以适合自身文本的长度。

▲FocusOnButtonDown

布尔类型,确定在选中标签页时标签页上是否显示虚线矩形框。该属性缺省为True。

▲ShowText

布尔类型,确定是否显示标签上的文本,该属性缺省为True。

▲ShowPicture

布尔类型,确定是否显示标签图形。该属性缺省为True。

▲PerpendicularText

布尔类型。当该属性为True时,标签页上的文本为竖向显示,否则为横向显示。该属性的缺省值为False。

▲MultiLine

布尔类型,标识标签控件是否可以在多行内显示各个标签。当一行内没有足够的空间显示所有标签时,如果该属性为True则自动分为多行显示,否则显示左右该动箭头。该属性缺省为False。建议尽量避免将该属性设置为True,这样会使用户感觉界面复杂,并且使用时容易引起混淆。

▲RaggedRight 布尔类型。如果该属性为True,标签或者使用自动宽度或者使用固定宽度(FixedWidth属性为True时),即使控件标签行的右侧有空间也会保留;如果该属性为False,标签会自动调整宽度以充满控件横向的整个空间。该属性缺省为True。

▲BoldSelectedText

布尔类型。对于当前选中的标签页是否将文本设置为粗体。该属性缺省为False。

▲CreateOnDemand

布尔类型。当该属性为True时,只有当用户在第一次使用该标签页时才实例化标签页上的对象;当该属性为False时,在标签控件创建时就实例化每个标签页上的所有控件。该属性的缺省值为False,但为了加快窗口打开的速度和不必要的实例化操作而节省资源,建议将该属性设置为True。

▲SelectedTab

整数类型。设置在创建标签控件时所显示的选中标签页的索引号。该属性缺省是1,也就是选中刚创建标签控件时的第1个标签页。

▲TabPosition

枚举类型。该属性是标签控件比较重要的一个属性,可以确定标签的显示位置。该属性的缺省取值为TabsOnTop!,表示标签显示在标签控件的上面。

▲Alignment

枚举类型,用来设置标签上文字的对齐方式。当标签控件的属性RaggedRight为False并且标签没有充满上面的空间时使用该属性效果比较明显。

▲BackColor

Long类型,指定标签控件的背景颜色。标签控件的背景颜色不影响标签页和标签的颜色。

*两个标签页的属性

▲ObjectType

UserObjects类型,这是一个用于标签页用户对象的只读属性。

▲Control[]

WindowObject类型,这是标签页内控件的一个只读数组,通过该数组可以访问标签页上的所有对象。Control[]和ObjectType属性是互斥的。

【事件】

标签控件的事件虽然不少,有17个,但自己特有的事件很少,仅有SelectionChanging

和SelectionChanged两个。

◆SelectionChanging事件在用户选择一个不同的标签页时、在新的标签页被选中之前触发。该事件的两个参数oldindex和newindex在该事件的脚本中可以直接使用,用来标识原来选中和当前选中的标签页,这两个变量和标签页的索引号相对应。该事件的典型编程是检查原来标签页上的特定操作是否完成,如果已经完成则允许跳转到其他标签页上,否则显示一定的提示信息并且不允许用户跳转到其他标签页上。该事件的返回值0表示允许用户跳转到其他标签页,返回值1表示不允许跳转到其他的标签页。

◆SelectionChanged事件在新的标签页选中后触发。该事件的典型编程是对新选中标签页进行初始化工作。当在不同的标签页上切换时,标签页显示之前有可能要进行一些界面方面的调整,所以SelectionChanged事件是其缺省事件。该事件在用户选择不同的标签页之后触发,它的两个参数oldindex和newindex指出从哪个标签页跳转到哪个标签页,在脚本中可以直接引用。在该事件中进行数据检索是实现数据库访问的一种方便方式。如果有不止一个标签页中包含数据窗口,在窗口打开时检索数据会严重影响窗口的打开速度,不如在该事件下检索

数据。这样处理,不仅可以加快窗口的打开速度,还可以避免一些不必要的数据检索,因为有些标签页可能在用户的某次工作中根本就用不到。

////////////////////////////////////

ListView

【其他】

■控件显示样式

ListView控件可以用下面的四种形式显示信息。

大图标方式:每个项目都显示为大图标,图标下面的标签显示一定的文字信息。用户可以在该控件内拖动图标。

小图标方式:项目显示为小图标,并且每个项目的右边都有一个标签。用户也可以在视图内拖动选中的图标。

列表方式:项目显示为小图标,每个图标右边都有一个标签,并且按照一定的顺序以列优先方式显示,显示样式和上面的相同。

报表方式:项目以多栏列表显示,左边的栏显示图标和标签,用户可以根据自己的需要指定任意数量的附加栏并可以设定每个栏内显示的相应数据。

■典型编程

如何使用数据动态构建ListView控件、在不同的显示样式之间切换以及对选中对象进行处理,这是该控件最常用的三种编程情况。下面分别加以介绍。

该控件中显示的数据可以是静态的,在开发时就可以确定;也可以是动态的,需要根据用户的数据改变该控件的显示内容,这种情况更具有普遍性。如何根据用户的数据初始化该控件,这是该控件的一个非常典型的编程。编程思路和开发环境中的设定过程是相似的,也需要首先设定要添加项目的label,data以及要使用图标的索引号。下面是一段典型的编程:

ListViewItem llvi_cust

Int li_numrows,li_index

DataStore lds_curst

SetPointer(HourGlass!)

Lds_cust = Create datasotre

Items() //首先清除ListView中其他的项目

//为报表显示样式创建多个列

umn("公司",Left!,700)

umn("联系地址",Left!,500)

umn("电话",Left!,400)

//检索数据

lds_ject = "d_customer"

lds_nsObject(SQLCA)

li_numrows = lds_ve()

//如果没有检索到数据则直接返回

If li_numrows <= 0 Then

Destroy lds_cust //释放DataStore对象的内存空间

Return //返回

End If

For li_index = 1 to li_numrows //如果检索到了数据,对数据逐条处理

llvi_ = lds_y_name[li_index] + "~t" + &

lds_s[li_index] + "~t" + &

lds_[li_index] //项目标签

llvi_ = lds_[li_index] //项目的数据

llvi_eIndex = 1 //项目的图片

m(llvi_cust) //添加该项目

Next

Destroy lds_cust //释放DataStore对象的内存空间

上面的脚本使用DataStore来提取数据,如果检索到数据,就将每条数据添加到ListView控件中,如果没有检索到数据就直接退出。添加项目到ListView时,首先为ListViewItem类型的变量赋值,包括label,data和pictureindex三项,赋值完毕后将该变量的值添加到ListView中。

如何在不同的显示样式之间进行切换?ListView控件的属性View是一个枚举类型的属性,通过修改该属性使其取不同的值可以改变该控件的显示样式。可以使用的取值有:

ListViewSmallIcon! 表示以小图标样式显示。

ListViewLargeIcon! 表示以大图标样式显示。

ListViewList! 表示以列表样式显示。

ListViewReport! 表示以报表样式显示。

比如,可以设置多个命令按钮,不同的按钮被点击时都改变ListView的显示样式。在其中的“报表显示样式”按钮上可以编写如下脚本:

lv_=ListViewReport!

当然,还可以在一个菜单的各个菜单项中编写脚本,当在ListView控件上使用鼠标右键时弹出该菜单。具体方式取决于开发人员的编程风格和用户的具体要求。

如何提取选中项目的内容?实际上显示样式只是一个表面问题,而提取选中项目的内容才是最终的目的。应该首先判断哪个项目选中,然后再读取选中项目的数据。判断项目是否选中可以通过SelectedIndex函数、ListViewItem类型对象的Selected属性等来实现。读取指定项目的数据可以通过ListViewItem类型对象的Label和Data属性来获取。下面是一个最复杂的典型编程,该程序从一个允许同时选中多个项目的ListView控件中读取所有选中项目的标号和数据,脚本如下:

Int li_index

ListViewItem llv_item

For li_index = lv_edIndex() To lv_tems()

lv_m (li_index,llv_item)

If llv_ed Then

MessageBox("提示",String(li_index) + "是选中的~r~n标号:" + &

llv_ + "数据:" + String(llv_))

End If

Next

上面的脚本首先定义一个ListViewItem类型的变量,使用GetItem将ListView的项目读取到该变量中,通过判断该变量的Selected来得知项目是否选中。函数SelectedIndex来获取第一个被选中的项目的索引号,循环直到处理完最后一个项目。在其他很多资料上都介绍的使用State函数循环处理多选ListView中的项目,实际上是行不通的。

另外,如果在ListView控件的相关事件中编程,可以直接使用事件的相关参数来获取选中的项目。比如,在DoubleClicked事件中编写脚本,读取用户双击项目的数据,并根据该数据做一定的处理,这也是一种比较常用的典型编程方法。下面是该事件中一段典型的脚本:

ListViewItem llv_item

m(index,name)

SetPointer(HourGlass!)

Dw_ve(llv_)

上面的脚本在用户双击选中ListView中的项目时读取该项目的标签,并以该标签作为参数检索其他的数据窗口。

【属性】

ListView属性

▲Visible

布尔类型的变量,表示ListView是否可见。该属性缺省为True。

▲Enabled

布尔类型变量,表示ListView是否可用。该属性缺省为True。

▲FixedLocations

布尔类型变量,表示用户是否可以拖动控件中的项目来改变其位置。该属性缺省为False。

▲EditLabels

布尔类型变量,表示用户是否可以在控件中编辑项目的标签。该属性缺省为False。

▲AutoArrange

布尔类型,表示是否自动排列图标。该属性的缺省值为False。

▲ExtendedSelect

布尔类型,表示用户是否可以选择多个项目。该属性的缺省值为False,是一个非常重要的属性。

▲ButtonHeader

布尔类型,当为True时报表视图中的标题显示为按钮而不是标签,该属性的缺省值为True。

▲DeleteItems

允许用户使用Delete键删除列表中的项目。该属性缺省为False。

▲HideSelection

如果该属性为True,当控件失去焦点时,选中的项目不显示选中状态;如果该属性为False,当控件失去焦点时选中项目仍然显示为选中状态。该属性的缺省值为True。

▲LabelWrap

该属性设置项目的文字是否换行显示还是只在一行显示。该属性的缺省值为True,表示换行显示。

▲Scrolling

该属性表示控件是否可以该动显示其中的项目。缺省为True。

▲ShowHeader

表示标题是否显示在报表视图中。该属性缺省为True。

▲CheckBoxes

表示状态图片是否可以被CheckBox替代。如果设置该属性为True,则CheckBox缺省为非选中状态。该属性缺省为False。

▲TrackSelect

该属性可以指定当鼠标在项目上移动时是否以不同的颜色表示。当该属性设置为True时,鼠标在项目上停留则以不同的颜色表示,当停留一定时间后自动选中该项目。

▲OneClickActivate

表示鼠标单击是否激活ItemActivate事件。当该属性取值为True时,单击鼠标触发ItemActivate事件,并且鼠标位于某项目上时导致项目的颜色改变(效果和TrackSelect相同)并且鼠标的形状为手型。

▲TwoClickActivate

表示鼠标双击是否触发ItemActivate事件。

▲GridLines

指定报表样式时是否显示网格线。该属性缺省为False。

▲HeaderDragDrop

该属性指定在报表样式中列头是否可以拖动来改变列的顺序。该属性缺省为False。

▲FullRowSelect

该属性指定在报表样式中是否选中整行的数据。该属性的缺省值为False。

▲UnderlineCode

当0neClickActive属性为True时,该属性有效。该属性指定没有选中的项目是否显示下划线,为True时表示显示。

▲UnderLineHot

不管0neClickActive还是TwoClickActivate属性为True,该属性都有效。该属性取值为True,表示Hot Tracking有效,并且高亮显示的项目带有下划线。该属性的缺省值为False。

▲Border

该属性指明ListView控件是否有边框,缺省值为True。

▲BorderStyle

枚举类型的属性,可以设定ListView控件的边框类型。当Border属性取值为True时该属性有效。缺省为StyleLower!。该属性的可用值有StyleBox!,StyleLowered!,StyleRaised!和StyleShadowBox!。

▲SortType

枚举类型的属性,缺省值为Unsorted!,表示不进行排序。可以使用的值还有Ascending!(升序),Descending(降序),UserDefined!(用户定义)和Unsorted!(不排序)。

▲View

枚举类型的属性,表示该控件中的项目初始化时的显示样式,缺省值为ListViewLargeIcon!,为大图标显示。可以使用的值有ListViewLargeIcon!(大图标显示样式),ListViewSmallIcon!(小图标显示样式),ListViewList!(列表显示样式)和ListViewReport(报表显示祥式)。

▲Accelerator

为该控件定义快捷键。快捷键允许用户使用键盘选中某个项目,而不是使用鼠标。快捷健在项目标签的第一个字母下面显示下划线表示。

ListViewItem属性

ListView控件的结构比较复杂,使用该数据结构有助于简化对该控件的操作。该数据结构只有少数的函数,大部分时候使用该控件的属性来操作,或者是给该类型的数据赋值后将其插入到ListView控件中。

ListView控件最重要的数据结构ListViewItem,该结构用来保存ListView控件中每个项目的信息。它具有以下属性:

▲CutHighLighted

布尔类型属性,当该属性为True时项目高亮显示,并且是进行剪切操作的目标。

▲Data

any类型的属性,是和项目相关联的数据值。

▲DropHighLighted

布尔类型属性,该属性取值为True表示项目高亮显示,并且是拖放的目标。

▲HasFocus

布尔类型属性,该属性为True时表示项目在当前具有焦点。

▲ItemX

Integer类型的属性,该属性的取值是项目在ListView控件中的X坐标。

▲ItemY

Integer类型的属性,该属性的取值是项目在ListView控件中的Y坐标。

▲Label

String类型的属性,该属性的取值是项目文本标签中的内容。

▲OverlayPictureIndex

Integer类型的属性,其取值是覆盖图像列表中图片的索引号。

▲PictureIndex

Integer类型的属性,它的取值是项目图标的控件图像列表内的索引号。

▲Selected

布尔类型的属性,该属性取值为True时表示该项目是选中的。该属性是一个比较重要的属性,经常用来判断项目是否选中。

▲StatePictureIndex

Integer类型的属性,该属性的取值是控件状态图像列表中的索引号。

【事件】

◆BeginDrag

index

当用户在控件上单击鼠标并开始拖动时触发该事件

◆BeginLabelEdit

index

当用户单击选中的标签时或者调用相应的函数开始编辑标签时触发

◆BeginRightDrag

index

当用户在控件上单击鼠标右键并开始拖动时触发该事件

◆Clicked

index

当用户在控件上点击鼠标左键时触发该事件。当双击鼠标左键时也触发该事件

◆ColumnClick

column

当以报表样式显示并且ButtonHeader属性设置为True时该事件才有可能触发。当用户点击栏目标题时触发

◆Constructor

没有参数

控件创建时触发该事件。通常是在包含该控件的窗口触发窗口的Open事件之前触发该事件

◆DeleteAllItems

没有参数

当所有的项目删除时触发该事件

◆DeleteItem

index

当某一个项目被删除时触发该事件

◆Destructor

没有参数

当控件撤消时触发。通常是在窗口的Close事件触发之后紧跟着触发

◆DoubleClicked

index

当用户双击控件时触发该事件

◆DragDrop

source、index

当用户拖动一个对象到控件上并松开鼠标放下该对象时触发

◆DragEnter

source

当用户拖动其他对象到该控件中时触发

◆DragLeave

source

当用户拖动对象并离开该控件时触发

◆DragWithin

source、index

当用户在控件中拖动对象时触发

◆EndLabelEdit

index、newlabel

当用户编辑完标签时触发

◆GetFocus

没有参数

当控件获得焦点时触发

◆Help

Xpos、Ypos

当控件获得当前焦点并且用户点击了F1键或者用其他方式要获取控件的帮助时触发

◆InsertItem

index

当在控件中插入新的项目时触发

◆ItemActivate

index

当单击或者双击项目时触发。触发时机还取决于控件OneClickActivate和

TwoClickActivate属性的设置

◆ItemChanged

index,focuschanged,hasfocus, selectionchange,selected,otherchange

当控件中的项目改变时触发

◆ItemChanging

没有参数

当项目中的某些内容正处于变化过程中时触发。在该事件中可以返回1来防止改变

◆Key

key, keyflag

当用户点击了一个按钮时触发该事件

◆LoseFocus

没有参数

当控件失去焦点时触发

◆Other

wparam,iparam

当有其他系统信息而没有相应的PB映射消息时触发

◆RightClicked

index

当点击鼠标右键时触发该事件

◆RightDoubleClicked

index

当双击鼠标右键时触发该事件

◆Sort

index1,index2,column

当控件中的项目正在进行排序时触发

【函数】

★AddItem

该函数有两种语法格式,m(label, pictureindex),函数的功能是在listviewname中添加一个项目,项目的标签内容为label的内容,项目的图片索引号为pictureindex。另一个语法为:m

( item ),作用是将ListViewItem类型的项目添加到listviewname中,ListViewItem类型的变量item可以详细设置其属性的取值,使用这种格式的函数可以更详细地设置要添加项目的内容。

★AddLargePicture

该函数的作用是向ListView控件的大图标显示样式中添加位图、图标或者光标,该函数的语法为gePicture ( picturename )。

★AddSmallPicture

该函数的作用是向ListView中添加小图标显示样式时的图标、光标或位图,该函数的语法为llPicture ( picturename )。

★AddStatePicture

该函数的作用是向ListView中添加状态图标时的图标、光标或位图。该函数的语法是:tePicture ( picturename )。

★Arrange

该函数的作用是在显示样式为大图标或者小图标时按行排列图标,函数的语法是e ( )。

★DeleteColumn

函数的语法是Column ( index ),作用是删除索引号为index的列。

★DeleteColumns

该函数的语法是Columns ( ),作用是删除控件中的所有列,相当于对所有列都使用DeleteColumn函数。

★DeleteItem

函数语法是Item ( index ),作用是删除索引号为index的项目。

★DeleteItems

函数的语法是Items ( ),可以删除ListView控件中的所有项目。

★DeleteLargePicture

删除索引号为index的大图标,函数的语法是:LargePicture ( index )。

★DeleteLargePictures

删除所有的大图标。

★DeleteSmallPicture

函数语法是SmallPicture ( index ),删除索引号为index的小图标。

★DeleteSmallPictures

函数的语法是SmallPictures ( ),可以删除控件中的所有小图标。

★DeleteStatePicture

函数的语法是StatePicture ( index ),可以删除index指定索引号的状态图标。

★DeleteStatePictures

可以删除控件中所有的状态图标。

★EditLabel

函数语法为bel ( index ),作用是将索引号为index的项目的标签置为编辑状态。

★FindItem

函数语法为em ( startindex, label, partial, wrap ),函数的作用是在listviewname指定的控件中,从startindex索引号开始查找内容为label的项目,如果找到就返回找到项目的索引号,查找时发生错误则返回-1。可以通过partial与wrap两个参数指定查找选项,partial参数为True时可以进行部分匹配查找,wrap参数为True时搜索完毕后返回到第一个项目。另外,该函数还可以有另外一种格式:em ( text, index ),

该函数的功能是在索引号为index之前搜索标签内容为text的项目,如果要在所有项目中搜索,可以将index指定为0。

★GetColumn

语法是umn ( index, label, alignment,width),功能是获取标号为index的项目的属性,并将标签内容保存在变量label中,将标签文字内容的对齐属性保存在变量alignment中,将列的宽度保存在变量width中。

★GetItem

该函数的语法是m ( index, {column}, item ),作用是检索索引号为index的项目的属性,并将这些属性保存到ListViewItem类型的变量view中。 参数column为可选项,指定该参数时可以让该函数只明确检索哪列的属性,如果不指定该参数则检索第一列的属性。

★GetOrigin

函数的语法是gin ( x , y ),可以获取ListView控件左上角的坐标,并将坐标值保存在x和y中。参数x和y都是Integer类型变量。

★InsertColumn

该函数的语法是Column ( index, label, alignment,

width ),作用是在index指定的列号之前插入一个新列,新列的标签文本为label变量的内容,它的对齐方式由枚举型变量alignment变量指定,可以使用的值为Center!,Justify!,Left!或者Right!;宽度由width变量指定,其单位为PowerBuilder Unit。注意,在第一个项目之前不能插入项目。

★InsertItem

在ListView控件中插入项目,该函数有两种语法格式。当只插入标签、并且指定图片时可以使用Item ( index, label, pictureindex )格式,该函数的作用是在控件中索引号为index的项目之前插入一个项目,新插入的项目的标签内容为label变量的取值,图片的索引号为pictureindex变量的取值。该函数的另一个语法是Item ( index, item ),可以为插入的新项目指定更多的属性。函数的作用是在控件中索引号为index的项目之前插入新的项目,新项目的属性取值由item决定。item为ListViewItem类型的变量。同样,该函数的两种语法格式也都不能在第一个项目之前再插入新的项目。

★SelectedIndex

该函数的语法格式是edIndex ( ),可以返回控件中第一个被选中项目的索引号,如果没有选中项目则返回-1。经常使用该函数和函数TotalSelected及ListViewItem的Selected属性进行循环判断来处理其中所有选中的项目。

★SetColumn

语法为umn ( index, label, alignment, width ),作用是在报表样式时设定指定列的属性。将索引号为index的列的标签文本设置为

label的内容,对齐方式设置为alignment变量的指定方式,宽度由变量width来指定。

★SetItem

该函数可以设置指定列或者项目的内容。有两种语法格式:m ( index, { column }, item )可以为ListView控件中的项目设定更多的属性,这时函数的作用是在控件中设置索引号为index的(并且列号为column)的项目的属性,具体属性的取值由ListViewItem类型的item取值来决定;另外一种语法格式是m ( index, column,

label ),该函数可以为控件中由index指定的索引号和column指定的列号所确定的项目设定标签文本。

★SetOverlayPicture

该函数用于将一个覆盖图片映射为一个大(或者小)图像列表的索引号。覆盖不是维持一个附加的图像列表,而是映射为控件的主图像列表。函数格式为rlayPicture ( overlayindex, imageindex ) ,表示为索引号为imageindex的大图标或者小图标的覆盖层图表设置overlayindex。

★Sort

函数语法为 ( sorttype, { column } ),作用是用指定的列column和指定的排序方法sorttype对项目进行排序。如果没有指定列,则使用第一列进行排序。缺省的排序方法为字典排序,可以使用的排序方法有Ascending!(升序排列),Descending!(降序排列),Unsorted!(不排序)和UserDefinedSort!(用户定义的排序规则)。

★TotalColumns

该函数没有参数,可以返回报表显示样式的ListView控件中的列数。函数的格式是olumns ( )。

★TotalItems

该函数返回控件中的项目总数目,返回0表示控件中没有项目。函数的语法是tems ( )。

★TotalSelected

该函数返回控件中选中项目的数目,没有选中项目时返回0,函数的语法是elected ( )。该函数在进行数据处理时经常使用,是一个比较重要的函数。

以上是ListView控件的所有常用的函数。有些函数经常在创建控件时使用,比如AddColumn,AddItem,AddLargePicture,AddSmallPicture,AddStatePicture,InsertColumn和InsertItem等;有些在数据处理时经常使用,比如GetItem,GetColumn,TotalSelected,SetItem和SetColumn等。对这些函数也没有必要全部掌握,只要能够使用适当的函数或者属性编程实现控件的操作即可。

////////////////////////////////////

[PB]-控件(三)

////////////////////////////////////////////

TreeView

【其他】

■TreeView控件可以以树型方式来组织项目,不仅显示直观、界面友好,而且项目的管理和操作更为方便,是当前比较流行的一个控件。

该控件的特点是在较小的空间可以分层次显示大量的数据,并且可以按照用户的要求检索数据。该控件具有以下功能:

通过可以展开或者折叠的节点遍历数据。

图形化和文本化的节点显示。

拖放操作。

包括剪切、复制和粘贴的节点操作。

■典型编程

通常TreeView控件用来让用户选择数据,或者进行数据的管理。比如,在一个人事管理软件中,使用部门、姓和名这样的三层结构查找数据就比较容易,而且可以通过拖拉来进行人事单位的变动。

首先,在窗口打开时创建该控件。下面的脚本向TreeView控件中首先添加最高级别的项目:

TreeViewItem ltvi_item

ltvi_en = True

ltvi_edPictureIndex = 1

ltvi_ = "餐饮部"

ltvi_ = "餐饮部"

ltvi_eIndex = 1

Tv_ItemLast(0,ltvi_item)

ltvi_ = "接待部"

ltvi_ = "接待部"

ltvi_eIndex = 2

Tv_ItemLast(0,ltvi_item)

上面的脚本添加所有一级项目,可以反复使用上面的脚本,直到添加完所有的一级项目。因为这些一级项目在程序运行之前就可以确定,所以可以直接添加。对于数据可能要发生变动的,应该从数据库中提取数据,通过循环来添加项目。

下面的脚本在用户开始拖动时判断选中项目是否允许拖动。在部门、姓和名三层结构中,只允许拖动最低一层的数据。所以,在BeginDrag事件中编写如下脚本:

TreeViewItem ltvi_source

If ltvi_source <> 2 Then //判断用户选中的是否是职工,只能拖动职工

(Cancel!)

Else

//保存被拖动项目和其父项目,语句省略

End If

当用户在可以接收拖动数据的项目上时,应该高亮显示该项目,以给用户一定的操作暗示信息。首先判断当前鼠标所在的项目是否可以接收拖动的数据,如果可以接收则高亮显示该项目。在DragWithin事件中编写如下脚本:

TreeViewItem ltvi_over

If GetItem(handle,ltvi_over) = -1 Then

SetDropHightLight(0)

Return 0

End If

当用户在可以接收拖动数据的项目上释放鼠标时,应该对项目进行一定的处理。通常要删除源数据,并且在释放的目标项目中添加该数据。

【属性】

**TreeView属性

▲Visible

布尔类型,表示该控件是否可见。该属性的缺省值为True。

▲Enabled

布尔类型,表示控件是否可用。该属性的缺省值为True。

▲EditLabels

布尔类型,表示用户是否可以编辑控件中项目的标签。缺省值为False,不允许用户编辑标签。

▲HasButtons

布尔类型,表示是否在父项目的左边显示“+”和“-”按钮来表示是展开还是折叠状态。该属性的缺省值为True。

▲HasLines

布尔类型,表示在项目之间和父子项目之间是否有线相连。该属性的缺省取值为True。

▲LinesAtRoot

布尔类型,表示是否显示连接所有根项目的线条,该属性的缺省值为False。

▲DeleteItems

布尔类型,表示是否也许用户在控件中使用Delete按钮来删除项目。该属性的缺省取值为False。

▲DisableDragAndDrop

布尔类型,表示是否禁止用户进行拖拉操作。该属性的缺省值为True,不允许用户进行拖拉操作。

▲HideSelection

布尔类型,表示当TreeView控件失去焦点时选中的内容是否不保持高亮显示。该属性缺省值为True,表示当TreeView控件失去焦点时不高亮显示其中的选中项目。

▲ToolTips

布尔类型,表示是否显示工具栏气泡帮助。该属性的缺省取值为True。

▲CheckBoxes

布尔类型,表示项目左面是否显示复选框。缺省为False。

▲TrackSelect

布尔类型,表示项目是否进行选择跟踪,也就是当该属性取值为True,鼠标位于某个项目之上时,这项目改变颜色并且在项目下面显示下划线,表示当前项目正准备接收鼠标的操作。该属性的缺省取值为False。

▲FullRowSelect

布尔类型,表示当选中项目时是否整行显示。该属性的缺省值为False。

▲SingleExpand

布尔类型,表示是否只有一个项目可以展开。当该属性取值为True时,当前选中的项目展开,前面选中的项目自动折叠;当该属性取值为False时,可以有多个项目同时处于展开状态。该属性的缺省取值为False。

▲Border

布尔类型,表示该控件是否显示边框。该属性的缺省取值为True。该属性选中时,边框显示的样式还取决于BorderStyle属性的取值。

▲BorderStyle

枚举类型,表示边框的显示样式。该属性可用的取值有StyleBox!(矩形边框),StyleLowered!(嵌入边框),StyleRaised!(高抬边框)和StyleShadowBox!(阴影矩形边框)。

▲SortType

枚举类型,该属性用来规定控件中项目的排序规则。可用的取值有Ascending!(按字典顺序升序排列),Descending!(按字典顺序降序排列),UserDefinedSort!(根据用户在sort事件中的脚本进行排序)和Unsorted!(不排序)。

▲Indent

Integer类型,表示以PowerBuilderUnit为单位的子项目的缩进数。该属性的取值可以为负数,但是这样有可能便子项目左移出控件的边界。缺省取值为0。

▲Accelerator

Integer类型,取值为控件快捷链的ASCII码值。该属性保存了控件快捷键对应的ASCII码值。

**TreeViewItem属性

▲Bold

Boolean

项目标签上的文字以粗体显示

▲Childen

Boolean

项目是否拥有子项目,可以使用该属性拥有子项目,以便在以后触发ItemPopulate和ItemExpanding事件

▲CutHighLighted

Boolean

确定项目是否是要剪切的对象

▲Data

Any

用户想和项目关联的数据值

▲DropHighLighted

Boolean

确定项目是不是当前要拖拉的对象

▲Expanded

Boolean

确定项目是否展开

▲ExpandedOnce

Boolean

确定项目是否至少被展开过一次。当在控件的ItemPopulate事件中添加子项目时该属性很有用,可以用来判断是否已经添加了子项目

▲HasFocus

Boolean

判断项目是否获得当前焦点

▲ItemHandle

Long

项目的句柄。一个项目的句柄是惟一的,并且不同项目的句柄也不会有重复

▲Label

Label

项目的文本标签

▲Level

Integer

确定TreeView控件中的项目的层次。根层次的取值为1

▲OverlayPictureIndex

Integer

覆盖图像列表中的图像索引号

▲PictureIndex

Integer

和项目相连的图像在图标列表中的索引号

▲SelectedPictureIndex

Integer

当项目选中时与项目相连的图像在图标列表中的索引号

▲Selected

Boolean

确定项目是否被选中

▲StatePictureIndex

Integer

项目状态图标的索引号

【事件】

◆BeginDrag

handle

当用户在控件上单击鼠标并开始拖动时触发该事件

◆BeginLabelEdit

handle

当文本标签处于编辑状态并开始进行编辑时触发该事件

◆BeginRightDrag

handle

当用户在控件上单击鼠标右键并开始拖动控件时触发该事件

◆Clicked

handle

当用户点击控件时触发

◆Constructor

没有

当控件创建时触发。触发时机应该是包含控件的窗口打开之前

◆DeleteItem

handle

当删除项目时触发

◆Destructor

没有

当控件删除时触发。触发时机应该是在包含控件的窗口关闭时

◆DoubleClicked

handle

当用户双击控件时触发

◆DragDrop

source ,handle

当用户拖动一个对象到控件上并且松开鼠标时触发

◆DragEnter

source

当用户拖动一个其他对象进入控件时触发

◆DragLeave

source

当用户拖动一个其他对象离开控件时触发

◆DragWithin

source,handle

当用户拖动一个其他对象在控件中移动时触发

◆EndLabelEdit

handle,newtext

当用户结束标签的文本编辑时触发

◆GetFocus

没有

控件获得焦点时触发。触发该事件时控件还没有激活

◆Help

Xpos、Ypos

当用户点击F1按钮或者其他方式要获取帮助时触发

◆ItemCollapsed

handle

当控件的项目折叠后触发

◆ItemCollapsing

handle

当控件中的项目正在折叠时触发

◆ItemExpanded

handle

当控件的项目展开后触发

◆ItemExpanding

handle

当控件的项目正在展开时触发

◆ItemPopulate

handle

当控件中的项目正在打开其子项目时触发

◆Key

key,keyflag

当用户点击一个按钮时触发

◆LoseFocus

没有

控件失去焦点时触发。该事件触发时控件还是可用的

◆Other

wparm,lparm

当出现其他没有映射到PB消息上的消息时触发该事件

◆RightClicked

handle

当用户在控件上点击鼠标右键时触发该事件

◆RightDoubleClicked

handle

当用户在控件上双击鼠标右键时触发该事件

◆SelectionChanged

oldhandle,newhandle

某项目被选中时触发

◆SelectionChanging

oldhandle,newhandle

某项目被选中之前触发

◆Sort

handle1,handle2

当控件被排序时每次比较都触发该事件

【函数】

★AddPicture

向TreeView控件中添加图标或者位图。该函数的语法格式为ture ( picturename )。

★AddStatePicture

向TreeView控件的状态图标列表中添加指定的位图或者图标。该函数的语法是tePicture ( picturename )。

★DeleteItem

将TreeView控件中指定的项目及其子项目(如果有的话)都删除。函数的语法是Item ( itemhandle ),其中itemhandle保存的是项目的惟一句柄,在该控件的很多事件中都有handle这个参数,可以直接使用,也可以使用其他函数首先读取句柄。

★DeletePicture(s)

删除控件中指定索引号的图片,函数格式为Picture

( index )。函数Pictures( )用来删除控件中所有的图片。

★DeleteStatePicture(s)

删除控件中指定索引号的状态图标,函数的格式是StatePicture ( index )。函数StatePictures ( )用来删除控件中所有的状态图标。

★EditLabel

该函数的语法是bel ( itemhandle ),作用是将句柄为itemhandle的项目的标签置为编辑状态。

★ExpandAll

该函数的语法是All ( itemhandle ),作用是将句柄为

itemhandle的项目下的所有子项目展开。展开控件中的所有项目,可以对根级项目使用该函数。

★ExpandItem

函数的语法是Item ( itemhandle ),作用是展开句柄为itemhandle的项目。该函数ExpandItem仅展开指定的项目,而不像ExpandAll那样展开指定项目的所有子项目。

★FindItem

语法是em(navigationcode,itemhandle),作用是查找和Itemhandle项目的相对位置为navigationcode指定模式的项目。参数navigationcode是一个枚举型变量,可用的取值如下所示。

取 值 含 义

RootTreeItem! 查找第一个根级项目,如果控件中还没有添加任何项目则返回-1

NextTreeItem! 查找处于同一级别的下一个项目,如果没有下一个项目则返回-1

PreviousTreeItem! 查找处于同一个级别的前一个项目,如果没有前一个项目则返回-1

ParentTreeItem! 查找父项目的句柄,如果是根项目则返回-1

ChildTreeItem! 查找第一个子项目,如果项目是折叠的,则将项目置为打开状态。

如果没有子项目则返回-1

FirstVisibleTreeItem! 查找控件中第一个可视项目,注意滚动条距顶可视项目的位置

NextVisibleTreeItem! 查找下一个展开项目,如果下一个展开项目在控件的 可视项目的位置

PreviousVisibleTreeItem!查找前一个展开的项目

CurrentTreeItem! 查找当前选中的项目。如果当前没有选中的任何项目则返回-1

DropHighLightTreeItem! 查找最近被设置了DropHightLighted属性的项目

灵活运用如上所列的取值,可以很轻松地遍历TreeView中的所有项目。

★GetItem

函数语法是m ( itemhandle, item),作用是将句柄由参数itemhandle指定的项目的数据检索到TreeViewItem结构的参数item中。

★InsertItem

函数语法是Item(handleparent,handleafter,label,

pictureindex ),作用是将标签为label的项目插入到控件中,插入位置在handleparent指定句柄的项目之下作为它的子项目,句柄为handleafter同级项目的后面。该函数还有另外一种语法格式是Item

( handleparent, handleafter, item ),作用是将TreeViewitem类型的变量item指定的项目插入到控件的指定位置,另外两个参数的含义和前面完全相同。

★InsertItemFirst

ItemFirst (handleparent,label,pictureindex )或者ItemFirst ( handleparent, item )都可以。前面一种语法中,插入的项目标签内容由label指定,图标由pictureindex指定。在后面一种语法中,插入项目的属性可以更详细地设定,插入的位置也是由handleparent参数指定。

★InsertItemLast

ItemLast(handleparent,label,pictureindex)或者ItemLast ( handleparent, item )两种语法格式,都可以将指定的项目插入到由参数handleparent指定的项目下并作为它的最后一个子项目。插入项目的属性或者由TreeViewItem类型的参数item详细设定,或者由label指定标签、pictureindex指定项目的图标。

★InsertItemSort

ItemSort ( handleparent, label, pictureindex )或者ItemSort ( handleparent, item )两种语法格式,都可以将指定的项目按一定的排序方式插入到控件中。参数的含义和前面函数中参数的含义相同。

★SelectItem

函数语法Item ( itemhandle ),作用是选中由句柄itemhandle指定的项目。

★SetItem

函数语法m ( itemhandle, item ),作用是用TreeViewItem结构类型的参数item来修改itemhandle句柄指定的项目。

////////////////////////////////////////////

图形控件

【其他】

■轴

类型轴--Category--String型、数值型、Date型、Datetime型和Time型

值轴--Value--数值型、Date型、Datatime型和Time型

系列轴--Series--String型

■图形外观

PowerBuilder提供了17种图形外观,可以粗略划分为平面图形和立体图形两大类,也可以更细致地划分为5类,即(1)条型、列型(包括它们的立体变形);(2)区域和线型图形(包括它们的立体变形);(3)堆积图;(4)饼型图(包括立体变形);(5)散点图。

■图形控件的三种使用方式。使用Graph显示样式的数据窗口是Graph类型控件最常使用的一种方式,因为这种方式提取数据比较方便,运行时动态改变要查看的范围也比较灵活。但是,由于这种使用方式的数据来源只局限于数据库,所以当应用程序还需要应用处理其他来源的数据时可以考虑使用窗口中的Graph控件。最后一种是在数据窗口中的Graph控件,因为这种方式不能自动提取数据,需要编写的脚本比较多,所以这种方式使用比较少。但是,因为提取数据都是由脚本完成,所以开发人员可以有更多的灵活性,可以让用户在运行时根据需要更灵活地控制控件的运行,所以在高级的应用软件中该控件还是经常使用的。

【属性】

▲Title属性:该届性保存的是Graph的标题内容,在控件的上方显示的大字标题,是String类型的属性。创建Graph控件后首先就要修改该属性,该属性应该说明图形中数据的用途、统计范围等信息。该属性可以在运行时修改。比如,修改窗口中Graph控件gr_1的标题,可以使用gr_="商品销量统计";要修改Graph显示样式的数据窗口对象的标题,可以使用dw__="商品销量统计";如果要修改数据窗口对象中Graph控件

gr_1的标题,可以使用语句dw__="商品销量统计"。

▲GraphType属性:指定图形的外观类型。该属性的设定比较直观,都有相应样式的图标,在开发时设定只要在相应的属性窗口中选择就可以了。如果在运行时设定,可以用脚本修改控件的属性取值。对于窗口中的Graph控件使用相应的枚举值,gr_ype = Pie3D!;对于数据窗口中的控件或者Graph显示祥式的数据窗口使用相应的数值,dw__ype = 17。

▲属性:该属性可以设定不同坐标轴的标签。其中Axis可以是category,values和series三个。当统计图的设置需要根据用户的选择来确定时,需要在运行时修改坐标轴标签,可以使用该属性。

窗口中的Graph控件gr_1

gr_ = "haha"

gr_ = "hoho"

gr_ = "hehe"

数据窗口控件对应的数据窗口对象中图形控件gr_1

dw__ = "xaxa"

dw__ = "xoxo"

dw__ = "xexe"

图形显示样式的数据窗口中图形gr_1(同上)

▲Legend属性:当Graph中有系列时该属性可以控制例图(legend)是否显示以及显示在什么位置。数据窗口中取值为数字,窗口控件中的取值为枚举型。

窗口中的Graph控件gr_1:gr_ = atleft!

数据窗口控件对应的数据窗口对象中图形控件gr_1和图形显示样式的数据窗口

中图形gr_1:

dw__ = 1

▲(其他属性见帮助)

**Graph控件的属性

General属性页

▲GraphType属性:该属性用来定义图形控件的外观。PowerBuilder提供了17种图形外观,见前面

▲SeriesSort和CategorySort属性:该属性确定系列轴和分类轴的排序方式,是枚举型属性,有三个可用的取值:Ascending!为升序排列,Descending!为降序排列,Unsort!为原始顺序。

▲Legend属性:该属性用来定义是否显示例图以及显示在什么位置。可用的取值有atbottom!(底部),attop!(上面),atleft!(左面),atright!(右面)和nolegend!(不显示)。

▲Perspective属性:该属性用来确定图形和窗口之间的距离,只适用于三维图形。 通过拖动滑块可以调整该属性取值的大小,滑块拖动的同时就可以看见效果。

▲Elevation属性:该属性用来调整三维图形的视角,只适用于三维图形。拖动属性窗口中该属性的滑块向左移动时图形顺时针旋转,向右移动时图形做逆时针旋转。

▲Rotation属性:该属性在水平角度旋转图形,只适用于三维图形。该属性和上面的Elevation属性相配合,可以给用户最佳的观看角度。当然,在程序运行时允许用户修改这两个属性是最好的。

▲OverLapPercent属性:该属性确定图形的各个系列的重叠程度,以百分比的形式表示,该属性适用于平面图和列型图。在属性窗口中可以通过调节滑块来调整属性的取值。

▲Spacing属性:该属性用来确定分类轴上数据条或列之间的距离大小,以占用条或者列宽度的百分比表示。该属性不能用于平面区域图、平面线型图、平面饼图和散点图。例如,gr_g=110表示数据条之间的距离为条本身宽度的110%。

▲Depth属性:该属性用来调整三维图形的厚度,只适用于三维图形。

Axis属性页

▲Axis下拉框:该下拉框用来选择要设置属性的坐标轴,可以选择的值有Category和Values,当图形外观为三维并且有系列轴时还可以选择Series。进

入到Axis属性页时首先就应该明确该下拉框的取值。选择不同的轴,该属性页中的属性即为选定轴对应的属性。当在脚本中修改图形控件的外观时,也应该指定是对哪个坐标轴的属性进行操作。语句格式是:ty=属性值。其中,axisname的值和该下拉框的可用值相同,property为坐标轴的属性。

▲Label属性:该属性用来定义Axis下拉框中选中的坐标轴的标签。上面已经介绍过如何在脚本中修改该属性,在开发环境中可以直接输入标签的内容。

▲ShareBackEdge属性:布尔类型属性,该属性用来指定三维图形是否有背景阴影。该属性缺省为True,表示背景有阴影。

▲AutoScale属性:布尔类型的属性,表示是否自动根据添加的数据值确定轴上显示的数据的刻度,即是否自动确定数据的最大值和最小值。并不是对所有类型的图形外观都可以修改该属性的,绝大多数的图形外观中该属性都为True并且不允许为False,只有散点图可以修改该属性为False或者为True。

▲DataType属性:该属性用来确定在坐标轴上显示的数据的类型。不同的坐标轴可以使用的数据类型不同,在前面已经做过详细的介绍。 在开发环境中通过选择可以指定坐标轴的数据类型。

▲RoundTo和RoundToUnit属性:这两个属性确定在AutoScale属性选中时轴上刻度的最大值和单位。当坐标轴变量的取值大于RoundTo属性的取值时,该坐标轴的最大刻度自动调整增加RoundTo的整数倍。比如,RoundTo取值为15,而坐标轴变量取值为18,则自动将该轴的最大刻度调整为30;如果坐标轴的最大取值为31,则坐标轴自动调整最大刻度为45。当坐标轴变量的最大取值都小于RoundTo属性值时,则坐标轴的最大刻度为RoundTo的取值。该属性的设置要和坐标轴的数据类型相匹配。RoundTo是Double类型,RoundToUnit是枚举类型,它的取值范围取决于坐标轴的数据类型,坐标轴的每种数据类型都对应一些可用的RoundToUnit取值。比如,当坐标轴的DataType属性为AdtDate!时,RoundToUnit的取值可以为rndDefault!,rndyears!,rndMonths!和rndDays!等。

▲MinimumValue和MaximunValue属性:当AutoScale属性为False时该属性可用,同时RoundTo和RoundToUnit属性不可用。所以只有散点图中可以使用该属性,该属性用来设置坐标轴的最大值和最小值。

▲ScaleType属性:该属性设置刻度的类型。通常的刻度类型是线型的,但有时也许需要对数类型的刻度。该属性的三个可用值是Linear!,Log10!和Loge!。

▲设置主刻度线:坐标轴的刻度线可以进行二级划分,即主刻度线和次刻度线,这样读取数据更方便、快捷。主刻度线的设置需要一组属性,包括主刻度线的个数(Major Divisions),刻度线的类型(MajorTic属性,可用的取值有4个:Outside!表示向外,Inside!表示向内,Straddle!表示交叉和Notic!表示没有刻度线),是否显示主刻度线网格线(MajorGridLine属性,有6个可用的值,

可以直接在下拉框中选择需要的类型),每组几个刻度显示标签(DisplayEveryNLabels属性)等。

▲设置次刻度线:次刻度线的许多属性和主刻度线的类似,包括次刻度线的个数(MinorDivisions属性),次刻度线的类型(MinorTic)和是否显示次刻度网格线(MinorGridLine)等。

▲线条风格:用来指定主轴线(PrimaryLine属性)、辅助轴线(SecondaryLine属性)、0值线(OriginalLine)和框架线(Frame)等的线段类型。可以使用的类型有Continuous!,Dash!,Dot!,DashDot!,DashDotDot!和Transparent!。

Text属性页

该属性页中设置控件各个部分显示的文字内容和文字的显示方式。文字的这些显示属性是通过grDispAttr对象来定义的,可以在PB提供的工具Browser窗口中查看该对象的详细属性。在脚本中需要引用这些属性时可以使用如下格式:

ty

其中的Property可以从Browser窗口中查得,其他表示相应的属性。比如,要修改Graph控件gr_1的Series坐标轴的字体显示属性为Italic,可以使用下面的语句:

gr_=True

▲TextObject下拉框:在图形控件中有很多的文本对象,在设定属性之前应该首先指定需要设定哪些文本对象的属性,该下拉框中就是要选择设定属性的文本对象。各个取值的含义如下:

Title 图形控件的标题

Value Axis Label 数据轴的标签

Legend 例图

Value Axis Text 数据轴的文本

Category Axis Label 分类轴的标签

Series Axis Label 系列轴的标签

Category Axis Text 分类轴的文本

Series Axis Text 系列轴的文本

▲DisplayExpression属性:该属性确定文本对象的显示内容,单击右侧的省略号按钮弹出编辑窗口,在编辑窗口中可以编辑表达式。表达式中可以使用运算符以及系统为Graph控件提供的一些缺省变量,这些都可以在编辑窗口中通过选择来组合表达式。

▲Escapement属性:该属性用来旋转文本对象的显示方向(对于标题和例图不可用)。例如,在TextObject下拉框中选择Category Axis Label文本时,然后在Escapement属性框中输入900,则文本对象逆时针旋转了90度,变成了垂直显示。在脚本中需要控制文本对象的旋转角度,可以用脚本修改相关对象的Escapement属性。比如修改gr_1的分类轴上标签显示方向:gr_ment=1800

数据窗口中的图形控件和Graph显示样式的数据窗口对象的属性

这两种情况下的图形实际上是相同的,都是图形控件,并且都可以为图形命名,使用该名称引用图形控件。下面的介绍中对这两种情况不加以区分。

▲Data属性页

该属性页用来设置Graph控件最重要的几个属性,即图形控件的数据来源。Category,Value与Series分别用来设定几个轴的数据来源,可以直接选择其中的字段或者表达式,也可以手工输入,数据窗口对象中的很多表达式在这里都可以直接使用。比如,可以定义Day(RegDate)为Series的数据源,其中RegDate是一个Date类型的字段,Day是一个提取日期的函数。对于初学者如果不能确定表示式是否正确,一个好的方法是将表达式首先在数据窗口对象的计算字段表达式窗口中进行校验,如果通过则可以使用。使用表达式可以更方便、精确地控制图形的显示。

数据窗口中的Graph控件可以选择显示数据的范围为page或all,而Graph显示样式的数据窗口只能选择all,即所有的数据。

▲General属性页

该属性页中设置常用的属性,Graph显示样式的数据窗口有该属性页,实际上该属性页和其他显示样式的数据窗口区别不大,只是增加了Name,Line Color与Shade Color三个属性,这三个属性分别用来设置图形控件的名称、线条的颜色和阴影的颜色,其他属性参见前面关于数据窗口对象的介绍。

▲Graph属性页

该属性页设置图形的外观,很多属性都和窗口中的Graph控件在General属性页中的同名属性含义是相同的,在此不再赘述。

【函数】

Graph控件函数

★AddCategory函数:函数的语法是egory(categoryname),作用是添加一个分类轴。只有当分类轴的数据类型为string时可以使用该函数。函数执行成功返回新添加分类轴的索引号,如果已经有同名的分类轴存在则返回同名分类轴的索引号。当原分类轴设置了排序属性,则新添加的分类轴按照原规则自动调整到适当的位置。函数执行错误返回-1。当需要在指定的位置添加分类轴时可以使用InsertCategory函数,当需要添加非string类型的分类袖时使用InsertCategory函数。例如,gr_agory("pcs")的作是向图形控件中添加一个名称为pcs的分类轴。

★AddSeries函数:函数的语法是ies(seriesname),作用是向图形控件controlname中添加名称为seriesname的系列轴。其中,seriesname为string类型的参数,

是要添加的系列轴的名称。函数执行成功返回新添加的系列轴的索引号,如果已经有同名系列轴存在,则返回同名系列轴的索引号。函数执行错误返回-l。当需

要添加其他类型的系列轴时使用InsertSeries函数。例如,向图形控件gr_1中添加一个名称为costs的系列轴,并保存它的索引号,可以使用语句:ls_s =

gr_ies("costs")

★AddData函数:作用是向图形控件的数据轴添加数据,该函数有两种语法格式。a(seriesnumber,datavalue {,categoryvalue})用于除了散点图之外的所有形式的图形控件,而a(seriesnumber,xvalue,yvalue)专门用于散点图。第一种语法格式时,将数据添加到指定系列轴的指定分类轴上(如果指定了分类轴)或者最后一个分类轴上(没有指定分类轴);当指定的分类轴不存在时则直接创建该分类轴,并按照原来分类轴的排序规则直接将该分类轴调整到适当的位置,然后将数据添加到相应的位置;如果指定的分类轴已经存在则数据将替换原来的数据。第二种语法格式时,xvalue和yvalue分别为要添加的X和Y轴数据的大小,添加的位置由参数seriesnumber确定。这两种格式的函数,不管哪种都经常和函数FindSeries搭配使用,除非只有数量确定的系列轴。

★SetDataStyle函数:该函数有三种语法格式,分别用来设定图形控件的颜色,线型和填充方式等。语法如下:

aStyle(seriesnumber,datapointnumber,colortype,color)

aStyle(seriesnumber,datapointnumber,linestyle,linewidth)

aStyle(seriesnumber,datapointnumber,enumvalue)

其中controlname是Graph控件的名称。各个参数的含义如下:

seriesnumber:integer类型,是要设置的数据所在系列的索引号

datapointnumber:integer类型,是要设置的数据所在数据点的索引号(也可以理解成是category的索引号)

colortype:GrcolorType枚举类型,用来指定要设置数据哪方面的颜色。可用的取值有Foreground!(文本颜色),Background!(背景颜色),LineColor!(线段的颜色)和Shade!(阴影的颜色,只适用于三维图形)

color:long类型,为colortype的新颜色。经常使用GRB函数来计算颜色,也可以按65536*Blue + 256*Green + Red的公式自己来计算颜色的取值

linestyle:LineStyle枚举类型,用来指定线段的类型。可用的取值有Continuous!,Dash!,DashDot!,DashDotDot!,Dot!与Transparent!

linewidth:integer类型,是用象素数量来表示的线段的宽度

enumvalue:枚举类型,用来设置数据点的填充方式或者符号类型,系统会根据参数的取值自动识别是设置填充方式还是符号类型。当设置填充方式时的可用值有Bdiagonal!,Diamond!,Fdiagonal!,Horizontal!,Solid!,Square!和Vertical!

三种语法格式中前面的两个参数都相同。如果想要将经过颜色设置的数据点恢复到缺省的颜色,可以使用函数gr_ataColors(seriesnumber,datapointnumber)。

★SetDataPieExplore函数:该函数是一个非常有用的函数,可以使饼型图中某部分的图形分离出来,在进行数据分析时经常使用该函数进行强调显示。该函数只适用于饼型图,语法是:

aPieExplode(serisnumber,datapoint,percentage),其中,参数percentage表示分离的饼块离开饼型图中心的距离占饼型图半径的百分比,取值范围为0-100,可以为小数。函数执行成功返回1,执行失败返回-1,如果参数为NULL,则返回NULL。经常在图形控件的DoubleClicked事件中调用该函数和函数ObjectAtPointer配合。使用户双击部分分离显示。如:

integer li_series,li_datapoint

grobjecttype lgobt_clicked

if ype <> piegraph! and ype <> pie3d! then return

lgobt_clicked = atpointer(li_series,li_datapoint)

if (li_series > 0 and li_datapoint > 0) then

apieexplode(li_series,li_datapoint,50)

end if

和该函数相关的函数是GetDataPieExplode,它的作用是查看某个饼块是否从饼型图中分离出来,并且得到分离出来的饼块的百分比。函数的语法是:aPieExplode(series,tage)

★SetSeriesStyle函数:该函数有四种语法格式,分别用来设置系列轴的颜色、线型、填充方式与是否重叠等。语法如下:

iesStyle(seriesname,colortype,color)

iesStyle(seriesname,linestyle,linewidth)

controlname,SetSeriesStyle(seriesname,enumvalue)

其中,参数seriesname为string类型的系列轴的名称,其他参数的意义和函数SetDataStyle中的同名参数是相同的。该函数经常和SeriesName函数配合使用,来读取已知索引号的系列轴的名称,然后再调用该函数设置其风格。如,下面的脚本用来改变用户点击处的系列轴的填充方式:

string ls_seriesname

integer li_seriesnbr,li_seriespoint

grobjecttype lgobt_mousehit

lgobt_mousehit = atpointer(li_seriesnbr,li_seriespoint) //获取用户点击信息

if lgobt_mousehit = typeseries! then //如果点击的是系列轴

ls_seriesname = gr_name(li_seriesnbr) //获取点击的系列轴的名称

iesstyle(ls_seriesname,horizontal!) //设置系列轴的填充方式

end if

上面的函数可以允许应用程序在运行时让用户根据自己的偏爱来修改图形控件的外观,另外还应该让用户选择他所偏爱的图形类型。这可以通过改变控件的graphtype属性来实现,

可以构建下拉列表拒和下拉图形列表框等很多方式,让用户来选择图形控件的外观。

★其他函数(具体语法见帮助)

FindaCategory 查找特定标签内容的分类轴的索引号

FindSeries 查找特定标签内容的系列轴的索引号

GetData 获取指定系列、数据点处的数据


本文标签: 属性 项目 控件 显示