|  | @@ -4,6 +4,10 @@
 | 
	
		
			
				|  |  |  {                                                       }
 | 
	
		
			
				|  |  |  {       CopyRight (C) 2018-2020 KngStr                  }
 | 
	
		
			
				|  |  |  {                                                       }
 | 
	
		
			
				|  |  | +{   Some Code from                                      }
 | 
	
		
			
				|  |  | +{     QDAC of swish                                     }
 | 
	
		
			
				|  |  | +{   Thanks                                              }
 | 
	
		
			
				|  |  | +{                                                       }
 | 
	
		
			
				|  |  |  {*******************************************************}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  unit ksString;
 | 
	
	
		
			
				|  | @@ -37,6 +41,26 @@ function FormatSeconds(const AValue: Integer): string; overload;
 | 
	
		
			
				|  |  |  function FormatSeconds(const AValue: Double): string; overload;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /// <summary>
 | 
	
		
			
				|  |  | +/// 格式化文件大小,拷贝自qdac,增加更多单位
 | 
	
		
			
				|  |  | +/// </summary>
 | 
	
		
			
				|  |  | +function FormatSize(ASize: Int64): string;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/// <summary>
 | 
	
		
			
				|  |  | +/// 文件大小字符串转数字
 | 
	
		
			
				|  |  | +/// 1[b] "1 k[b]" " 1 m[b] " 1g[b] 1t[b]
 | 
	
		
			
				|  |  | +/// </summary>
 | 
	
		
			
				|  |  | +function SizeStrToInt(ASize: string; ADefault: Int64 = 0): Int64;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/// <summary>
 | 
	
		
			
				|  |  | +/// 文件大小单位转数字
 | 
	
		
			
				|  |  | +/// </summary>
 | 
	
		
			
				|  |  | +function SizeUnitToInt(AUnit: string): Int64; overload;
 | 
	
		
			
				|  |  | +/// <summary>
 | 
	
		
			
				|  |  | +/// 文件大小单位转数字
 | 
	
		
			
				|  |  | +/// </summary>
 | 
	
		
			
				|  |  | +function SizeUnitToInt(AUnit: Char): Int64; overload;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/// <summary>
 | 
	
		
			
				|  |  |  /// 是否中国手机号
 | 
	
		
			
				|  |  |  ///  13900000000
 | 
	
		
			
				|  |  |  ///  +8613900000000
 | 
	
	
		
			
				|  | @@ -134,6 +158,44 @@ begin
 | 
	
		
			
				|  |  |    FormatSeconds(Int64(AValue));
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +function FormatSize(ASize: Int64): string;
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  AIdx, R1, s1: Int64;
 | 
	
		
			
				|  |  | +  AIsNeg: Boolean;
 | 
	
		
			
				|  |  | +const
 | 
	
		
			
				|  |  | +  Units: array [0 .. 6] of string = ('EB', 'PB', 'TB', 'GB', 'MB', 'KB', 'B');
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  AIsNeg := (ASize < 0);
 | 
	
		
			
				|  |  | +  AIdx := 6;
 | 
	
		
			
				|  |  | +  R1 := 0;
 | 
	
		
			
				|  |  | +  if AIsNeg then
 | 
	
		
			
				|  |  | +    ASize := -ASize;
 | 
	
		
			
				|  |  | +  Result := '';
 | 
	
		
			
				|  |  | +  while (AIdx >= 0) do
 | 
	
		
			
				|  |  | +  begin
 | 
	
		
			
				|  |  | +    s1 := ASize mod 1024;
 | 
	
		
			
				|  |  | +    ASize := ASize shr 10;
 | 
	
		
			
				|  |  | +    if (ASize = 0) or (AIdx = 0) then
 | 
	
		
			
				|  |  | +    begin
 | 
	
		
			
				|  |  | +      R1 := R1 * 100 div 1024;
 | 
	
		
			
				|  |  | +      if R1 > 0 then
 | 
	
		
			
				|  |  | +      begin
 | 
	
		
			
				|  |  | +        if R1 >= 10 then
 | 
	
		
			
				|  |  | +          Result := IntToStr(s1) + '.' + IntToStr(R1) + Units[AIdx]
 | 
	
		
			
				|  |  | +        else
 | 
	
		
			
				|  |  | +          Result := IntToStr(s1) + '.' + '0' + IntToStr(R1) + Units[AIdx];
 | 
	
		
			
				|  |  | +      end
 | 
	
		
			
				|  |  | +      else
 | 
	
		
			
				|  |  | +        Result := IntToStr(s1) + Units[AIdx];
 | 
	
		
			
				|  |  | +      Break;
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +    R1 := s1;
 | 
	
		
			
				|  |  | +    Dec(AIdx);
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +  if AIsNeg then
 | 
	
		
			
				|  |  | +    Result := '-' + Result;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  function IsChineseMobileNumber(S: string; AOnlyNum: Boolean): boolean;
 | 
	
		
			
				|  |  |  var
 | 
	
		
			
				|  |  |    p: PChar;
 | 
	
	
		
			
				|  | @@ -170,4 +232,81 @@ begin
 | 
	
		
			
				|  |  |    Result := i = 11; //中国手机号 11位
 | 
	
		
			
				|  |  |  end;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +function SizeUnitToInt(AUnit: Char): Int64;
 | 
	
		
			
				|  |  | +const
 | 
	
		
			
				|  |  | +  Units: array [0 .. 6] of Char = ('b', 'k', 'm', 'g', 't', 'p', 'e');
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  I: Integer;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  Result := 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  for I := Low(Units) to High(Units) do begin
 | 
	
		
			
				|  |  | +    if (I > 0) then
 | 
	
		
			
				|  |  | +      Result := Result * 1024;
 | 
	
		
			
				|  |  | +    if AUnit = Units[I] then
 | 
	
		
			
				|  |  | +      Exit;
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  Result := 1;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function SizeUnitToInt(AUnit: string): Int64;
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  LSize: string;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  Result := 1;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  LSize := Trim(AUnit);
 | 
	
		
			
				|  |  | +  case Length(LSize) of
 | 
	
		
			
				|  |  | +    1,2: Result := SizeUnitToInt(LSize[Low(LSize)]);
 | 
	
		
			
				|  |  | +  end;
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function SizeStrToInt(ASize: string; ADefault: Int64): Int64;
 | 
	
		
			
				|  |  | +var
 | 
	
		
			
				|  |  | +  p: PChar;
 | 
	
		
			
				|  |  | +  c: Char;
 | 
	
		
			
				|  |  | +  s: string;
 | 
	
		
			
				|  |  | +begin
 | 
	
		
			
				|  |  | +  Result := ADefault;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if Length(ASize) = 0 then
 | 
	
		
			
				|  |  | +    Exit;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  s := '';
 | 
	
		
			
				|  |  | +  c := #0;
 | 
	
		
			
				|  |  | +  p := PChar(ASize);
 | 
	
		
			
				|  |  | +  while p^ <> #0 do
 | 
	
		
			
				|  |  | +    case p^ of
 | 
	
		
			
				|  |  | +      'b', 'k', 'm', 'g', 't', 'p', 'e':
 | 
	
		
			
				|  |  | +        begin
 | 
	
		
			
				|  |  | +          if c <> #0 then
 | 
	
		
			
				|  |  | +            Exit;
 | 
	
		
			
				|  |  | +          c := p^;
 | 
	
		
			
				|  |  | +          Inc(p);
 | 
	
		
			
				|  |  | +          if p^ = 'b' then
 | 
	
		
			
				|  |  | +            Inc(p);
 | 
	
		
			
				|  |  | +        end;
 | 
	
		
			
				|  |  | +      '0' .. '9':
 | 
	
		
			
				|  |  | +        begin
 | 
	
		
			
				|  |  | +          if c <> #0 then
 | 
	
		
			
				|  |  | +            Exit;
 | 
	
		
			
				|  |  | +          s := s + p^;
 | 
	
		
			
				|  |  | +          Inc(p);
 | 
	
		
			
				|  |  | +        end;
 | 
	
		
			
				|  |  | +      ',':
 | 
	
		
			
				|  |  | +        begin
 | 
	
		
			
				|  |  | +          if c <> #0 then
 | 
	
		
			
				|  |  | +            Exit;
 | 
	
		
			
				|  |  | +          Inc(p);
 | 
	
		
			
				|  |  | +        end;
 | 
	
		
			
				|  |  | +      ' ':
 | 
	
		
			
				|  |  | +        Inc(p);
 | 
	
		
			
				|  |  | +    else
 | 
	
		
			
				|  |  | +      Exit;
 | 
	
		
			
				|  |  | +    end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  Result := StrToUInt64Def(s, Result) * SizeUnitToInt(c);
 | 
	
		
			
				|  |  | +end;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  end.
 |