📄 hutil32.pas
字号:
break;
end;
end;
function CompareBackLStr(src, targ: string; compn: Integer): Boolean;
var
I, slen, tLen : Integer;
begin
Result := False;
if compn <= 0 then
exit;
if length(src) < compn then
exit;
if length(targ) < compn then
exit;
slen := length(src);
tLen := length(targ);
Result := true;
for I := 0 to compn - 1 do
if UpCase(src[slen - I]) <> UpCase(targ[tLen - I]) then
begin
Result := False;
break;
end;
end;
function IsEnglish(ch: Char): Boolean;
begin
Result := False;
if ((ch >= 'A') and (ch <= 'Z')) or ((ch >= 'a') and (ch <= 'z')) then
Result := true;
end;
function IsEngNumeric(ch: Char): Boolean;
begin
Result := False;
if IsEnglish(ch) or ((ch >= '0') and (ch <= '9')) then
Result := true;
end;
function IsFloatNumeric(str: string): Boolean;
begin
if Trim(str) = '' then
begin
Result := False;
exit;
end;
try
StrToFloat(str);
Result := true;
except
Result := False;
end;
end;
procedure PCharSet(P: PChar; n: Integer; ch: Char);
var
I : Integer;
begin
for I := 0 to n - 1 do
(P + I)^ := ch;
end;
function ReplaceChar(src: string; srcchr, repchr: Char): string;
var
I, len : Integer;
begin
if src <> '' then
begin
len := length(src);
for I := 0 to len - 1 do
if src[I] = srcchr then
src[I] := repchr;
end;
Result := src;
end;
function IsUniformStr(src: string; ch: Char): Boolean;
var
I, len : Integer;
begin
Result := true;
if src <> '' then
begin
len := length(src);
for I := 0 to len - 1 do
if src[I] = ch then
begin
Result := False;
break;
end;
end;
end;
function CreateMask(src: PChar; TargPos: Integer): string;
function IsNumber(chr: Char): Boolean;
begin
if (chr >= '0') and (chr <= '9') then
Result := true
else
Result := False;
end;
var
intFlag, Loop : Boolean;
Cnt, IntCnt, srclen : Integer;
ch, Ch2 : Char;
begin
intFlag := False;
Loop := true;
Cnt := 0;
IntCnt := 0;
srclen := StrLen(src);
while Loop do
begin
ch := PChar(Longint(src) + Cnt)^;
case ch of
#0:
begin
Result := '';
break;
end;
' ':
begin
end;
else
begin
if not intFlag then
begin { Now Reading char }
if IsNumber(ch) then
begin
intFlag := true;
Inc(IntCnt);
end;
end
else
begin { If, now reading integer }
if not IsNumber(ch) then
begin { XXE+3 }
case UpCase(ch) of
'E':
begin
if (Cnt >= 1) and (Cnt + 2 < srclen) then
begin
ch := PChar(Longint(src) + Cnt - 1)^;
if IsNumber(ch) then
begin
ch := PChar(Longint(src) + Cnt + 1)^;
Ch2 := PChar(Longint(src) + Cnt + 2)^;
if not ((ch = '+') and (IsNumber(Ch2))) then
begin
intFlag := False;
end;
end;
end;
end;
'+':
begin
if (Cnt >= 1) and (Cnt + 1 < srclen) then
begin
ch := PChar(Longint(src) + Cnt - 1)^;
Ch2 := PChar(Longint(src) + Cnt + 1)^;
if not ((UpCase(ch) = 'E') and (IsNumber(Ch2))) then
begin
intFlag := False;
end;
end;
end;
'.':
begin
if (Cnt >= 1) and (Cnt + 1 < srclen) then
begin
ch := PChar(Longint(src) + Cnt - 1)^;
Ch2 := PChar(Longint(src) + Cnt + 1)^;
if not ((IsNumber(ch)) and (IsNumber(Ch2))) then
begin
intFlag := False;
end;
end;
end;
else
intFlag := False;
end;
end;
end; {end of case else}
end; {end of Case}
end;
if (intFlag) and (Cnt >= TargPos) then
begin
Result := '%' + format('%d', [IntCnt]);
exit;
end;
Inc(Cnt);
end;
end;
function GetValueFromMask(src: PChar; Mask: string): string;
function Positon(str: string): Integer;
var
str2 : string;
begin
str2 := Copy(str, 2, length(str) - 1);
Result := StrToIntDef(str2, 0);
if Result <= 0 then
Result := 1;
end;
function IsNumber(ch: Char): Boolean;
begin
case ch of
'0'..'9': Result := true;
else
Result := False;
end;
end;
var
intFlag, Loop, Sign : Boolean;
buf : Str256;
BufCount, Pos, LocCount, TargLoc, srclen: Integer;
ch, Ch2 : Char;
begin
srclen := StrLen(src);
LocCount := 0;
BufCount := 0;
Pos := 0;
intFlag := False;
Loop := true;
Sign := False;
if Mask = '' then
Mask := '%1';
TargLoc := Positon(Mask);
while Loop do
begin
if Pos >= srclen then
break;
ch := PChar(src + Pos)^;
if not intFlag then
begin {now reading chars}
if LocCount < TargLoc then
begin
if IsNumber(ch) then
begin
intFlag := true;
BufCount := 0;
Inc(LocCount);
end
else
begin
if not Sign then
begin {default '+'}
if ch = '-' then
Sign := true;
end
else
begin
if ch <> ' ' then
Sign := False;
end;
end;
end
else
begin
break;
end;
end;
if intFlag then
begin {now reading numbers}
buf[BufCount] := ch;
Inc(BufCount);
if not IsNumber(ch) then
begin
case ch of
'E', 'e':
begin
if (Pos >= 1) and (Pos + 2 < srclen) then
begin
ch := PChar(src + Pos - 1)^;
if IsNumber(ch) then
begin
ch := PChar(src + Pos + 1)^;
Ch2 := PChar(src + Pos + 2)^;
if not ((ch = '+') or (ch = '-') and (IsNumber(Ch2))) then
begin
Dec(BufCount);
intFlag := False;
end;
end;
end;
end;
'+', '-':
begin
if (Pos >= 1) and (Pos + 1 < srclen) then
begin
ch := PChar(src + Pos - 1)^;
Ch2 := PChar(src + Pos + 1)^;
if not ((UpCase(ch) = 'E') and (IsNumber(Ch2))) then
begin
Dec(BufCount);
intFlag := False;
end;
end;
end;
'.':
begin
if (Pos >= 1) and (Pos + 1 < srclen) then
begin
ch := PChar(src + Pos - 1)^;
Ch2 := PChar(src + Pos + 1)^;
if not ((IsNumber(ch)) and (IsNumber(Ch2))) then
begin
Dec(BufCount);
intFlag := False;
end;
end;
end;
else
begin
intFlag := False;
Dec(BufCount);
end;
end;
end;
end;
Inc(Pos);
end;
if LocCount = TargLoc then
begin
buf[BufCount] := #0;
if Sign then
Result := '-' + StrPas(buf)
else
Result := StrPas(buf);
end
else
Result := '';
end;
procedure GetDirList(path: string; fllist: TStringList);
var
SearchRec : TSearchRec;
begin
if FindFirst(path, faAnyFile, SearchRec) = 0 then
begin
fllist.AddObject(SearchRec.Name, TObject(SearchRec.Time));
while true do
begin
if FindNext(SearchRec) = 0 then
begin
fllist.AddObject(SearchRec.Name, TObject(SearchRec.Time));
end
else
begin
SysUtils.FindClose(SearchRec);
break;
end;
end;
end;
end;
function GetFileDate(filename: string): Integer; //DOS format file date..
var
SearchRec : TSearchRec;
begin
Result := 0; //jacky
if FindFirst(filename, faAnyFile, SearchRec) = 0 then
begin
Result := SearchRec.Time;
SysUtils.FindClose(SearchRec);
end;
end;
procedure ShlStr(Source: PChar; Count: Integer);
var
I, len : Integer;
begin
len := StrLen(Source);
while (Count > 0) do
begin
for I := 0 to len - 2 do
Source[I] := Source[I + 1];
Source[len - 1] := #0;
Dec(Count);
end;
end;
procedure ShrStr(Source: PChar; Count: Integer);
var
I, len : Integer;
begin
len := StrLen(Source);
while (Count > 0) do
begin
for I := len - 1 downto 0 do
Source[I + 1] := Source[I];
Source[len + 1] := #0;
Dec(Count);
end;
end;
function LRect(l, t, r, b: Longint): TLRect;
begin
Result.Left := l;
Result.Top := t;
Result.Right := r;
Result.Bottom := b;
end;
procedure MemPCopy(dest: PChar; src: string);
var
I : Integer;
begin
for I := 0 to length(src) - 1 do
dest[I] := src[I + 1];
end;
procedure MemCpy(dest, src: PChar; Count: Longint);
var
I : Longint;
begin
for I := 0 to Count - 1 do
begin
PChar(Longint(dest) + I)^ := PChar(Longint(src) + I)^;
end;
end;
procedure memcpy2(TargAddr, SrcAddr: Longint; Count: Integer);
var
I : Integer;
begin
for I := 0 to Count - 1 do
PChar(TargAddr + I)^ := PChar(SrcAddr + I)^;
end;
procedure memset(Buffer: PChar; FillChar: Char; Count: Integer);
var
I : Integer;
begin
for I := 0 to Count - 1 do
Buffer[I] := FillChar;
end;
procedure Str256PCopy(dest: PChar; const src: string);
begin
StrPLCopy(dest, src, 255);
end;
function _StrPas(dest: PChar): string;
var
I : Integer;
begin
Result := '';
for I := 0 to length(dest) - 1 do
if dest[I] <> chr(0) then
Result := Result + dest[I]
else
break;
end;
function Str_PCopy(dest: PChar; src: string): Integer;
var
len, I : Integer;
begin
len := length(src);
for I := 1 to len do
dest[I - 1] := src[I];
dest[len] := #0;
Result := len;
end;
function Str_PCopyEx(dest: PChar; const src: string; buflen: Longint): Integer;
var
len, I : Integer;
begin
len := _MIN(length(src), buflen);
for I := 1 to len do
dest[I - 1] := src[I];
dest[len] := #0;
Result := len;
end;
function Str_Catch(src, dest: string; len: Integer): string; //Result is rests..
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -