### GUI函数

#### 内容

- GUI函数简介
- GUI功能函数
- 消息对话框的类型控制字
- 消息对话框的图标控制字
- 消息对话框的默认按钮控制字
- 消息对话框的模式控制字
- 消息对话框的其他控制字
- 消息对话框的返回字

#### GUI函数简介

GUI函数目前只能用于本地化执行，如WORD模板中，以及其他本地执行的应用中。GUI函数为TSL语言与用户提供一个运行中的交互提供了可能。如：显示消息对话框，显示文件打开对话框，显示输入对话框等等。

#### GUI功能函数

##### 内容

- 对话框数据类别函数
- InputQuery
- PromptForFileName
- MessageBox
- InputDialog
- BuildOptionComboValue
- ShowValue

##### 对话框数据类别函数

###### 内容

- uiInteger
- uiBoolean
- uiString
- uiDate
- uiDouble
- uiMarketList
- uiIndexList
- uiStockList
- uiSelfBkList
- uiSysBkList
- uiRightStyle
- uiCycle
- uiReportDate
- uiBasicIDList
- uiUserDefine
- uiOneDimArray
- uiTwoDimDoubleArray
- uiOneDimStringArray
- uiTwoDimStringArray
- uiOneDimDateArray
- uiTwoDimDateArray
- uiTable
- uiUserData
- uiRightDay
- uiBasicID
- uiYear
- uiMonth
- uiDay

###### uiInteger

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiInteger();
// 结果：0
```

###### uiBoolean

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiBoolean();
// 结果：1
```

###### uiString

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiString();
// 结果：2
```

###### uiDate

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
return rdo2 uiDate();
// 结果：3
```

###### uiDouble

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiDouble();
// 结果：4
```

###### uiMarketList

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiMarketList();
// 结果：5
```

###### uiIndexList

用途：对话框数据类别函数相关函数。
参数：无。
返回：整数。

范例

```tsl
return rdo2 uiIndexList();
// 结果：6
```

###### uiStockList

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiStockList();
// 结果：7
```

###### uiSelfBkList

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiSelfBkList();
// 结果：8
```

###### uiSysBkList

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiSysBkList();
// 结果：9
```

###### uiRightStyle

用途：进行字符串提取或替换处理。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiRightStyle();
// 结果：11
```

###### uiCycle

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiCycle();
// 结果：12
```

###### uiReportDate

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
return rdo2 uiReportDate();
// 结果：13
```

###### uiBasicIDList

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiBasicIDList();
// 结果：14
```

###### uiUserDefine

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiUserDefine();
// 结果：17
```

###### uiOneDimArray

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiOneDimArray();
// 结果：18
```

###### uiTwoDimDoubleArray

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiTwoDimDoubleArray();
// 结果：19
```

###### uiOneDimStringArray

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiOneDimStringArray();
// 结果：20
```

###### uiTwoDimStringArray

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiTwoDimStringArray();
// 结果：21
```

###### uiOneDimDateArray

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
return rdo2 uiOneDimDateArray();
// 结果：22
```

###### uiTwoDimDateArray

用途：日期时间处理函数。
参数：无。
返回：日期或时间值。

范例

```tsl
return rdo2 uiTwoDimDateArray();
// 结果：23
```

###### uiTable

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiTable();
// 结果：24
```

###### uiUserData

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiUserData();
// 结果：25
```

###### uiRightDay

用途：进行字符串提取或替换处理。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiRightDay();
// 结果：27
```

###### uiBasicID

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiBasicID();
// 结果：29
```

###### uiYear

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiYear();
// 结果：31
```

###### uiMonth

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiMonth();
// 结果：32
```

###### uiDay

用途：对话框数据类别函数相关函数。
参数：无。
返回：处理后的结果值。

范例

```tsl
return rdo2 uiDay();
// 结果：33
```

##### InputQuery

范例

```tsl
if not rdo2 inputquery("输入数据", "输入被除数", M1) then return "未输入被除数";
if not rdo2 inputquery("输入数据", "输入除数", M2) then return "未输入除数";
return strtofloat(M1) / strtofloat(M2);
```

执行第一个if时，弹出如上对话框，输入3点击确定，这是执行第二个if弹出如下个对话框

输入6点击OK则返回的结果是0.5.

##### PromptForFileName

范例

```tsl
// 打开保存文件对话框
rdo2 PromptForFileName(data, 'Excelfiles
( * .xls)| * .xlsx|( * .XLS)|TSLfiles ( * .tsl)| * .TSL','.xls','保存对话框','C:\\DataStore',1);
return data;
// 打开打开文件对话框
rdo2 PromptForFileName(data, 'Excelfiles
( * .xls)| * .xlsx|( * .XLS)|TSLfiles ( * .tsl)| * .TSL','.xls','打开对话框','C:\\DataStore',0);
return data;
```

##### MessageBox

范例

范例1：

```tsl
a := 3;
if a > 2 then b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_YesNo());
if b = 6 then return 1;
else return 0;
```

显示的消息对话框如下：

其中，mb_YesNo()函数为控制字函数，各控制字函数可以参考链接：

http://www.tinysoft.com.cn/tsdn/helpdoc/display.tsl?id=1380

范例2：

两个控制字函数相加的消息显示框,两个控制字函数相加用位或的运算符号.|，程序如下：

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2 mb_IconWarning();
if a > 2 then b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
if b = 7 then return 1;
else return b;
```

弹出的消息显示框则如下：

比范例1多了一个警告图标，即mb_IconWarning()是警告图标控制字函数参考消息对话框的返回字。

##### InputDialog

范例

```tsl
Define := array();
define[0]['Name'] := 'Years';
define[0]['Comment'] := '年数';
define[0]['Type'] := rdo2 uiInteger();
define[0]['Value'] := 10;
define[1]['Name'] := 'NeedFunds';
define[1]['Comment'] := '是否需要基金';
define[1]['Type'] := rdo2 uiBoolean();
define[1]['Value'] := ’true’;
define[2]['Name'] := 'Name';
define[2]['Comment'] := '输入名称';
define[2]['Type'] := rdo2 uiString();
define[2]['Value'] := '天软';
define[3]['Name'] := 'GenDate';
define[3]['Comment'] := '生成日期';
define[3]['Type'] := rdo2 uiDate();
define[3]['Value'] := now();
if rdo2 InputDialog('测试输入', '测试', define, Result) then rdo2 ShowValue('测试显示', Result, false);
```

显示如下：

当选择了确认之后，ShowValue的结果显示出来如下：

##### BuildOptionComboValue

范例

```tsl
// 返回结果值为1的Value值
s := 'abcd=0\r bcde=1\r';
return rdo2 BuildOptionComboValue(s, 1);
// 返回结果值为0的Value值
s := 'abcd=0\r bcde=1\r';
return rdo2 BuildOptionComboValue(s, 0);
```

##### ShowValue

范例

```tsl
// 显示一个数组数据
a := rand(10, 10);
b := rdo2 ShowValue('测试显示', a, false);
return b;
// 显示一个字符串
a := '测试ABC';
b := rdo2 ShowValue('测试显示', a, false);
return b;
```

#### 消息对话框的类型控制字

##### 内容

- mb_AbortRetryIgnore
- mb_Ok
- mb_OkCancel
- mb_RetryCancel
- mb_YesNo
- mb_YesNoCancel

##### mb_AbortRetryIgnore

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_AbortRetryIgnore());
return b;
```

弹出如下消息对话框，选择“中止”则返回“中止”按钮id的返回字，选择“重试”则返回“重试”按钮id的返回字。选择“忽略”及返回“忽略”按钮Id的返回字。

##### mb_Ok

- mb_AbortRetryIgnore
- mb_Ok
- mb_OkCancel
- mb_RetryCancel
- mb_YesNo
- mb_YesNoCancel

##### mb_OkCancel

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_OkCancel());
return b;
```

弹出如下消息对话框，选择“确定”则返回“确定”按钮id的返回字，选择“取消”则返回“取消”按钮id的返回字。

##### mb_RetryCancel

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_RetryCancel());
return b;
```

弹出如下消息对话框，选择“重试”则返回“重试”按钮id的返回字，选择“取消”则返回“取消”按钮id的返回字。

##### mb_YesNo

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_YesNo());
return b;
```

弹出如下消息对话框，选择“是”则返回“是”按钮id的返回字，选择否则返回“否”按钮id的返回字。

参考MessageBox

##### mb_YesNoCancel

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_YesNoCancel());
return b;
```

弹出如下消息对话框，选择“是”则返回“是”按钮id的返回字，选择“否”则返回“否”按钮id的返回字，选择“取消”则返回“取消”按钮id的返回字。

#### 消息对话框的图标控制字

##### 内容

- mb_IconInformation
- mb_IconExclamation
- mb_IconWarning
- mb_IconInfomation
- mb_IconAsterisk
- mb_IconQuestion
- mb_IconStop
- mb_IconError
- mb_IconHand

##### mb_IconInformation

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_IconInformation();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出对话框如下：

##### mb_IconExclamation

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2 mb_IconExclamation();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个感叹号图标。

##### mb_IconWarning

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2 mb_IconWarning();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个警告图标。

##### mb_IconInfomation

- mb_IconInformation
- mb_IconExclamation
- mb_IconWarning
- mb_IconInfomation
- mb_IconAsterisk
- mb_IconQuestion
- mb_IconStop
- mb_IconError
- mb_IconHand

##### mb_IconAsterisk

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2 mb_IconAsterisk();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个星号图标。

##### mb_IconQuestion

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_IconQuestion ();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个问好图标。

##### mb_IconStop

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_IconStop();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个停止图标。

##### mb_IconError

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_IconError();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个错误图标。

##### mb_IconHand

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_IconHand();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，在控制字mb_YesNo()显示框的基础上加了一个手图标。

#### 消息对话框的默认按钮控制字

##### 内容

- mb_DefButton1
- mb_DefButton2
- mb_DefButton3
- mb_DefButton4

##### mb_DefButton1

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_DefButton1();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，控制字mb_YesNo()消息显示框的第一个按钮呈浅蓝色。

##### mb_DefButton2

范例

```tsl
a := 3;
c := rdo2 mb_YesNo() .| rdo2mb_DefButton2();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，控制字mb_YesNo()消息显示框的第二个按钮呈浅蓝色。

##### mb_DefButton3

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_DefButton3();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，控制字mb_AbortRetryIgnore()消息显示框的第三个按钮呈浅蓝色。

##### mb_DefButton4

范例

如没有第四个按钮，则从超出按钮个数起重新从第一个按钮数，如mb_AbortRetryIgnore()

在默认第四个按钮，由于mb_AbortRetryIgnore()只有三个按钮，则第四个显示的是第一个。

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_DefButton4();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，控制字mb_AbortRetryIgnore()消息显示框的第一个按钮呈浅蓝色。

#### 消息对话框的模式控制字

##### 内容

- mb_ApplModal
- mb_AppModal
- mb_SystemModal
- mb_TaskModal

##### mb_ApplModal

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_ApplModal();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图：

##### mb_AppModal

- mb_ApplModal
- mb_AppModal
- mb_SystemModal
- mb_TaskModal

##### mb_SystemModal

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_SystemModal();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，如不返回选择按钮，消息显示框总是在最前端。

##### mb_TaskModal

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_TaskModal();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图，如不返回选择按钮，将无法继续操作天软系统。

#### 消息对话框的其他控制字

##### 内容

- mb_TopMost
- mb_Default_Desktop_Only
- mb_Help
- mb_Right
- mb_RtlReading
- mb_SetForeGround
- mb_SetTopMost
- mb_Service_Notification
- mb_Service_Notification_NT3X

##### mb_TopMost

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_TopMost();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出对话框如：

##### mb_Default_Desktop_Only

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_Default_Desktop_Only();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图

##### mb_Help

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_Help();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图

##### mb_Right

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_Right();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图

##### mb_RtlReading

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_RtlReading();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图

##### mb_SetForeGround

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_SetForeGround();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图

##### mb_SetTopMost

- mb_TopMost
- mb_Default_Desktop_Only
- mb_Help
- mb_Right
- mb_RtlReading
- mb_SetForeGround
- mb_SetTopMost
- mb_Service_Notification
- mb_Service_Notification_NT3X

##### mb_Service_Notification

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_Service_Notification();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

##### mb_Service_Notification_NT3X

范例

```tsl
a := 3;
c := rdo2 mb_AbortRetryIgnore() .| rdo2mb_Service_Notification_NT3X();
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', c);
return b;
```

弹出消息显示框如下图

#### 消息对话框的返回字

##### 内容

- idAbort
- idCancel
- idIgnore
- idNo
- idOk
- idRetry
- idYes

##### idAbort

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_AbortRetryIgnore());
if b = rdo2 idAbort () then return 1;
else return 0;
```

返回结果如选择Abort按钮，则返回1，否则返回0 。

##### idCancel

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_OkCancel());
if b = rdo2 idCancel () then return 1;
else return 0;
```

返回结果如选择Cancel按钮，则返回1，否则返回0 。

##### idIgnore

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_AbortRetryIgnore ());
if b = rdo2 idIgnore () then return 1;
else return 0;
```

返回结果如选择Ignore按钮，则返回1，否则返回0 。

##### idNo

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_YesNo ());
if b = rdo2 idNo () then return 1;
else return 0;
```

返回结果如选择No按钮，则返回1，否则返回0 。

##### idOk

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_OkCancel ());
if b = rdo2 idOk() then return 1;
else return 0;
```

返回结果如选择OK按钮，则返回1，否则返回0 。

##### idRetry

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_AbortRetryIgnore());
if b = rdo2 idRetry () then return 1;
else return 0;
```

返回结果如选择Retry按钮，则返回1，否则返回0 。

##### idYes

范例

```tsl
a := 3;
b := rdo2 MessageBox('a>2,要继续吗？', '测试对话框', rdo2 mb_YesNo());
if b = rdo2 IdYes() then return 1;
else return 0;
```

返回结果如选择Yes按钮，则返回1，否则返回0 。
