首页 百科知识 对话框设计

对话框设计

时间:2022-06-19 百科知识 版权反馈
【摘要】:二、对话框设计对话框是应用程序用户界面不可或缺的重要组成部分。使用ProgressBar语句可以显示一水平进度条的对话框。子程序指出作业状态并分配一个值给特殊的MapBasic变量ProgressBar。利用ProgressBar的值和Range子句指定的n值,MapBasic重新显示对话框的进度条,以反映最新完成的百分比。

二、对话框设计

对话框是应用程序用户界面不可或缺的重要组成部分。对话框有标准对话框和用户自定义对话框两种类型,MapBasic提供了相应的语句和函数用于创建应用程序的对话框。

1.标准对话框

(1)显示信息对话框。使用Note语句可以显示一个带有一条信息和一个“确认”按钮的简单对话框。Note语句的语法形式为:

Note message

其中,message为要显示的内容的表达式。例如:

Note"Total records processed:"+Str$(i_count)

The message expression does not need to be a string expression.If message is an object expression,MapBasic will automatically produce an appropriate string(e.g."Region")for display in the Note dialog.I

Note语句中,message表达式可以不是字符型。如果message为对象表达式,MapBasic将自动产生一个适当的字符串(如"Region")显示在对话框中。如果message为字符串表达式,串长能达到300个字符,占据6行,显示时根据message内容自动调整对话框的大小。

Print语句是另一种显示信息对话框的语句。其语法形式为:

Print message

Print语句将提示或状态信息显示在消息窗口中。消息窗口是一种不出现在MapInfo标准用户界面的特殊窗口。它显示与MapBasic程序有关的消息,可以用消息窗口显示状态消息(如"Record deleted")或用于程序显示提示信息。在显示信息时,可以通过Set Window语句设置显示信息的字体。MapBasic通过Open Window语句打开消息窗口,当消息窗口关闭时,使用Print语句,Mapbasic将自动打开消息窗口。

(2)询问对话框。调用Ask()可以弹出一个带有提示信息和两个按钮("OK"和"Cancel")的对话框。该函数的语法形式为:

Ask(prompt,ok_text,cancel_text)

其中,prompt为在对话框中显示提示的字符串,ok_text为显示在确认按钮上的字符串,cancel_ text为显示在取消按钮上的字符串。若用户选择了确认按钮,则函数返回TRUE值,反之,若用户选择取消按钮,则该函数返回FALSE值。例如:

Dim choice As Logical

choice=Ask("Do you want to continue?","Yes","No")

(3)文件选择对话框。使用FileOpenDlg()函数可以显示一个标准的打开文件对话框。函数的语法形式为:

FileOpenDlg(path,Filename,Filetype,prompt)

其中,Path为文件的路径,Filename为文件名,Filetype为文件扩展名,Prompt为对话框顶部的提示。

FileOpenDlg()函数的功能是弹出一个文件选择对话框,如果用户选择了一个文件,则函数返回被选择文件的文件名,如果用户取消了对话框,则返回一个空串。例如:

Dim s_filename As String

s_filename=FileOpenDlg("","","TAB","Open Table")

(4)进度指示对话框。使用ProgressBar语句可以显示一水平进度条的对话框。ProgressBar语句语法形式为:

ProgressBar status_message

  Calling handler

  [Range n]

其中,status_message为一个字符串,显示在对话框中的提示信息,handler为子过程名,n表示完成工作的总数值。

ProgressBar语句显示一个带水平进度条和Cancel按钮的对话框,进度条表示完成整个操作的百分比,用户点击Cancel按钮可停止操作。在ProgressBar语句后,MapBasic应用程序可调用函数Command Info(CMD_INFO_DLG_OK)确定操作是否完成或用户是否已取消操作。

Calling子句调用一个子过程,与ProgressBar语句配合使用,子程序必须完成一定的程序操作。子处理程序按每次调用完成全部工作的一小部分来编写。一旦ProgressBar语句发出,MapBasic将重复调用子处理程序,直至用户按击Cancel或子处理程序指出过程结束。子程序指出作业状态并分配一个值给特殊的MapBasic变量ProgressBar。利用ProgressBar的值和Range子句指定的n值,MapBasic重新显示对话框的进度条,以反映最新完成的百分比。

2.自定义对话框

自定义对话框是应用程序根据应用需要而建立的应用程序与用户会话的一类窗口,是大部分应用程序不可或缺的用户界面之一。使MapBasic提供的Dialog语句可以建立自定义对话框,并可根据需要,利用其Control子句添加相应的控件。Dialog语句的语法形式为:

Dialog

 [Title title]

 [Width w][Height h][Position x,y]

 [Calling handler]

 Control control_clause

 [Control control_clause…]

其中,title为显示在对话框上标题,w定义对话框的宽度,h定义对话框的高度,x、y定义对话框初始位置,handler为在用户使用对话框前调用的过程名,Control_clause为控制子句,用于对对话框中各种控件的设置。

(1)Button按钮。在对话框中添加Button控件的Control子句的语法形式为:

Control{Button|OKButton|CancelButton}

 [Position x,y][Width w][Height h]

 [ID control_ID]

 [Calling handler]

 [Title title_string]

 [Disable][Hide]

其中,x、y按对话框单位定义控件的位置,w和h按对话框单位定义控件的宽(默认值为40)和高(默认值为18);control_ID为一个表明控件ID的整数;Handler为单击按钮调用的过程名;title_string为显示在按钮上的文本标识;Disable设置控件初始状态为不可用;Hide设置控件初始状态为隐藏。

Button控件是最普通的控件,因为几乎每个对话框都至少有一个Button。MapInfo提供了两种特殊的Button控件:OKButton和CancelButton,每一个对话框都不应有多个OKButton或CancelButton。

(2)StaticText静态文本控件。在对话框中添加StaticText静态文本控件的Control子句的语法形式为:

Control StaticText

 [Position x,y][Width w][Height h]

 [ID control_ID]

 [Title title_string]

 [Hide]

其中,x、y、w、h、Control_ID含义与Button控件参数相同。title_string作为标识显示在对话框中的文本字符串。Hide关键字设置控件初始状态为隐藏。

(3)EditText文本控件。在对话框中添加EditText文本控件的Control子句的语法形式为:

Control EditText

 [Position x,y][Width w][Height h]

 [ID control_ID]

 [Value initial_value]

 [Into variable]

 [Disable][Hide][Password]

其中,x、y、w、h、Control_ID含义与Button控件参数相同。initial_value对文本控件中初始字符串,variable为保留文本框内容的字符串变量名或数值变量名。Disable设置初始控件状态为不可用,Hide设置控件初始状态为隐藏,Password建立密码输入文本框,当用户键入时显示*号。

EditTex控件产生一个文本框,用户可以在此区域中输入一些信息。用户键入内容不受控制宽度限制,如果用户键入内容较多,不能一次在EditText文本框中显示。则MapInfo自动滚动文本,一个EditText文本框可容纳32767个字符,高度h如果大于20,则控件为多行,MapInfo自动随用户键入换行。

(4)GroupBox组合框控件。在对话框中添加GroupBox控件的Control子句的语法形式为:

Control GroupBox

 [Position x,y][Width w][Height h]

 [Title title_string]

 [Hide]

其中,title_string为出现在方框左上角的文本字符串,Hide关键字设置控件初始状态为隐藏。GroupBox控件是一个左上角带文本标识的矩形,它只起一个分隔的作用。

(5)ListBox列表控件与MultiListBox多重列表控件。在对话框中添加列表控件的Control子句的语法形式为:

Control{ListBox|MultiListBox}

 [Position x,y][Width w][Height h]

 [ID control_ID]

 [Calling handler]

 [Title{str_expr|From Variable str_array_var}]

 [Value i_selected]

 [Into i_variable]

 [Disable][Hide]

其中,str_expr为一个串表达式,包含出现在列表控件中以分号定界的选择项列表,str_array_ var为串变量数组名,为列表中的数据源,i_selected为一个短整数,表示对话框首次出现时,列表中哪一项被选中,如果缺省Value子句,则没有项被初始选中,i_variable为一个短整数变量,用于储存用户最终选择的结果。

如果列表包括的项多于一次在列表框中所能显示的项,MapBasic自动在列表框右边增加滚动条。MultiListBox控件可以实现多选,而ListBox控件只能单选,其他功能两者一样。

(6)Picker对象设置控件。在对话框中添加Picker对象设置控件的Control子句的语法形式为:

Control{PenPicker|BrushPicker|SymbolPicker|FontPicker}

 [Position x,y][Width w][Height h]

 [ID control_ID]

 [Calling handler]

 [Value style_expr]

 [Into style_var]

 [Disable][Hide]

其中,w和h的缺省为20;Style_expr是一个Pen、Brush、Symbol或Font表达式,定义控件的初始样式,表达式必须与控件类型匹配;Style_var是一个Pen、Brush、Symbol或Font变量,用于存储选择结果。

PenPicker控件是选择线型,BrushPicker控件是选择填充图案和颜色,SymbolPicker控件是选择符号,FontPicker控件是选择字体。Dialog语句运行后,在对话框中显示相应的样式选择按钮,单击该按钮,弹出对应的样式选择对话框供用户选择。

(7)PopupMenu下拉列表控件。在对话框中添加PopupMenu下拉列表控件的Control子句的语法形式为:

Control PopupMenu

 [Position x,y][Width w]

 [ID control_ID]

 [Calling handler]

 [Title{str_expr|From Variable str_array_var}]

 [Value i_selected]

 [Into i_variable]

 [Disable]

其中,w按对话框单位定义控制的宽度,缺省为80;Handler当用户从下拉菜单选择项时调用的过程名;其他参数与ListBox列表控件参数含义相同。

如果Dialog语句中包含Control PopupMenu子句,则对话框中包括一个弹出式菜单,供用户在其中选择。

(8)RadioGroup单选控件。在对话框中添加RadioGroup单选控件的Control子句的语法形式为:

Control RadioGroup

 [Position x,y]

 [ID control_ID]

 [Calling handler]

 [Title{str_expr|From Variable str_array_var}]

 [Vaule i_selected]

 [Into i_variable]

 [Disable][Hide]

如果Dialog语句中包括Control RadioGroup子句,则对话框中出现一组单选按钮,每个单选按钮是一个空心圆或填充圆同右边的文本标识,一次只能选中Radio按钮。

(9)CheckBox复选框。在对话框中添加CheckBox复选控件的Control子句的语法形式为:

Control CheckBox

 [Position x,y][Width w]

 [ID control_ID]

 [Calling handler]

 [Title title_string]

 [Value log_value]

 [Into log_variable]

 [Disable][Hide]

其中,Title_string为显示在Check_box右边的文本字符串,Log_value为一个逻辑值,设置false表示初始时控件未被选择,Log_variable为逻辑变量名,存储选择结果。

如果Dialog中包括Control CheckBox子句,则对话框含check_box控件。Value子句控制控件初始的显示,如果省略Valve子句或定义值为TRUE,则check_box为选择状态,否则为不选择状态。

3.获取当前对话框中控件的状态

利用ReadControlValue()函数可以获取当前对话框中控件的状态。该函数语法形式为: ReadControlValue(id_num),其中,id_num为控件的ID值,如果id_num为-1,则函数返回用户最后操作的控件的值。函数根据控件的类型返回一个整型数、逻辑值、字符串、线样式、填充样式、符号样式或字体样式。

注意,只有在活动对话框下,ReadControlValue()函数才有效,可在控件的处理程序中调用ReadControlValue()函数。如果id_num超出了有效范围,则出现ERR_FCN_ARG_RANGE错误;当前没有活动对话框时,调用ReadControlValue(),出现ERR_INVALID_READ_CONTROL错误。

表5-9列出了针对不同类型的对话框控件ReadControlValue()函数的返回值。

表5-9 ReadControlValue()函数的返回值

img135

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈