系统程序
  # Smart 系统程序
该手册内的内容用于编写脚本时作为参考,包含系统中使用的部分程序。
# 1. 字符串处理程序
# 1.1. Delete
procedure Delete(var S: string; Index,Count: Integer);
 1
- 该过程从一个字符串中移除一个子串。
 
| 部分 | 说明 | 
|---|---|
| S | 字符串表达式 | 
| Index | 整形表达式,表示删除字符串的起始位置 | 
| Count | 整形表达式,表示删除的字符数 | 
- 示例:
 
var
  s1: String;
begin
  s1 := 'Hi,Hello';
  Delete(s1,1,4);
  ShowMessage(s1);
end;
 1
2
3
4
5
6
7
2
3
4
5
6
7
- 运行结果:
 
ello
# 1.2. Insert
procedure Insert(Source: String; var S: String; Index:Integer);
 1
- 该过程以某个位置开始相字符串中插入一个子字符串。
 
| 部分 | 说明 | 
|---|---|
| Source | 字符串表达式 | 
| S | 字符串表达式,作为插入的数据 | 
| Index | 整形表达式,表示插入字符串的起始位置 | 
- 示例:
 
var
  s1: String;
  s2: String;
begin
  s1 := 'Hi,Hello';
  s2 := 'IsoFace,';
  Insert(s2,s1,0);
  ShowMessage(s1);
end;
 1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 运行结果:
 
IsoFace,Hi,Hello
# 1.3. SetLength
procedure SetLength(var S; NewLength: Integer);
 1
- 该过程用于设置字符串或动态数组的长度。
 
| 部分 | 说明 | 
|---|---|
| S | 字符串或者动态数组表达式 | 
| NewLength | 整形表达式,用于设置字符串或动态数组的长度 | 
- 示例
 
var
  arr: Array of Integer;
  i: Integer;
begin
  SetLength(arr,5);
  for i := 0 to 4 do
  begin
    arr[i] := i;
    ShowMessage(IntToStr(arr[i]));
  end;
end;
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 运行结果
 
0 1 2 3 4
# 1.4. Val
procedure Val(S; var V; var Code: Integer);
 1
- 该函数转换一个数字格式字符串为数字表达式。
 
| 部分 | 说明 | 
|---|---|
| S | 是一个字符串表达式,它必须是由一系列数字格式的字符组成 | 
| V | 是一个整形或实形表达式,如果V是一个整数,则S必须能够转换为整数 | 
| Code | 是一个整形表达式,如果字符串S不符合要求,则该非数字字符索引会被存储在Code中,否则Code会被设置为0,对于以Null结尾的字符,非数字字符返回的错误位置比实际的以0基准的字符索引大1 | 
- 示例:
 
var
  s1: String;  i,m: Integer;
begin
  s1 := '3231EC5';
  Val(s1,i,m);
  if m = 0 then
    ShowMessage(IntToStr(i))
  else
    ShowMessage(IntToStr(m));
end;
 1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 运行结果:
 
5
# 2. 科学计算程序
# 2.1. DivMod
procedure DivMod(Dividend: Cardinal; Divisor: Word; var Result, Remainder: Word);
 1
- 该过程返回两个操作数相除的商和余数。
 
| 部分 | 说明 | 
|---|---|
| Dividend | 整型表达式,表示被除数 | 
| Divisor | 整型表达式,表示除数 | 
| Result | 整型表达式,用于存储Dividend与Divisor相除的商 | 
| Remainder | 整型表达式,用于存储余数 | 
- 示例:
 
var
  a,b: word;
begin
  DivMod(13,3,a,b);
  ShowMessage(IntToStr(a) + ' ' + IntToStr(b));
  DivMod(15,3,a,b);
  ShowMessage(IntToStr(a) + ' ' + IntToStr(b));
end;
 1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 运行结果:
 
4 1 5 0
# 3. 序数程序
# 3.1. Inc
procedure Inc(var X[;N:Longint]);
 1
- 该过程用于整数自加N。
 
| 部分 | 说明 | 
|---|---|
| X | 待增加的整数 | 
| N | 增加的步长,无步长时,默认加1 | 
- 示例:
 
var
  i: Integer;
  j: Integer;
  k: Integer;
begin
  i := 1; j:= 1; k:= 1;
  Inc(i);
  Inc(j,4);
  Inc(k,8);
  ShowMessage(IntToStr(i));
  ShowMessage(IntToStr(j));
  ShowMessage(IntToStr(k));   
end;
 1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 运行结果:
 
2 5 9
# 3.2. MomentSkewKurtosis
procedure MomentSkewKurtosis(const Data: array of Double; var M1, M2, M3, M4, Skew, Kurtosis: Extended);
 1
- 计算一组数据的各项统计指标
 
| 部分 | 说明 | 
|---|---|
| Data | 一个浮点型数组 | 
| M1 | 平均数 | 
| M2 | 差值 | 
| M3 | 倾斜度 | 
| M4 | 峰度 | 
| Skew | 倾斜度系数 | 
| Kurtosis | 峰度系数 | 
- 示例:
 
var
  M1,M2,M3,M4,Skew,Kurtosis: Extended;
begin
  MomentSkewKurtosis([1.21,2.02,3.3,4.2,5.6,6.5,7.1],M1,M2,M3,M4,Skew,Kurtosis);
  ShowMessage(FloatToStr(M1));
  ShowMessage(FloatToStr(M2)); 
  ShowMessage(FloatToStr(M3));
  ShowMessage(FloatToStr(M4));
  ShowMessage(FloatToStr(Skew));
  ShowMessage(FloatToStr(Kurtosis));
end;
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
- 运行结果:
 
4.27571428571429 4.30319591836735 -0.766464402332362 29.4727402330112 -0.0858628520935413 1.59161593158165
# 4. 金融程序
该章节暂无可用程序。
# 5. 随机数程序
# 5.1. Randomize
procedure Randomize;
 1
该程序用于初始化内置的随机数生成器。
示例:
begin
  Randomize;
  ShowMessage(IntToStr(Random(10)));
end;
 1
2
3
4
2
3
4
- 运行结果:运行该语句后产生一个大于等于0小于10的整数。
 
# 6. 单位转换程序
# 6.1. RaiseConversionError
procedure RaiseConversionError(const AText: string);
 1
- 该程序用于触发一个单位转换异常。
 
| 部分 | 说明 | 
|---|---|
| AText | 字符串表达式,用于指定异常产生时的消息 | 
| AArgs | 数组常量表达式,用于支持AText所标识的格式 | 
- 示例:
 
begin
  RaiseConversionError('类型转换错误');
end;
 1
2
3
2
3
- 运行结果:弹出错误提示。
 
# 7. 日期程序
# 7.1. DecodeDate
procedure DecodeDate(Date: TDateTime; var Year,Month,Day:Word);
 1
- 该程序分解TDateTime类型表达式为年、月、日。
 
| 部分 | 说明 | 
|---|---|
| Date | 待分解的TDateTime值 | 
| Year | 得到TDateTime值分解后的年份 | 
| Month | 得到TDateTime值分解后的月份 | 
| Day | 得到TDateTime值分解后的日 | 
- 示例:
 
var
  Year,Month,Day: Word;
begin
  DecodeDate(Now,Year,Month,Day);
  ShowMessage(IntToStr(Year) + '年' + IntToStr(Month) + '月' + IntToStr(Day) + '日');
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:显示当前日期的年月日信息。
 
# 7.2. DecodeDateDay
procedure DecodeDateDay(const AValue: TDateTime; out AYear, ADayOfYear: Word);
 1
- 该程序把TDateTime类型表达式分解为年和该日是该年的第几天。
 
| 部分 | 说明 | 
|---|---|
| AValue | 待分解的TDateTime值 | 
| AYear | 返回日期表达式的年份 | 
| ADayOfYear | 返回日期表达式表示的日是该年的第几天 | 
- 示例:
 
var
  Year,Month,Day: Word;
begin
  DecodeDateDay(StrToDate('2020-11-1'),Year,Day);
  ShowMessage(IntToStr(Year) + '年第' + IntToStr(Day) + '日');
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:
 
2020年第306日
# 7.3. DecodeDateMonthWeek
procedure DecodeDateMonthWeek(const AValue: TDateTime; out AYear, AMonth, AWeekOfMonth, ADayOfWeek: Word);
 1
- 该程序获得TDateTime类型表达式指定的日期表示灯年份,月份以及该月的第几周和周值。
 
| 部分 | 说明 | 
|---|---|
| AValue | 待分解的日期时间表达式 | 
| AYear | 返回日期表达式的年份 | 
| AMonth | 返回日期表达式的月份 | 
| AWeekOfMonth | 返回该日是当月的第几周 | 
| ADayOfWeek | 返回当日的周值 | 
- 示例:
 
var
  Year,Month,weekofmonth,dayofweek: word;
begin
  DecodeDateMonthWeek(StrToDate('2020-11-1'),Year,Month,weekofmonth,dayofweek);
  ShowMessage(IntToStr(Year) + ' ' + IntToStr(Month) + ' '  + IntToStr(weekofmonth) + ' ' + IntToStr(dayofweek));
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:
 
2020 10 5 7
# 7.4. DecodeDateTime
procedure DecodeDateTime(const AValue: TDateTime; out AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word);
 1
- 该函数把TDateTime的值拆分成年、月、日、小时、分、秒、毫秒。
 
| 部分 | 说明 | 
|---|---|
| AValue | 待分解的日期时间表达式 | 
| AYear | 返回日期表达式的年份 | 
| AMonth | 返回日期表达式的月份 | 
| ADay | 返回日期表达式表示的日 | 
| AHour | 返回日期表达式表示的小时 | 
| AMinute | 返回日期表达式表示的分钟 | 
| ASecond | 返回日期表达式表示的秒钟 | 
| AMillisecond | 返回日期表达式表示的毫秒 | 
- 示例:
 
var
  Year,Month,Day,Hour,Minute,Second,MilliSecond: word;
begin
  DecodeDateTime(StrToDateTime('2020-11-1 13:25:43.323'),Year,Month,Day,Hour,Minute,Second,MilliSecond);
  ShowMessage(IntToStr(Year) + ' ' + IntToStr(Month) + ' '  + IntToStr(Day) + ' ' + IntToStr(Hour) 
  + ' ' + IntToStr(Minute) + ' ' + IntToStr(Second) + ' ' + IntToStr(MilliSecond));
end;
 1
2
3
4
5
6
7
2
3
4
5
6
7
- 运行结果:
 
2020 11 1 13 25 43 323
# 7.5. DecodeDateWeek
procedure DecodeDateWeek(const AValue: TDateTime; out AYear, AWeekOfYear, ADayOfWeek: Word);
 1
- 该程序将指定的日期表示为第几周和星期几,以及所在的年份。
 
| 部分 | 说明 | 
|---|---|
| AValue | 待分解的日期时间表达式 | 
| AYear | 返回日期表达式的年份 | 
| AWeekOfYear | 返回日期表达式该日期是当年的第多少周 | 
| ADayOfWeek | 返回日期表达式的星期 | 
- 示例:
 
var
  Year,WeekOfYear, DayOfWeek: word;
begin
  DecodeDateWeek(StrToDate('2020-11-1'),Year,WeekOfYear,DayOfWeek);
  ShowMessage(IntToStr(Year) + ' ' + IntToStr(WeekOfYear) + ' '  + IntToStr(DayOfWeek));
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:
 
2020 44 7
# 7.6. DecodeDayOfWeekInMonth
procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear, AMonth, ANthDayOfWeek, ADayOfWeek: Word);
 1
- 该程序用于将TDateTime类型的表达式指定的日期拆分成年、月、日、周值,以及周值在本月的序号。
 
| 部分 | 说明 | 
|---|---|
| AValue | 待分解的日期时间表达式 | 
| AYear | 返回日期表达式的年份 | 
| AMonth | 返回日期表达式的月份 | 
| ANthDayOfWeek | 返回日期表达式的星期值在本月的序号 | 
| ADayOfWeek | 返回日期表达式的星期 | 
- 示例:
 
var
  Year,Month,NthDayOfWeek,DayOfWeek: word;
begin
  DecodeDayOfWeekInMonth(StrToDate('2020-11-1'),Year,Month,NthDayOfWeek,DayOfWeek);
  ShowMessage(IntToStr(Year) + ' ' + IntToStr(Month) + ' '  +  IntToStr(NthDayOfWeek) + ' ' +IntToStr(DayOfWeek));
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:
 
2020 11 1 7
# 7.7. DecodeTime
procedure DecodeTime(Time: TDateTime; var Hour,Min,Sec,MSec:Word);
 1
- 该过程将TDateTime表达式的日期时间拆分成时、分、秒、毫秒。
 
| 部分 | 说明 | 
|---|---|
| Time | 待分解的时间表达式 | 
| Hour | 返回时间表达式的小时 | 
| Min | 返回时间表达式的分钟 | 
| Sec | 返回时间表达式的秒钟 | 
| MSec | 返回时间表达式的毫秒 | 
- 示例:
 
var
  hour,minute,second,millisecond: Word;
begin
  DecodeTime(Now,hour,minute,second,millisecond);
  ShowMessage(IntToStr(hour) + ':' + IntToStr(minute) + ':' + IntToStr(second) + ':'
  + IntToStr(millisecond)); 
End;
 1
2
3
4
5
6
7
2
3
4
5
6
7
该语句执行后,显示当前的系统时间。
# 7.8. IncAMonth
procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1);
 1
- 根据指定的值来增加或修改月份。
 
| 部分 | 说明 | 
|---|---|
| Year | 返回年份 | 
| Month | 返回月份 | 
| Day | 返回日 | 
| NumberOfMonths | 待增加或减少月的数量 | 
- 示例:
 
Var
  Year,Month,Day: Word;
begin
  Year := 2020;
  Month := 11;
  Day := 1;
  IncAMonth(Year,Month,Day,1);
  ShowMessage('下个月的日期为:' + IntToStr(Year) + '年' + IntToStr(Month) + '月' + IntToStr(Day) + '日');
end;
 1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 运行结果:
 
下个月的日期为2020年12月1日
# 7.9. ReplaceDate
procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);
 1
- 该过程将指定时间中的日期替换为其他日期。
 
| 部分 | 说明 | 
|---|---|
| DateTime | 将要替换日期部分的时间 | 
| NewDate | 替换日期的指定值 | 
返回值:返回替换后的日期。
示例:
var
  ADate: TDateTime;
  BDate: TDateTime;
begin
  ADate := StrToDate('2020-11-01');
  BDate := StrToDate('2020-10-01');
  ReplaceDate(ADate,BDate);
  ShowMessage(DateToStr(ADate));
end;
 1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 运行结果:
 
2020-10-01、
# 7.10. ReplaceTime
procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime);
 1
- 该过程将指定时间中的时间替换为其他时间。
 
| 部分 | 说明 | 
|---|---|
| DateTime | 将要替换的时间 | 
| NewDate | 指定替换的时间 | 
返回值:返回替换后的时间。
示例:
var
  ADate: TDateTime;
  BDate: TDateTime;
begin
  ADate := StrToDateTime('2020-11-01 12:00:00');
  BDate := StrToDateTime('19:28:17');
  ReplaceTime(ADate,BDate);
  ShowMessage(DateTimeToStr(ADate));
end;
 1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
- 运行结果:
 
2020-11-01 19:28:17
# 8. 文件处理程序
# 8.1. ChDir
procedure ChDir(const S: string);
 1
- 该程序将当前目录修改为指定目录。
 
| 部分 | 说明 | 
|---|---|
| S | 指定修改的目录 | 
- 示例:
 
begin
  ChDir('..\');
end;
 1
2
3
2
3
# 8.2. DeleteIni
procedure DeleteIni(filename,section:String);
 1
- 从文件中删除指定的区段。
 
| 部分 | 说明 | 
|---|---|
| filename | 配置文件的名称,文件名需包含完整的目录位置 | 
| section | 配置文件的分区名称 | 
- 示例
 
DeletIni(GetCurrentDir+'/'+'demo.ini','Maps');
 1
- 运行结果:将当前目录修改为指定的目录。
 
# 8.3. RmDir
procedure RmDir(const S: string);
 1
- 该程序删除一个空的文件夹。
 
| 部分 | 说明 | 
|---|---|
| S,P | 将要删除的文件夹名称 | 
- 示例:
 
begin
  RmDir('Sample');
end;
 1
2
3
2
3
- 运行结果:上述语句将
Sample文件夹删除。 
# 8.4. WriteIni
procedure WriteIni(filename,section,Ident,Values:String);
 1
- 向配置文件写入配置信息。
 
| 部分 | 说明 | 
|---|---|
| filename | 配置文件的名称,文件名需包含完整的目录位置 | 
| section | 配置文件的分区名称 | 
| Ident | 分区中配置项的名称 | 
| Values | 取值的名称 | 
- 示例
 
var
  c:TTMSFNCMapsCoordinateRec;
begin
  c.Longitude := StrToFloat(FThis.lblongitude.Caption);
  c.Latitude := StrToFloat(FThis.lblatitude.Caption);
  FThis.AMapView1.SetCenterCoordinate(c);
  WriteIni(GetCurrentDir+'/'+'demo.ini','Maps','CenterLongitude',FThis.lblongitude.Caption);
  WriteIni(GetCurrentDir+'/'+'demo.ini','Maps','CenterLatitude',FThis.lblatitude.Caption);
end;
 1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 9. 格式化程序
# 9.1. FmtStr
procedure FmtStr(var Result: string; const Format: string; const Args: array of const);
 1
- 该程序按指定方式格式化一个数组常量的字符形式。使用方法与Format相同,不同的是把返回值放在了Result参数中。
 
| 部分 | 说明 | 
|---|---|
| Result | 是一个字符串表达式,将格式化后的字符串保存在该变量中 | 
| Format | 是一个字符串表达式,指定格式化所使用的格式 | 
| Args | 是一个数组表达式,指定要格式化的内容 | 
| FormatSettings | 是一个记录类型,包含了系统预定义的格式化方法 | 
- 示例:
 
var
  Str: String;
begin
  FmtStr(Str,'x=%.5d',[2]);
  ShowMessage(Str);
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:
 
x=00002
# 9.2. WideFmtStr
procedure WideFmtStr(var Result: WideString; const Format: WideString; const Args: array of const);
 1
- 该程序按指定方法格式化一个数组常量的多字节字符形式。
 
| 部分 | 说明 | 
|---|---|
| Result | 用于存放格式化后的字符串 | 
| Format | 指定格式化所使用的格式 | 
| Args | 是一个数组表达式,指定要格式化的内容 | 
| FormatSettings | 是一个记录类型,包含了系统预定义的格式化方法 | 
- 示例:
 
var
  S: WideString;
begin
  WideFmtStr(S,'%1:s %0:s',['How Are You!','Hello!']);
  ShowMessage(S);
end;
 1
2
3
4
5
6
2
3
4
5
6
- 运行结果:
 
Hello! How Are You!
# 10. 对话框程序
# 10.1. ShowMessage
procedure ShowMessage(const Msg: String);
 1
- 该过程显示一个简单的消息框。
 
| 部分 | 说明 | 
|---|---|
| Msg | 消息对话框要显示的提示信息内容 | 
begin
  ShowMessage('Hello');
end;
 1
2
3
2
3
执行上述代码,弹出Hello提示。
# 11. 流程控制
# 11.1. Abort
procedure Abort;
 1
- 该过程产生一个特殊的"无记载异常",此异常与其他异常相同,只是不显示错误信息。
 
# 11.2. Exit
proceure Exit;
 1
- 该过程立即使控制退出当前过程,继续执行此过程调用位置后的代码,如果当前过程为主程序,则程序终止运行。