watak




<>

首部 function FormatFloat(const Format: string; Value: Extended): string; $[SysUtils.pas
功能 返回浮点数类型以指定格式字符串Format转换成字符串
说明 FormatFloat(',.00', 1234567890) = '1,234,567,890.00'
参考 function SysUtils.FloatToTextFmt
例子 Edit1.Text := FormatFloat(Edit2.Text, StrToFloatDef(Edit3.Text, 0));
━━━━━━━━━━━━━━━━━━━━━
首部 function FormatCurr(const Format: string; Value: Currency): string; $[SysUtils.pas
功能 返回货币类型以指定格式字符串Format转换成字符串
说明 FormatCurr(',.00', 1234567890) = '1,234,567,890.00'
参考 function SysUtils.FloatToTextFmt
例子 Edit1.Text := FormatCurr(Edit2.Text, StrToCurrDef(Edit3.Text, 0));
━━━━━━━━━━━━━━━━━━━━━
首部 function FloatToTextFmt(Buf: PChar; const Value; ValueType: TFloatValue; Format: PChar): Integer; $[SysUtils.pas
功能 返回浮点数以指定格式字符串Format转换成指针字符串的内存大小
说明 ValueType指定无类型参数Value的类型
参考
例子
///////Begin FloatToTextFmt
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
E: Extended;
begin
E := StrToFloatDef(Edit1.Text, 0);
SpinEdit1.Value := FloatToTextFmt(vBuffer, E,
fvExtended, PChar(Edit2.Text));
Edit3.Text := Copy(vBuffer, 1, SpinEdit1.Value);
end;
///////End FloatToTextFmt
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToFloat(const S: string): Extended; $[SysUtils.pas
功能 返回字符串S转换成浮点数
说明 字符串非浮点数表达时将引起异常
参考 function SysUtils.TextToFloat
例子 var E: Extended; begin E := StrToFloat(Edit1.Text); end;
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToFloatDef(const S: string; const Default: Extended): Extended; $[SysUtils.pas
功能 返回字符串S转换成浮点数
说明 字符串非浮点数表达时则返回默认值Default
参考 function SysUtils.TextToFloat
例子 var E: Extended; begin E := StrToFloatDef(Edit1.Text, 0); end;
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToFloat(const S: string; out Value: Extended): Boolean; overload; $[SysUtils.pas
首部 function TryStrToFloat(const S: string; out Value: Single): Boolean; overload; $[SysUtils.pas
首部 function TryStrToFloat(const S: string; out Value: Double): Boolean; overload; $[SysUtils.pas
功能 返回字符串S转换成浮点数Value是否成功
说明 字符串非浮点数表达时返回False并且Value将输出为不确定的值
参考 function SysUtils.TextToFloat
例子
///////Begin TryStrToFloat
procedure TForm1.Button1Click(Sender: TObject);
var
E: Extended;
begin
CheckBox1.Checked := TryStrToFloat(Edit1.Text, E);
Edit2.Text := FormatFloat('', E);
end;
///////End TryStrToFloat
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToCurr(const S: string): Currency; $[SysUtils.pas
功能 返回字符串S转换成货币数
说明 字符串非货币数表达时将引起异常
参考 function SysUtils.TextToFloat
例子 var C: Currency; begin C := StrToCurr(Edit1.Text); end;
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToCurrDef(const S: string; const Default: Currency): Currency; $[SysUtils.pas
功能 返回字符串S转换成货币数
说明 字符串非货币数表达时则返回默认值Default
参考 function SysUtils.TextToFloat
例子 var C: Currency; begin C := StrToCurrDef(Edit1.Text, 0); end;
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToCurr(const S: string; out Value: Currency): Boolean; $[SysUtils.pas
功能 返回字符串S转换成货币数Value是否成功
说明 字符串非货币数表达时返回False并且Value将输出为不确定的值
参考 function SysUtils.TextToFloat
例子
///////Begin TryStrToCurr
procedure TForm1.Button1Click(Sender: TObject);
var
C: Currency;
begin
CheckBox1.Checked := TryStrToCurr(Edit1.Text, C);
Edit2.Text := FormatCurr('', C);
end;
///////End TryStrToCurr
━━━━━━━━━━━━━━━━━━━━━
首部 function TextToFloat(Buffer: PChar; var Value; ValueType: TFloatValue): Boolean; $[SysUtils.pas
功能 返回将指针字符串Buffer转换成无类型变量Value
说明 ValueType指定无类型参数Value的类型
参考
例子
///////Begin TextToFloat
procedure TForm1.Button1Click(Sender: TObject);
var
E: Extended;
begin
CheckBox1.Checked := TextToFloat(PChar(Edit1.Text), E,
fvExtended);
Edit2.Text := FormatFloat('', E);
end;
///////End TextToFloat
━━━━━━━━━━━━━━━━━━━━━
首部 procedure FloatToDecimal(var Result: TFloatRec; const Value; ValueType: TFloatValue; Precision, Decimals: Integer); $[SysUtils.pas
功能 将浮点数转换成浮点结构类型并返回到Result
说明 ValueType指定类型;Precision指定精度;Decimals指定小数
参考 type SysUtils.TFloatRec
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function DateTimeToTimeStamp(DateTime: TDateTime): TTimeStamp; $[SysUtils.pas
功能 返回日期时间类型转换成时间结构类型
说明
参考 type SysUtils.TTimeStamp
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime; $[SysUtils.pas
功能 返回时间结构类型转换成日期时间类型
说明
参考 type SysUtils.TTimeStamp
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function MSecsToTimeStamp(MSecs: Comp): TTimeStamp; $[SysUtils.pas
功能 返回微妙转换成时间结构类型
说明
参考 type SysUtils.TTimeStamp
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function TimeStampToMSecs(const TimeStamp: TTimeStamp): Comp; $[SysUtils.pas
功能 返回时间结构类型转换成微妙
说明
参考 type SysUtils.TTimeStamp
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function EncodeDate(Year, Month, Day: Word): TDateTime; $[SysUtils.pas
功能 返回合并年、月、日得到的日期
说明 当出现非法组合时将触发异常
参考 function SysUtils.TryEncodeDate
例子 Edit1.Text := DateToStr(EncodeDate(SpinEdit1.Value, SpinEdit2.Value, SpinEdit3.Value));
━━━━━━━━━━━━━━━━━━━━━
首部 function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime; $[SysUtils.pas
功能 返回合并时、分、秒、微秒得到的时间
说明 当出现非法组合时将触发异常
参考 function SysUtils.TryEncodeTime
例子 Edit1.Text := TimeToStr(EncodeTime(SpinEdit1.Value, SpinEdit2.Value, SpinEdit3.Value, SpinEdit4.Value));
━━━━━━━━━━━━━━━━━━━━━
首部 function TryEncodeDate(Year, Month, Day: Word; out Date: TDateTime): Boolean; $[SysUtils.pas
功能 返回合并年、月、日得到的日期是否成功
说明 当出现非法组合时将返回False并且Date输出为0
参考 function SysUtils.IsLeapYear
例子
///////Begin TryEncodeDate
procedure TForm1.Button1Click(Sender: TObject);
var
vDate: TDate;
begin
CheckBox1.Checked := TryEncodeDate(SpinEdit1.Value, SpinEdit2.Value,
SpinEdit3.Value, TDateTime(vDate));
Edit1.Text := DateToStr(vDate);
end;
///////End TryEncodeDate
━━━━━━━━━━━━━━━━━━━━━
首部 function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean; $[SysUtils.pas
功能 返回合并时、分、秒、微秒得到的时间是否成功
说明 当出现非法组合时将返回False并且Time输出为0
参考 const SysUtils.MSecsPerDay
例子
///////Begin TryEncodeTime
procedure TForm1.Button1Click(Sender: TObject);
var
vTime: TTime;
begin
CheckBox1.Checked := TryEncodeTime(SpinEdit1.Value, SpinEdit2.Value,
SpinEdit3.Value, SpinEdit3.Value, TDateTime(vTime));
Edit1.Text := TimeToStr(vTime);
end;
///////End TryEncodeTime
━━━━━━━━━━━━━━━━━━━━━
首部 procedure DecodeDate(const DateTime: TDateTime; var Year, Month, Day: Word); $[SysUtils.pas
功能 分解日期为年、月、日
说明
参考 function SysUtils.DecodeDateFully
例子
///////Begin DecodeDate
procedure TForm1.Button1Click(Sender: TObject);
var
Year, Month, Day: Word;
begin
DecodeDate(Date, Year, Month, Day);
SpinEdit1.Value := Year;
SpinEdit2.Value := Month;
SpinEdit3.Value := Day;
end;
///////End DecodeDate
━━━━━━━━━━━━━━━━━━━━━
首部 function DecodeDateFully(const DateTime: TDateTime; var Year, Month, Day, DOW: Word): Boolean; $[SysUtils.pas
功能 分解日期为年、月、日、星期
说明 [DOW:Day Of Week]
参考 function SysUtils.DateTimeToTimeStamp
例子
///////Begin DecodeDateFully
procedure TForm1.Button1Click(Sender: TObject);
var
Year, Month, Day, DOW: Word;
begin
DecodeDateFully(Date, Year, Month, Day, DOW);
SpinEdit1.Value := Year;
SpinEdit2.Value := Month;
SpinEdit3.Value := Day;
SpinEdit4.Value := DOW;
end;
///////End DecodeDateFully
━━━━━━━━━━━━━━━━━━━━━
首部 function InternalDecodeDate(const DateTime: TDateTime; var Year, Month, Day, DOW: Word): Boolean; $[SysUtils.pas
功能
说明 Kylix函数
参考 function SysUtils.DecodeDateFully
例子
━━━━━━━━━━━━━━━━━━━━━
首部 procedure DecodeTime(const DateTime: TDateTime; var Hour, Min, Sec, MSec: Word); $[SysUtils.pas
功能 分解时间为时、分、秒、微妙
说明
参考 function SysUtils.DateTimeToTimeStamp
例子
///////Begin DecodeTime
procedure TForm1.Button1Click(Sender: TObject);
var
Hour, Min, Sec, MSec: Word;
begin
DecodeTime(Time, Hour, Min, Sec, MSec);
SpinEdit1.Value := Hour;
SpinEdit2.Value := Min;
SpinEdit3.Value := Sec;
SpinEdit4.Value := MSec;
end;
///////End DecodeTime
━━━━━━━━━━━━━━━━━━━━━
首部 procedure DateTimeToSystemTime(const DateTime: TDateTime; var SystemTime: TSystemTime); $[SysUtils.pas
功能 返回日期时间类型转换成系统时间类型
说明
参考 function SysUtils.DecodeDateFully;function SysUtils.DecodeTime
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function SystemTimeToDateTime(const SystemTime: TSystemTime): TDateTime; $[SysUtils.pas
功能 返回系统时间类型转换成日期时间类型
说明
参考 function SysUtils.EncodeDate;function SysUtils.EncodeTime
例子
━━━━━━━━━━━━━━━━━━━━━
首部 function DayOfWeek(const DateTime: TDateTime): Word; $[SysUtils.pas
功能 返回日期时间DateTime所在的星期
说明 1(星期天),2(星期一),3(星期二),4(星期三),5(星期四),6(星期五),7(星期六)
参考 function SysUtils.DateTimeToTimeStamp
例子
///////Begin DayOfWeek
procedure TForm1.Button1Click(Sender: TObject);
const
cWeekCn: array[1..7] of string =
('星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六');
begin
Edit1.Text := cWeekCn[DayOfWeek(Now)];
end;
///////End DayOfWeek
━━━━━━━━━━━━━━━━━━━━━
首部 function Date: TDateTime; $[SysUtils.pas
功能 返回当前日期
说明 Date - Int(Date)=0;
参考 function SysUtils.DateTimeToString
例子 Edit1.Text := DateToStr(Date);
━━━━━━━━━━━━━━━━━━━━━
首部 function Time: TDateTime; $[SysUtils.pas
功能 返回当前时间
说明 Time - Frac(Time)=0;
参考 function Windows.GetLocalTime;function SysUtils.EncodeTime
例子 Edit1.Text := TimeToStr(Time);
━━━━━━━━━━━━━━━━━━━━━
首部 function Now: TDateTime; $[SysUtils.pas
功能 返回当前日期时间
说明 Date + Time=Now
参考 function Windows.GetLocalTime;function SysUtils.EncodeDate;function SysUtils.EncodeTime
例子 Edit1.Text := DateTimeToStr(Now);
━━━━━━━━━━━━━━━━━━━━━
首部 function CurrentYear: Word; $[SysUtils.pas
功能 返回当前年份
说明
参考 function Windows.GetLocalTime
例子 SpinEdit1.Value := CurrentYear;
━━━━━━━━━━━━━━━━━━━━━
首部 function IncMonth(const DateTime: TDateTime; NumberOfMonths: Integer = 1): TDateTime; $[SysUtils.pas
功能 返回增加月份给日期
说明 NumberOfMonths为负数时则减月份
参考 procedure SysUtils.DecodeDate;procedure SysUtils.IncAMonth;function SysUtils.EncodeDate;procedure SysUtils.ReplaceTime
例子 DateTimePicker1.Date := IncMonth(Date, SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 procedure IncAMonth(var Year, Month, Day: Word; NumberOfMonths: Integer = 1); $[SysUtils.pas
功能 返回增加月份给年月日
说明 NumberOfMonths为负数时则减月份
参考 procedure System.Inc
例子
///////Begin IncAMonth
procedure TForm1.Button1Click(Sender: TObject);
var
vYear, vMonth, vDay: Word;
begin
DecodeDate(Date, vYear, vMonth, vDay);
IncAMonth(vYear, vMonth, vDay, SpinEdit1.Value);
DateTimePicker1.Date := EncodeDate(vYear, vMonth, vDay);
end;
///////End IncAMonth
━━━━━━━━━━━━━━━━━━━━━
首部 procedure ReplaceTime(var DateTime: TDateTime; const NewTime: TDateTime); $[SysUtils.pas
功能 用时间NewTime替换日期时间DateTime的时间部分
说明 Int(DateTime) + Frac(NewTime)
参考 function System.Trunc;function System.Abs;function System.Frac
例子
///////Begin ReplaceTime
procedure TForm1.Button1Click(Sender: TObject);
var
vDateTime: TDateTime;
begin
vDateTime := Now;
ReplaceTime(vDateTime, DateTimePicker1.Time);
Edit1.Text := DateTimeToStr(vDateTime);
end;
///////End ReplaceTime
━━━━━━━━━━━━━━━━━━━━━
首部 procedure ReplaceDate(var DateTime: TDateTime; const NewDate: TDateTime); $[SysUtils.pas
功能 用日期NewDate替换日期时间DateTime的日期部分
说明 Int(NewTime) + Frac(DateTime)
参考 procedure SysUtils.ReplaceTime
例子
///////Begin ReplaceDate
procedure TForm1.Button1Click(Sender: TObject);
var
vDateTime: TDateTime;
begin
vDateTime := Now;
ReplaceDate(vDateTime, DateTimePicker1.Date);
Edit1.Text := DateTimeToStr(vDateTime);
end;
///////End ReplaceDate
━━━━━━━━━━━━━━━━━━━━━
首部 function IsLeapYear(Year: Word): Boolean; $[SysUtils.pas
功能 返回年份Year是否是闰年
说明 (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0))
参考
例子 CheckBox1.Checked := IsLeapYear(SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function DateToStr(const DateTime: TDateTime): string; $[SysUtils.pas
功能 返回日期DateTime转换成字符串
说明 转换格式由系统变量ShortDateFormat控制
参考 function SysUtils.DateTimeToString;var SysUtils.ShortDateFormat
例子 Edit1.Text := DateToStr(Date);
━━━━━━━━━━━━━━━━━━━━━
首部 function TimeToStr(const DateTime: TDateTime): string; $[SysUtils.pas
功能 返回时间DateTime转换成字符串
说明 转换格式由系统变量LongTimeFormat控制
参考 function SysUtils.DateTimeToString;var SysUtils.LongTimeFormat
例子 Edit1.Text := TimeToStr(Date);
━━━━━━━━━━━━━━━━━━━━━
首部 function DateTimeToStr(const DateTime: TDateTime): string; $[SysUtils.pas
功能 返回日期时间DateTime转换成字符串
说明 转换格式由系统变量ShortDateFormat和LongTimeFormat控制
参考 function SysUtils.DateTimeToString
例子 Edit1.Text := DateTimeToStr(Now);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToDate(const S: string): TDateTime; $[SysUtils.pas
功能 返回字符串S转换成日期
说明 字符非日期表达时将引起异常
参考 function SysUtils.TryStrToDate
例子 DateTimePicker1.Date := StrToDate(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToDateDef(const S: string; const Default: TDateTime): TDateTime; $[SysUtils.pas
功能 返回字符串S转换成日期
说明 字符非日期表达时则返回默认值Default
参考 function SysUtils.TryStrToDate
例子 DateTimePicker1.Date := StrToDateDef(Edit1.Text, Date);
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToDate(const S: string; out Value: TDateTime): Boolean; $[SysUtils.pas
功能 返回字符串S转换成日期Value是否成功
说明 字符非日期表达时返回False并且Value将输出为0
参考
例子
///////Begin TryStrToDate
procedure TForm1.Button1Click(Sender: TObject);
var
vDateTime: TDateTime;
begin
CheckBox1.Checked := TryStrToDate(Edit1.Text, vDateTime);
DateTimePicker1.Date := vDateTime;
end;
///////End TryStrToDate
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToTime(const S: string): TDateTime; $[SysUtils.pas
功能 返回字符串S转换成时间
说明 字符非时间表达时将引起异常
参考 function SysUtils.TryStrToTime
例子 DateTimePicker1.Time := StrToTime(Edit1.Text);
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToTimeDef(const S: string; const Default: TDateTime): TDateTime; $[SysUtils.pas
功能 返回字符串S转换成时间
说明 字符非时间表达时则返回默认值Default
参考 function SysUtils.TryStrToTime
例子 DateTimePicker1.Time := StrToTimeDef(Edit1.Text, Time);
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToTime(const S: string; out Value: TDateTime): Boolean; $[SysUtils.pas
功能 返回字符串S转换成时间Value是否成功
说明 字符非时间表达时返回False并且Value将输出为0
参考
例子
///////Begin TryStrToTime
procedure TForm1.Button1Click(Sender: TObject);
var
vDateTime: TDateTime;
begin
CheckBox1.Checked := TryStrToTime(Edit1.Text, vDateTime);
DateTimePicker1.Time := vDateTime;
end;
///////End TryStrToTime
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToDateTime(const S: string): TDateTime; $[SysUtils.pas
功能 返回字符串S转换成日期时间
说明 字符非日期时间表达时将引起异常
参考 function SysUtils.TryStrToDateTime
例子 Edit1.Text := DateTimeToStr(StrToDateTime(Edit2.Text));
━━━━━━━━━━━━━━━━━━━━━
首部 function StrToDateTimeDef(const S: string; const Default: TDateTime): TDateTime; $[SysUtils.pas
功能 返回字符串S转换成日期时间
说明 字符非日期时间表达时则返回默认值Default
参考 function SysUtils.TryStrToDateTime
例子 Edit1.Text := DateTimeToStr(StrToDateTimeDef(Edit2.Text, Now));
━━━━━━━━━━━━━━━━━━━━━
首部 function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean; $[SysUtils.pas
功能 返回字符串S转换成日期时间Value是否成功
说明 字符非日期时间表达时返回False并且Value将输出为0
参考
例子
///////Begin TryStrToDateTime
procedure TForm1.Button1Click(Sender: TObject);
var
vDateTime: TDateTime;
begin
CheckBox1.Checked := TryStrToDateTime(Edit1.Text, vDateTime);
Edit2.Text := DateTimeToStr(vDateTime);
end;
///////End TryStrToDateTime
━━━━━━━━━━━━━━━━━━━━━
首部 function FormatDateTime(const Format: string; DateTime: TDateTime): string; $[SysUtils.pas
功能 返回用指定的格式Format来格式化日期时间DateTime
说明 FormatDateTime('YYYY"年"MM"月"DD"日"', StrToDate('2002-03-09')) = '2002年03月09日'
参考 function SysUtils.DateTimeToString
例子 Edit2.Text := FormatDateTime(Edit1.Text, Now);
━━━━━━━━━━━━━━━━━━━━━
首部 procedure DateTimeToString(var Result: string; const Format: string; DateTime: TDateTime); $[SysUtils.pas
功能 用指定的格式Format来格式化日期时间DateTime并返回到字符串Result中
说明 <参见FormatDateTime>
参考 function System.SetString
例子 <参见FormatDateTime>
━━━━━━━━━━━━━━━━━━━━━
首部 function FloatToDateTime(const Value: Extended): TDateTime; $[SysUtils.pas
功能 返回浮点数转换成日期时间类型
说明 如果浮点数超出范围将触发异常
参考 function System.Int
例子 Edit2.Text := DateTimeToStr(FloatToDateTime(StrToFloatDef(Edit1.Text, 0)));
━━━━━━━━━━━━━━━━━━━━━
首部 function SysErrorMessage(ErrorCode: Integer): string; $[SysUtils.pas
功能 返回系统中错误代码所对应的信息
说明 此函可以有助于已习惯Windows编程的用户使用
参考 function Windows.FormatMessage;function System.SetString
例子 Edit1.Text := SysErrorMessage(SpinEdit1.Value);
━━━━━━━━━━━━━━━━━━━━━
首部 function GetLocaleStr(Locale, LocaleType: Integer; const Default: string): string; platform; $[SysUtils.pas
功能 返回当前系统指定参数的字符串值
说明 GetLocaleStr(GetThreadLocale, LOCALE_SLANGUAGE, '') = '中文(中国)'
参考 function Windows.GetLocaleInfo
例子 Edit1.Text := GetLocaleStr(GetThreadLocale, SpinEdit1.Value, '');
━━━━━━━━━━━━━━━━━━━━━
首部 function GetLocaleChar(Locale, LocaleType: Integer; Default: Char): Char; platform; $[SysUtils.pas
功能 返回当前系统指定参数的字符值
说明 GetLocaleChar(GetThreadLocale, LOCALE_STHOUSAND, #0) = ','
参考 function Windows.GetLocaleInfo
例子 Edit1.Text := GetLocaleChar(GetThreadLocale, LOCALE_SLANGUAGE, #0);
━━━━━━━━━━━━━━━━━━━━━
首部 procedure GetFormatSettings; $[SysUtils.pas
功能 恢复系统参数设置
说明 日期时间格式等
参考 function Windows.GetThreadLocale;function Windows.GetLocaleStr
例子
///////Begin GetFormatSettings
procedure TForm1.Button1Click(Sender: TObject);
begin
ShortDateFormat := 'YYYY"年"MM"月"DD"日"';
ShowMessage(DateToStr(Date));
GetFormatSettings;
ShowMessage(DateToStr(Date));
end;
///////End GetFormatSettings
━━━━━━━━━━━━━━━━━━━━━

Artikel sebelumnya: Artikel seterusnya: