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

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

?? tntsystem.pas

?? Delphi知道現(xiàn)在也沒有提供Unicode支持
?? PAS
?? 第 1 頁 / 共 3 頁
字號:

{*****************************************************************************}
{                                                                             }
{    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 TntSystem;

{$INCLUDE TntCompilers.inc}

{*****************************************************************************}
{  Special thanks go to Francisco Leong for originating the design for        }
{    WideString-enabled resourcestrings.                                      }
{*****************************************************************************}

interface

uses
  Windows;

// These functions should not be used by Delphi code since conversions are implicit.
{TNT-WARN WideCharToString}
{TNT-WARN WideCharLenToString}
{TNT-WARN WideCharToStrVar}
{TNT-WARN WideCharLenToStrVar}
{TNT-WARN StringToWideChar}

// ................ ANSI TYPES ................
{TNT-WARN Char}
{TNT-WARN PChar}
{TNT-WARN String}

{TNT-WARN CP_ACP} // <-- use DefaultSystemCodePage
function DefaultSystemCodePage: Cardinal; // implicitly used when converting AnsiString <--> WideString.

var
  WideCustomLoadResString: function(ResStringRec: PResStringRec; var Value: WideString): Boolean;

{TNT-WARN LoadResString}
function WideLoadResString(ResStringRec: PResStringRec): WideString;
{TNT-WARN ParamCount}
function WideParamCount: Integer;
{TNT-WARN ParamStr}
function WideParamStr(Index: Integer): WideString;

// ......... introduced .........

const
  { Each Unicode stream should begin with the code U+FEFF,  }
  {   which the standard defines as the *byte order mark*.  }
  UNICODE_BOM = WideChar($FEFF);
  UNICODE_BOM_SWAPPED = WideChar($FFFE);
  UTF8_BOM = AnsiString(#$EF#$BB#$BF);

function WideStringToUTF8(const S: WideString): AnsiString;
function UTF8ToWideString(const S: AnsiString): WideString;

function WideStringToUTF7(const W: WideString): AnsiString;
function UTF7ToWideString(const S: AnsiString): WideString;

function StringToWideStringEx(const S: AnsiString; CodePage: Cardinal): WideString;
function WideStringToStringEx(const WS: WideString; CodePage: Cardinal): AnsiString;

function UCS2ToWideString(const Value: AnsiString): WideString;
function WideStringToUCS2(const Value: WideString): AnsiString;

function CharSetToCodePage(ciCharset: UINT): Cardinal;
function LCIDToCodePage(ALcid: LCID): Cardinal;
function KeyboardCodePage: Cardinal;
function KeyUnicode(CharCode: Word): WideChar;

procedure StrSwapByteOrder(Str: PWideChar);

type
  TTntSystemUpdate =
    (tsWideResourceStrings
     {$IFNDEF COMPILER_9_UP}, tsFixImplicitCodePage, tsFixWideStrConcat, tsFixWideFormat {$ENDIF}
    );
  TTntSystemUpdateSet = set of TTntSystemUpdate;

const
  AllTntSystemUpdates = [Low(TTntSystemUpdate)..High(TTntSystemUpdate)];

procedure InstallTntSystemUpdates(Updates: TTntSystemUpdateSet = AllTntSystemUpdates);

implementation

uses
  SysUtils, Variants, TntWindows, TntSysUtils;

var
  GDefaultSystemCodePage: Cardinal;

function DefaultSystemCodePage: Cardinal;
begin
  Result := GDefaultSystemCodePage;
end;

var
  IsDebugging: Boolean;

function WideLoadResString(ResStringRec: PResStringRec): WideString;
const
  MAX_RES_STRING_SIZE = 4097; { MSDN documents this as the maximum size of a string in table. }
var
  Buffer: array [0..MAX_RES_STRING_SIZE] of WideChar; { Buffer leaves room for null terminator. }
  PCustom: PAnsiChar;
begin
  if Assigned(WideCustomLoadResString) and WideCustomLoadResString(ResStringRec, Result) then
    exit; { a custom resourcestring has been loaded. }

  if ResStringRec = nil then
    Result := ''
  else if ResStringRec.Identifier < 64*1024 then
    SetString(Result, Buffer,
      Tnt_LoadStringW(FindResourceHInstance(ResStringRec.Module^),
        ResStringRec.Identifier, Buffer, MAX_RES_STRING_SIZE))
  else begin
    // custom string pointer
    PCustom := PAnsiChar(ResStringRec.Identifier); { I would like to use PWideChar, but this would break legacy code. }
    if  (StrLen{TNT-ALLOW StrLen}(PCustom) > Cardinal(Length(UTF8_BOM)))
    and CompareMem(PCustom, PAnsiChar(UTF8_BOM), Length(UTF8_BOM)) then
      // detected UTF8
      Result := UTF8ToWideString(PAnsiChar(PCustom + Length(UTF8_BOM)))
    else
      // normal
      Result := PCustom;
  end;
end;

function WideGetParamStr(P: PWideChar; var Param: WideString): PWideChar;
var
  i, Len: Integer;
  Start, S, Q: PWideChar;
begin
  while True do
  begin
    while (P[0] <> #0) and (P[0] <= ' ') do
      Inc(P);
    if (P[0] = '"') and (P[1] = '"') then Inc(P, 2) else Break;
  end;
  Len := 0;
  Start := P;
  while P[0] > ' ' do
  begin
    if P[0] = '"' then
    begin
      Inc(P);
      while (P[0] <> #0) and (P[0] <> '"') do
      begin
        Q := P + 1;
        Inc(Len, Q - P);
        P := Q;
      end;
      if P[0] <> #0 then
        Inc(P);
    end
    else
    begin
      Q := P + 1;
      Inc(Len, Q - P);
      P := Q;
    end;
  end;

  SetLength(Param, Len);

  P := Start;
  S := PWideChar(Param);
  i := 0;
  while P[0] > ' ' do
  begin
    if P[0] = '"' then
    begin
      Inc(P);
      while (P[0] <> #0) and (P[0] <> '"') do
      begin
        Q := P + 1;
        while P < Q do
        begin
          S[i] := P^;
          Inc(P);
          Inc(i);
        end;
      end;
      if P[0] <> #0 then Inc(P);
    end
    else
    begin
      Q := P + 1;
      while P < Q do
      begin
        S[i] := P^;
        Inc(P);
        Inc(i);
      end;
    end;
  end;

  Result := P;
end;

function WideParamCount: Integer;
var
  P: PWideChar;
  S: WideString;
begin
  P := WideGetParamStr(GetCommandLineW, S);
  Result := 0;
  while True do
  begin
    P := WideGetParamStr(P, S);
    if S = '' then Break;
    Inc(Result);
  end;
end;

function WideParamStr(Index: Integer): WideString;
var
  P: PWideChar;
begin
  if Index = 0 then
    Result := WideGetModuleFileName(0)
  else
  begin
    P := GetCommandLineW;
    while True do
    begin
      P := WideGetParamStr(P, Result);
      if (Index = 0) or (Result = '') then Break;
      Dec(Index);
    end;
  end;
end;

function WideStringToUTF8(const S: WideString): AnsiString;
begin
  Result := UTF8Encode(S);
end;

function UTF8ToWideString(const S: AnsiString): WideString;
begin
  Result := UTF8Decode(S);
end;

  { ======================================================================= }
  { Original File:   ConvertUTF7.c                                          }
  { Author: David B. Goldsmith                                              }
  { Copyright (C) 1994, 1996 Taligent, Inc. All rights reserved.            }
  {                                                                         }
  { This code is copyrighted. Under the copyright laws, this code may not   }
  { be copied, in whole or part, without prior written consent of Taligent. }
  {                                                                         }
  { Taligent grants the right to use this code as long as this ENTIRE       }
  { copyright notice is reproduced in the code.  The code is provided       }
  { AS-IS, AND TALIGENT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR         }
  { IMPLIED, INCLUDING, BUT NOT LIMITED TO IMPLIED WARRANTIES OF            }
  { MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT      }
  { WILL TALIGENT BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING,          }
  { WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS      }
  { INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY          }
  { LOSS) ARISING OUT OF THE USE OR INABILITY TO USE THIS CODE, EVEN        }
  { IF TALIGENT HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.        }
  { BECAUSE SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF         }
  { LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES, THE ABOVE            }
  { LIMITATION MAY NOT APPLY TO YOU.                                        }
  {                                                                         }
  { RESTRICTED RIGHTS LEGEND: Use, duplication, or disclosure by the        }
  { government is subject to restrictions as set forth in subparagraph      }
  { (c)(l)(ii) of the Rights in Technical Data and Computer Software        }
  { clause at DFARS 252.227-7013 and FAR 52.227-19.                         }
  {                                                                         }
  { This code may be protected by one or more U.S. and International        }
  { Patents.                                                                }
  {                                                                         }
  { TRADEMARKS: Taligent and the Taligent Design Mark are registered        }
  { trademarks of Taligent, Inc.                                            }
  { ======================================================================= }

type UCS2 = Word;

const
  _base64: AnsiString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  _direct: AnsiString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789''(),-./:?';
  _optional: AnsiString = '!"#$%&*;<=>@[]^_`{|}';
  _spaces: AnsiString = #9#13#10#32;

var
  base64: PAnsiChar;
  invbase64: array[0..127] of SmallInt;
  direct: PAnsiChar;
  optional: PAnsiChar;
  spaces: PAnsiChar;
  mustshiftsafe: array[0..127] of AnsiChar;
  mustshiftopt: array[0..127] of AnsiChar;

var
  needtables: Boolean = True;

procedure Initialize_UTF7_Data;
begin
  base64 := PAnsiChar(_base64);
  direct := PAnsiChar(_direct);
  optional := PAnsiChar(_optional);
  spaces := PAnsiChar(_spaces);
end;

procedure tabinit;
var
  i: Integer;
  limit: Integer;
begin
  i := 0;
  while (i < 128) do
  begin
    mustshiftopt[i] := #1;
    mustshiftsafe[i] := #1;
    invbase64[i] := -1;
    Inc(i);
  end { For };
  limit := Length(_Direct);
  i := 0;
  while (i < limit) do
  begin
    mustshiftopt[Integer(direct[i])] := #0;
    mustshiftsafe[Integer(direct[i])] := #0;
    Inc(i);
  end { For };
  limit := Length(_Spaces);
  i := 0;
  while (i < limit) do
  begin
    mustshiftopt[Integer(spaces[i])] := #0;
    mustshiftsafe[Integer(spaces[i])] := #0;
    Inc(i);
  end { For };
  limit := Length(_Optional);
  i := 0;
  while (i < limit) do
  begin
    mustshiftopt[Integer(optional[i])] := #0;
    Inc(i);
  end { For };
  limit := Length(_Base64);
  i := 0;
  while (i < limit) do
  begin
    invbase64[Integer(base64[i])] := i;
    Inc(i);
  end { For };
  needtables := False;
end; { tabinit }

function WRITE_N_BITS(x: UCS2; n: Integer; var BITbuffer: Cardinal; var bufferbits: Integer): Integer;
begin
  BITbuffer := BITbuffer or (x and (not (-1 shl n))) shl (32 - n - bufferbits);
  bufferbits := bufferbits + n;
  Result := bufferbits;
end; { WRITE_N_BITS }

function READ_N_BITS(n: Integer; var BITbuffer: Cardinal; var bufferbits: Integer): UCS2;
var
  buffertemp: Cardinal;
begin
  buffertemp := BITbuffer shr (32 - n);
  BITbuffer := BITbuffer shl n;
  bufferbits := bufferbits - n;
  Result := UCS2(buffertemp);
end; { READ_N_BITS }

function ConvertUCS2toUTF7(var sourceStart: PWideChar; sourceEnd: PWideChar;
  var targetStart: PAnsiChar; targetEnd: PAnsiChar; optional: Boolean;
    verbose: Boolean): Integer;
var
  r: UCS2;
  target: PAnsiChar;
  source: PWideChar;
  BITbuffer: Cardinal;
  bufferbits: Integer;
  shifted: Boolean;
  needshift: Boolean;
  done: Boolean;
  mustshift: PAnsiChar;
begin
  Initialize_UTF7_Data;
  Result := 0;
  BITbuffer := 0;
  bufferbits := 0;
  shifted := False;
  source := sourceStart;
  target := targetStart;
  r := 0;
  if needtables then
    tabinit;
  if optional then
    mustshift := @mustshiftopt[0]
  else
    mustshift := @mustshiftsafe[0];
  repeat
    done := source >= sourceEnd;
    if not Done then
    begin
      r := Word(source^);
      Inc(Source);
    end { If };
    needshift := (not done) and ((r > $7F) or (mustshift[r] <> #0));
    if needshift and (not shifted) then
    begin
      if (Target >= TargetEnd) then
      begin
        Result := 2;
        break;
      end { If };
      target^ := '+';
      Inc(target);
      { Special case handling of the SHIFT_IN character }
      if (r = UCS2('+')) then
      begin
        if (target >= targetEnd) then
        begin
          Result := 2;
          break;
        end;
        target^ := '-';
        Inc(target);
      end
      else
        shifted := True;
    end { If };
    if shifted then
    begin
      { Either write the character to the bit buffer, or pad }
      { the bit buffer out to a full base64 character. }
      { }
      if needshift then
        WRITE_N_BITS(r, 16, BITbuffer, bufferbits)
      else
        WRITE_N_BITS(0, (6 - (bufferbits mod 6)) mod 6, BITbuffer,
          bufferbits);
      { Flush out as many full base64 characters as possible }
      { from the bit buffer. }
      { }
      while (target < targetEnd) and (bufferbits >= 6) do
      begin
        Target^ := base64[READ_N_BITS(6, BITbuffer, bufferbits)];
        Inc(Target);
      end { While };
      if (bufferbits >= 6) then
      begin
        if (target >= targetEnd) then
        begin
          Result := 2;
          break;
        end { If };
      end { If };
      if (not needshift) then
      begin

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
菠萝蜜视频在线观看一区| 精品蜜桃在线看| 成人欧美一区二区三区小说| 国产福利一区在线观看| 欧美久久一二三四区| 午夜欧美在线一二页| 91精品国产91久久久久久最新毛片 | 亚洲成人免费av| 欧美一级二级在线观看| 日本成人超碰在线观看| 精品免费视频一区二区| 国产成人精品网址| 亚洲精品欧美二区三区中文字幕| 在线精品视频小说1| 亚洲一卡二卡三卡四卡无卡久久 | 久久亚洲私人国产精品va媚药| 国内精品免费在线观看| 国产精品久久久久久久久免费樱桃| 99久久精品国产精品久久| 亚洲动漫第一页| 精品国产免费一区二区三区香蕉| 不卡一区二区中文字幕| 亚洲成人在线观看视频| 中文字幕不卡在线观看| 在线播放视频一区| 99re这里只有精品视频首页| 夜夜亚洲天天久久| 国产女人18毛片水真多成人如厕| 色天天综合久久久久综合片| 九九国产精品视频| 一区二区三区电影在线播| 日韩欧美一级二级| 欧美性猛交xxxxxxxx| 高清成人免费视频| 国产精品一区二区三区四区| 一区二区三区精品视频在线| 国产午夜精品一区二区三区四区| 欧美日韩成人在线一区| 色婷婷av一区二区三区gif| www.亚洲人| 91一区二区在线| gogo大胆日本视频一区| 成人黄页在线观看| 成人app下载| 国产99久久久精品| 久久一日本道色综合| 欧洲亚洲精品在线| 丰满白嫩尤物一区二区| 激情欧美一区二区三区在线观看| 一区二区三区日韩| 最新不卡av在线| 欧美激情在线观看视频免费| 精品日本一线二线三线不卡| 欧美成人r级一区二区三区| 欧美丰满少妇xxxxx高潮对白| 91视频精品在这里| 欧美日韩一区二区三区四区五区 | 国产精品国产三级国产三级人妇| 久久久亚洲高清| 国产精品久久毛片av大全日韩| 久久免费看少妇高潮| 久久久99精品免费观看| 中文字幕在线视频一区| 亚洲夂夂婷婷色拍ww47| 一区二区三区四区乱视频| 亚洲最快最全在线视频| 亚洲欧美自拍偷拍色图| 艳妇臀荡乳欲伦亚洲一区| 不卡电影一区二区三区| 91色在线porny| 91精品国产综合久久久蜜臀粉嫩| 337p粉嫩大胆噜噜噜噜噜91av| 久久久精品一品道一区| 午夜一区二区三区视频| 国产一区二区精品久久99| a级高清视频欧美日韩| 97久久精品人人爽人人爽蜜臀| 97成人超碰视| 精品国产99国产精品| 欧美激情在线看| 亚洲欧美二区三区| 日韩高清电影一区| 久久91精品久久久久久秒播| 成人黄色片在线观看| 7777精品伊人久久久大香线蕉的 | 日韩精品色哟哟| 成人av片在线观看| 欧美亚洲国产bt| 日本一二三四高清不卡| 首页国产欧美久久| 一道本成人在线| 日韩欧美亚洲国产另类| 亚洲va欧美va人人爽午夜| 亚洲国产中文字幕| 国产成人精品亚洲777人妖| 欧美系列日韩一区| 久久综合色天天久久综合图片| 亚洲va国产天堂va久久en| 成人福利视频在线| 欧美成人一区二区三区片免费| 中文字幕一区二区三区在线不卡| 五月天激情综合网| 一本大道久久a久久精二百 | 青青国产91久久久久久| 欧美亚洲一区二区在线| 亚洲免费观看在线观看| av电影在线观看一区| 亚洲人成亚洲人成在线观看图片 | 亚洲一区欧美一区| 欧美日韩在线免费视频| 亚洲综合精品久久| 一本到不卡免费一区二区| 亚洲欧美激情视频在线观看一区二区三区| 国产一区二区视频在线| 欧美精品一区二区三区一线天视频| 亚洲国产一区在线观看| 欧美一级久久久久久久大片| 国产真实乱子伦精品视频| 日本一区二区成人在线| av成人老司机| 亚洲天天做日日做天天谢日日欢 | 亚洲一区二区三区在线看| 97成人超碰视| 亚洲综合免费观看高清在线观看| 91福利国产精品| 无吗不卡中文字幕| 26uuu亚洲综合色欧美| 成人国产精品免费网站| 亚洲最新在线观看| 久久―日本道色综合久久| 91理论电影在线观看| 午夜电影网亚洲视频| 日韩欧美中文字幕一区| 免费久久99精品国产| 日韩一区中文字幕| 555www色欧美视频| 91免费看片在线观看| 日本成人中文字幕| 亚洲午夜久久久久久久久久久 | 亚洲视频在线一区| 91在线小视频| 成人午夜在线播放| 免费精品视频最新在线| 午夜欧美视频在线观看| 国产精品丝袜一区| 久久这里只精品最新地址| 色呦呦网站一区| 国产成人精品aa毛片| 日韩av电影免费观看高清完整版| 中文av一区特黄| 欧美一区二区三区在线电影| 欧美综合色免费| 国产电影精品久久禁18| 麻豆精品一区二区| 一区二区三区日本| 日韩理论片中文av| 亚洲综合一区二区三区| 久久久.com| 中文av一区特黄| 国产午夜精品理论片a级大结局| 欧美xxxxx裸体时装秀| 成人av综合一区| 成人综合激情网| 色综合天天综合色综合av| 成人一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃| 一区二区三区精品在线观看| 亚洲欧美日韩综合aⅴ视频| **性色生活片久久毛片| 亚洲精品你懂的| 亚洲欧美日韩久久| 日日夜夜一区二区| 日日摸夜夜添夜夜添国产精品| 蜜臀精品久久久久久蜜臀| 性做久久久久久免费观看欧美| 午夜精品一区在线观看| 久久国产精品99久久久久久老狼| 国产精品性做久久久久久| 日本乱码高清不卡字幕| 欧美一区午夜视频在线观看| 精品国产三级a在线观看| 国产午夜精品福利| 依依成人综合视频| 国产一区二区三区免费| 波波电影院一区二区三区| 日韩精品一区二区三区三区免费| 久久久久国色av免费看影院| 六月丁香婷婷久久| 91久久奴性调教| 欧美mv日韩mv国产网站| 国产欧美精品国产国产专区| 另类小说欧美激情| 国产成人精品亚洲午夜麻豆| 日韩一区二区免费在线电影| 日本亚洲视频在线| 欧美一区二区在线免费观看| 亚洲色图一区二区| 欧美手机在线视频| 亚洲国产欧美在线人成| 欧美色倩网站大全免费|