亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tntwidestrutils.pas

?? TNTUniCtrlsWithExceptions UniCode 國際化語言
?? PAS
字號:

{*****************************************************************************}
{                                                                             }
{    Tnt Delphi Unicode Controls                                              }
{      http://www.tntware.com/delphicontrols/unicode/                         }
{        Version: 2.3.0                                                       }
{                                                                             }
{    Copyright (c) 2002-2007, Troy Wolbrink (troy.wolbrink@tntware.com)       }
{                                                                             }
{*****************************************************************************}

unit TntWideStrUtils;

{$INCLUDE TntCompilers.inc}

interface

{ Wide string manipulation functions }

{$IFNDEF COMPILER_9_UP}
function WStrAlloc(Size: Cardinal): PWideChar;
function WStrBufSize(const Str: PWideChar): Cardinal;
{$ENDIF}
{$IFNDEF COMPILER_10_UP}
function WStrMove(Dest: PWideChar; const Source: PWideChar; Count: Cardinal): PWideChar;
{$ENDIF}
{$IFNDEF COMPILER_9_UP}
function WStrNew(const Str: PWideChar): PWideChar;
procedure WStrDispose(Str: PWideChar);
{$ENDIF}
//---------------------------------------------------------------------------------------------
{$IFNDEF COMPILER_9_UP}
function WStrLen(Str: PWideChar): Cardinal;
function WStrEnd(Str: PWideChar): PWideChar;
{$ENDIF}
{$IFNDEF COMPILER_10_UP}
function WStrCat(Dest: PWideChar; const Source: PWideChar): PWideChar;
{$ENDIF}
{$IFNDEF COMPILER_9_UP}
function WStrCopy(Dest, Source: PWideChar): PWideChar;
function WStrLCopy(Dest, Source: PWideChar; MaxLen: Cardinal): PWideChar;
function WStrPCopy(Dest: PWideChar; const Source: WideString): PWideChar;
function WStrPLCopy(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar;
{$ENDIF}
{$IFNDEF COMPILER_10_UP}
function WStrScan(const Str: PWideChar; Chr: WideChar): PWideChar;
// WStrComp and WStrPos were introduced as broken in Delphi 2006, but fixed in Delphi 2006 Update 2
function WStrComp(Str1, Str2: PWideChar): Integer;
function WStrPos(Str, SubStr: PWideChar): PWideChar;
{$ENDIF}
function Tnt_WStrComp(Str1, Str2: PWideChar): Integer; deprecated;
function Tnt_WStrPos(Str, SubStr: PWideChar): PWideChar; deprecated;

{ ------------ introduced --------------- }
function WStrECopy(Dest, Source: PWideChar): PWideChar;
function WStrLComp(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
function WStrLIComp(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
function WStrIComp(Str1, Str2: PWideChar): Integer;
function WStrLower(Str: PWideChar): PWideChar;
function WStrUpper(Str: PWideChar): PWideChar;
function WStrRScan(const Str: PWideChar; Chr: WideChar): PWideChar;
function WStrLCat(Dest: PWideChar; const Source: PWideChar; MaxLen: Cardinal): PWideChar;
function WStrPas(const Str: PWideChar): WideString;

{ SysUtils.pas } //-------------------------------------------------------------------------

{$IFNDEF COMPILER_10_UP}
function WideLastChar(const S: WideString): PWideChar;
function WideQuotedStr(const S: WideString; Quote: WideChar): WideString;
{$ENDIF}
{$IFNDEF COMPILER_9_UP}
function WideExtractQuotedStr(var Src: PWideChar; Quote: WideChar): Widestring;
{$ENDIF}
{$IFNDEF COMPILER_10_UP}
function WideDequotedStr(const S: WideString; AQuote: WideChar): WideString;
{$ENDIF}

implementation

uses
  {$IFDEF COMPILER_9_UP} WideStrUtils, {$ENDIF} Math, Windows, TntWindows;

{$IFNDEF COMPILER_9_UP}
function WStrAlloc(Size: Cardinal): PWideChar;
begin
  Size := SizeOf(Cardinal) + (Size * SizeOf(WideChar));
  GetMem(Result, Size);
  PCardinal(Result)^ := Size;
  Inc(PAnsiChar(Result), SizeOf(Cardinal));
end;

function WStrBufSize(const Str: PWideChar): Cardinal;
var
  P: PWideChar;
begin
  P := Str;
  Dec(PAnsiChar(P), SizeOf(Cardinal));
  Result := PCardinal(P)^ - SizeOf(Cardinal);
  Result := Result div SizeOf(WideChar);
end;
{$ENDIF}

{$IFNDEF COMPILER_10_UP}
function WStrMove(Dest: PWideChar; const Source: PWideChar; Count: Cardinal): PWideChar;
var
  Length: Integer;
begin
  Result := Dest;
  Length := Count * SizeOf(WideChar);
  Move(Source^, Dest^, Length);
end;
{$ENDIF}

{$IFNDEF COMPILER_9_UP}
function WStrNew(const Str: PWideChar): PWideChar;
var
  Size: Cardinal;
begin
  if Str = nil then Result := nil else
  begin
    Size := WStrLen(Str) + 1;
    Result := WStrMove(WStrAlloc(Size), Str, Size);
  end;
end;

procedure WStrDispose(Str: PWideChar);
begin
  if Str <> nil then
  begin
    Dec(PAnsiChar(Str), SizeOf(Cardinal));
    FreeMem(Str, Cardinal(Pointer(Str)^));
  end;
end;
{$ENDIF}

//---------------------------------------------------------------------------------------------

{$IFNDEF COMPILER_9_UP}
function WStrLen(Str: PWideChar): Cardinal;
begin
  Result := WStrEnd(Str) - Str;
end;

function WStrEnd(Str: PWideChar): PWideChar;
begin
  // returns a pointer to the end of a null terminated string
  Result := Str;
  While Result^ <> #0 do
    Inc(Result);
end;
{$ENDIF}

{$IFNDEF COMPILER_10_UP}
function WStrCat(Dest: PWideChar; const Source: PWideChar): PWideChar;
begin
  Result := Dest;
  WStrCopy(WStrEnd(Dest), Source);
end;
{$ENDIF}

{$IFNDEF COMPILER_9_UP}
function WStrCopy(Dest, Source: PWideChar): PWideChar;
begin
  Result := WStrLCopy(Dest, Source, MaxInt);
end;

function WStrLCopy(Dest, Source: PWideChar; MaxLen: Cardinal): PWideChar;
var
  Count: Cardinal;
begin
  // copies a specified maximum number of characters from Source to Dest
  Result := Dest;
  Count := 0;
  While (Count < MaxLen) and (Source^ <> #0) do begin
    Dest^ := Source^;
    Inc(Source);
    Inc(Dest);
    Inc(Count);
  end;
  Dest^ := #0;
end;

function WStrPCopy(Dest: PWideChar; const Source: WideString): PWideChar;
begin
  Result := WStrLCopy(Dest, PWideChar(Source), Length(Source));
end;

function WStrPLCopy(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar;
begin
  Result := WStrLCopy(Dest, PWideChar(Source), MaxLen);
end;
{$ENDIF}

{$IFNDEF COMPILER_10_UP}
function WStrScan(const Str: PWideChar; Chr: WideChar): PWideChar;
begin
  Result := Str;
  while Result^ <> Chr do
  begin
    if Result^ = #0 then
    begin
      Result := nil;
      Exit;
    end;
    Inc(Result);
  end;
end;

function WStrComp(Str1, Str2: PWideChar): Integer;
begin
  Result := WStrLComp(Str1, Str2, MaxInt);
end;

function WStrPos(Str, SubStr: PWideChar): PWideChar;
var
  PSave: PWideChar;
  P: PWideChar;
  PSub: PWideChar;
begin
  // returns a pointer to the first occurance of SubStr in Str
  Result := nil;
  if (Str <> nil) and (Str^ <> #0) and (SubStr <> nil) and (SubStr^ <> #0) then begin
    P := Str;
    While P^ <> #0 do begin
      if P^ = SubStr^ then begin
        // investigate possibility here
        PSave := P;
        PSub := SubStr;
        While (P^ = PSub^) do begin
          Inc(P);
          Inc(PSub);
          if (PSub^ = #0) then begin
            Result := PSave;
            exit; // found a match
          end;
          if (P^ = #0) then
            exit; // no match, hit end of string
        end;
        P := PSave;
      end;
      Inc(P);
    end;
  end;
end;
{$ENDIF}

function Tnt_WStrComp(Str1, Str2: PWideChar): Integer; deprecated;
begin
  Result := WStrComp(Str1, Str2);
end;

function Tnt_WStrPos(Str, SubStr: PWideChar): PWideChar; deprecated;
begin
  Result := WStrPos(Str, SubStr);
end;

//------------------------------------------------------------------------------

function WStrECopy(Dest, Source: PWideChar): PWideChar;
begin
  Result := WStrEnd(WStrCopy(Dest, Source));
end;

function WStrComp_EX(Str1, Str2: PWideChar; MaxLen: Cardinal; dwCmpFlags: Cardinal): Integer;
var
  Len1, Len2: Integer;
begin
  if MaxLen = Cardinal(MaxInt) then begin
    Len1 := -1;
    Len2 := -1;
  end else begin
    Len1 := Min(WStrLen(Str1), MaxLen);
    Len2 := Min(WStrLen(Str2), MaxLen);
  end;
  Result := Tnt_CompareStringW(GetThreadLocale, dwCmpFlags, Str1, Len1, Str2, Len2) - 2;
end;

function WStrLComp(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
begin
  Result := WStrComp_EX(Str1, Str2, MaxLen, 0);
end;

function WStrLIComp(Str1, Str2: PWideChar; MaxLen: Cardinal): Integer;
begin
  Result := WStrComp_EX(Str1, Str2, MaxLen, NORM_IGNORECASE);
end;

function WStrIComp(Str1, Str2: PWideChar): Integer;
begin
  Result := WStrLIComp(Str1, Str2, MaxInt);
end;

function WStrLower(Str: PWideChar): PWideChar;
begin
  Result := Str;
  Tnt_CharLowerBuffW(Str, WStrLen(Str))
end;

function WStrUpper(Str: PWideChar): PWideChar;
begin
  Result := Str;
  Tnt_CharUpperBuffW(Str, WStrLen(Str))
end;

function WStrRScan(const Str: PWideChar; Chr: WideChar): PWideChar;
var
  MostRecentFound: PWideChar;
begin
  if Chr = #0 then
    Result := WStrEnd(Str)
  else
  begin
    Result := nil;
    MostRecentFound := Str;
    while True do
    begin
      while MostRecentFound^ <> Chr do
      begin
        if MostRecentFound^ = #0 then
          Exit;
        Inc(MostRecentFound);
      end;
      Result := MostRecentFound;
      Inc(MostRecentFound);
    end;
  end;
end;

function WStrLCat(Dest: PWideChar; const Source: PWideChar; MaxLen: Cardinal): PWideChar;
begin
  Result := Dest;
  WStrLCopy(WStrEnd(Dest), Source, MaxLen - WStrLen(Dest));
end;

function WStrPas(const Str: PWideChar): WideString;
begin
  Result := Str;
end;

//---------------------------------------------------------------------------------------------

{$IFNDEF COMPILER_10_UP}
function WideLastChar(const S: WideString): PWideChar;
begin
  if S = '' then
    Result := nil
  else
    Result := @S[Length(S)];
end;

function WideQuotedStr(const S: WideString; Quote: WideChar): WideString;
var
  P, Src,
  Dest: PWideChar;
  AddCount: Integer;
begin
  AddCount := 0;
  P := WStrScan(PWideChar(S), Quote);
  while (P <> nil) do
  begin
    Inc(P);
    Inc(AddCount);
    P := WStrScan(P, Quote);
  end;

  if AddCount = 0 then
    Result := Quote + S + Quote
  else
  begin
    SetLength(Result, Length(S) + AddCount + 2);
    Dest := PWideChar(Result);
    Dest^ := Quote;
    Inc(Dest);
    Src := PWideChar(S);
    P := WStrScan(Src, Quote);
    repeat
      Inc(P);
      Move(Src^, Dest^, 2 * (P - Src));
      Inc(Dest, P - Src);
      Dest^ := Quote;
      Inc(Dest);
      Src := P;
      P := WStrScan(Src, Quote);
    until P = nil;
    P := WStrEnd(Src);
    Move(Src^, Dest^, 2 * (P - Src));
    Inc(Dest, P - Src);
    Dest^ := Quote;
  end;
end;
{$ENDIF}

{$IFNDEF COMPILER_9_UP}
function WideExtractQuotedStr(var Src: PWideChar; Quote: WideChar): Widestring;
var
  P, Dest: PWideChar;
  DropCount: Integer;
begin
  Result := '';
  if (Src = nil) or (Src^ <> Quote) then Exit;
  Inc(Src);
  DropCount := 1;
  P := Src;
  Src := WStrScan(Src, Quote);
  while Src <> nil do   // count adjacent pairs of quote chars
  begin
    Inc(Src);
    if Src^ <> Quote then Break;
    Inc(Src);
    Inc(DropCount);
    Src := WStrScan(Src, Quote);
  end;
  if Src = nil then Src := WStrEnd(P);
  if ((Src - P) <= 1) then Exit;
  if DropCount = 1 then
    SetString(Result, P, Src - P - 1)
  else
  begin
    SetLength(Result, Src - P - DropCount);
    Dest := PWideChar(Result);
    Src := WStrScan(P, Quote);
    while Src <> nil do
    begin
      Inc(Src);
      if Src^ <> Quote then Break;
      Move(P^, Dest^, (Src - P) * SizeOf(WideChar));
      Inc(Dest, Src - P);
      Inc(Src);
      P := Src;
      Src := WStrScan(Src, Quote);
    end;
    if Src = nil then Src := WStrEnd(P);
    Move(P^, Dest^, (Src - P - 1) * SizeOf(WideChar));
  end;
end;
{$ENDIF}

{$IFNDEF COMPILER_10_UP}
function WideDequotedStr(const S: WideString; AQuote: WideChar): WideString;
var
  LText : PWideChar;
begin
  LText := PWideChar(S);
  Result := WideExtractQuotedStr(LText, AQuote);
  if Result = '' then
    Result := S;
end;
{$ENDIF}


end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区久久久| 成人高清视频在线| 亚洲欧美激情小说另类| 久久久久久久久99精品| 精品国产青草久久久久福利| 91精品国产品国语在线不卡| 欧美一级专区免费大片| 国产精品五月天| 中文字幕亚洲电影| 亚洲国产综合人成综合网站| 香蕉久久夜色精品国产使用方法| 亚洲国产成人va在线观看天堂| 国产精品18久久久久久久网站| 国产91精品久久久久久久网曝门| 成人激情文学综合网| 日韩精品一区二区三区蜜臀| 欧美极品aⅴ影院| 一区二区三区四区蜜桃| 偷拍一区二区三区四区| 国产主播一区二区| 91一区二区在线| 欧美精品在线视频| 久久精品男人天堂av| 亚洲国产一区二区在线播放| 成人ar影院免费观看视频| 久久午夜国产精品| 亚洲欧美日韩国产一区二区三区| 国内精品视频666| 日韩一级大片在线| 国产三区在线成人av| 久久激情五月激情| 91久久精品一区二区| 亚洲精品在线观| 卡一卡二国产精品 | 亚洲欧洲综合另类| 粉嫩av一区二区三区在线播放| 欧美第一区第二区| 久久99国产乱子伦精品免费| 91丨porny丨蝌蚪视频| 中文字幕在线视频一区| 亚洲成人午夜影院| 欧美另类变人与禽xxxxx| 午夜精品爽啪视频| 在线综合亚洲欧美在线视频| 26uuu久久天堂性欧美| 久久成人久久爱| 日本一区二区三区dvd视频在线| 午夜精品久久久久久久久久 | 91精品国产一区二区人妖| 亚洲国产aⅴ天堂久久| 日韩一区和二区| 国产中文一区二区三区| 国产精品久久久久久久久免费相片 | 亚洲女女做受ⅹxx高潮| 色先锋aa成人| 国产偷国产偷精品高清尤物| 国产精品一区二区三区四区 | 亚洲制服欧美中文字幕中文字幕| 国产精品77777| 国产精品白丝在线| 欧美日韩国产综合一区二区三区| 亚洲欧美区自拍先锋| 欧美视频日韩视频在线观看| 亚洲手机成人高清视频| 高清国产一区二区| 亚洲欧美韩国综合色| 7878成人国产在线观看| 国内成人自拍视频| 亚洲精品中文在线观看| 精彩视频一区二区| 1区2区3区精品视频| 欧美精品亚洲二区| 国产成人精品免费一区二区| 亚洲精品在线观| 色综合网站在线| 亚洲色欲色欲www| 日韩一卡二卡三卡四卡| 不卡一二三区首页| 日本不卡一区二区| 99国产精品一区| 亚洲精品水蜜桃| 欧美精品一区二区在线播放| 99视频国产精品| 亚洲三级电影全部在线观看高清| 欧美二区三区的天堂| 成人中文字幕电影| 18欧美亚洲精品| 精品久久五月天| 国产精品91xxx| 天天做天天摸天天爽国产一区 | 一区二区三区加勒比av| 久久久国际精品| 欧美一区二区免费视频| 91伊人久久大香线蕉| 国产一区二区三区在线观看免费| 亚洲国产精品人人做人人爽| 国产欧美日韩三区| 日韩情涩欧美日韩视频| 在线视频国内自拍亚洲视频| 午夜精品一区二区三区免费视频| 亚洲四区在线观看| 国产日本一区二区| 精品国产人成亚洲区| 欧美一区二区播放| 欧美日韩激情在线| 欧美无砖专区一中文字| 色综合夜色一区| 91香蕉视频黄| 99久久99精品久久久久久| 成人精品免费网站| 国产成人av电影在线观看| 精品综合久久久久久8888| 久久精品免费观看| 久久狠狠亚洲综合| 狠狠色丁香婷综合久久| 精品一区二区成人精品| 久久不见久久见免费视频7| 秋霞午夜av一区二区三区| 污片在线观看一区二区| 日韩成人精品在线观看| 久久国产剧场电影| 国产又黄又大久久| 成人av综合在线| 91麻豆自制传媒国产之光| 不卡一区二区在线| 一本一道久久a久久精品 | 亚洲精品乱码久久久久久| 亚洲三级在线免费| 亚洲精品久久7777| 亚洲一区二区三区激情| 婷婷夜色潮精品综合在线| 日韩精品国产欧美| 国产精品国产自产拍高清av| 国产精品久久国产精麻豆99网站| 国产精品丝袜一区| 亚洲欧美日韩一区二区三区在线观看| 亚洲欧美视频在线观看视频| 亚洲美女在线国产| 日本视频一区二区| 国产精品亚洲一区二区三区妖精| 成人动漫一区二区三区| 在线视频中文字幕一区二区| 欧美欧美欧美欧美首页| 久久婷婷一区二区三区| 中文字幕制服丝袜一区二区三区| 亚洲一区二区三区四区五区黄| 丝瓜av网站精品一区二区| 狠狠久久亚洲欧美| 色综合天天综合网国产成人综合天| 欧美日韩一区二区在线观看视频 | 蜜臀91精品一区二区三区| 一区二区三区免费在线观看| 日韩主播视频在线| 国产精品中文字幕日韩精品 | 国产成人精品在线看| 色综合久久六月婷婷中文字幕| 91精品黄色片免费大全| 国产欧美日韩精品在线| 亚洲成人av资源| 成人中文字幕合集| 91精品国产综合久久久久久久 | 不卡视频一二三| 7878成人国产在线观看| 国产精品美女久久久久aⅴ| 午夜一区二区三区视频| 国产成人av福利| 欧美精品三级日韩久久| 国产精品灌醉下药二区| 精品在线你懂的| 欧美日韩亚洲国产综合| 国产精品九色蝌蚪自拍| 久久成人av少妇免费| 欧美图区在线视频| 欧美激情一二三区| 久久成人羞羞网站| 欧美欧美欧美欧美| 一片黄亚洲嫩模| 99久久久无码国产精品| wwwwww.欧美系列| 全国精品久久少妇| 欧美日韩1区2区| 亚洲一区欧美一区| 97国产一区二区| 日本一区二区视频在线| 国产伦精品一区二区三区免费| 欧美人妇做爰xxxⅹ性高电影| 亚洲欧洲日产国产综合网| 国产精品一区久久久久| 欧美成人艳星乳罩| 热久久国产精品| 欧美一区二区在线不卡| 午夜久久久久久久久| 欧美午夜精品一区| 亚洲一区二区三区在线| 欧洲另类一二三四区| 亚洲精品老司机| 欧美伊人久久久久久午夜久久久久| 亚洲欧美电影一区二区| 91在线精品一区二区| 自拍av一区二区三区|