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

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

?? tntclasses.pas

?? Delphi知道現在也沒有提供Unicode支持
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
        Result := True;
        break; { found a string with non-ASCII chars (> 127) }
      end;
    end;
  end;
  {$ENDIF}

begin
  inherited DefineProperties(Filer); { Handles main 'Strings' property.' }
  Filer.DefineProperty('WideStrings', ReadData, nil, False);
  Filer.DefineProperty('WideStringsW', ReadDataUTF8, nil, False);
  {$IFDEF COMPILER_7_UP}
  Filer.DefineProperty('WideStrings_UTF7', ReadDataUTF7, WriteDataUTF7, False);
  {$ELSE}
  Filer.DefineProperty('WideStrings_UTF7', ReadDataUTF7, WriteDataUTF7, DoWrite and DoWriteAsUTF7);
  {$ENDIF}
end;

procedure TTntStrings.LoadFromFile(const FileName: WideString);
var
  Stream: TStream;
begin
  Stream := TTntFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    FLastFileCharSet := AutoDetectCharacterSet(Stream);
    Stream.Position := 0;
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TTntStrings.LoadFromStream(Stream: TStream);
begin
  LoadFromStream_BOM(Stream, True);
end;

procedure TTntStrings.LoadFromStream_BOM(Stream: TStream; WithBOM: Boolean);
var
  DataLeft: Integer;
  StreamCharSet: TTntStreamCharSet;
  SW: WideString;
  SA: AnsiString;
begin
  BeginUpdate;
  try
    if WithBOM then
      StreamCharSet := AutoDetectCharacterSet(Stream)
    else
      StreamCharSet := csUnicode;
    DataLeft := Stream.Size - Stream.Position;
    if (StreamCharSet in [csUnicode, csUnicodeSwapped]) then
    begin
      // BOM indicates Unicode text stream
      if DataLeft < SizeOf(WideChar) then
        SW := ''
      else begin
        SetLength(SW, DataLeft div SizeOf(WideChar));
        Stream.Read(PWideChar(SW)^, DataLeft);
        if StreamCharSet = csUnicodeSwapped then
          StrSwapByteOrder(PWideChar(SW));
      end;
      SetTextStr(SW);
    end
    else if StreamCharSet = csUtf8 then
    begin
      // BOM indicates UTF-8 text stream
      SetLength(SA, DataLeft div SizeOf(AnsiChar));
      Stream.Read(PAnsiChar(SA)^, DataLeft);
      SetTextStr(UTF8ToWideString(SA));
    end
    else
    begin
      // without byte order mark it is assumed that we are loading ANSI text
      SetLength(SA, DataLeft div SizeOf(AnsiChar));
      Stream.Read(PAnsiChar(SA)^, DataLeft);
      SetTextStr(SA);
    end;
  finally
    EndUpdate;
  end;
end;

procedure TTntStrings.ReadData(Reader: TReader);
begin
  if Reader.NextValue in [vaString, vaLString] then
    SetTextStr(Reader.ReadString) {JCL compatiblity}
  else if Reader.NextValue = vaWString then
    SetTextStr(Reader.ReadWideString) {JCL compatiblity}
  else begin
    BeginUpdate;
    try
      Clear;
      Reader.ReadListBegin;
      while not Reader.EndOfList do
        if Reader.NextValue in [vaString, vaLString] then
          Add(Reader.ReadString) {TStrings compatiblity}
        else
          Add(Reader.ReadWideString);
      Reader.ReadListEnd;
    finally
      EndUpdate;
    end;
  end;
end;

procedure TTntStrings.ReadDataUTF7(Reader: TReader);
begin
  Reader.ReadListBegin;
  if ReaderNeedsUtfHelp(Reader) then
  begin
    BeginUpdate;
    try
      Clear;
      while not Reader.EndOfList do
        Add(UTF7ToWideString(Reader.ReadString))
    finally
      EndUpdate;
    end;
  end else begin
    while not Reader.EndOfList do
      Reader.ReadString; { do nothing with Result }
  end;
  Reader.ReadListEnd;
end;

procedure TTntStrings.ReadDataUTF8(Reader: TReader);
begin
  Reader.ReadListBegin;
  if ReaderNeedsUtfHelp(Reader)
  or (Count = 0){ Legacy support where 'WideStrings' was never written in lieu of WideStringsW }
  then begin
    BeginUpdate;
    try
      Clear;
      while not Reader.EndOfList do
        Add(UTF8ToWideString(Reader.ReadString))
    finally
      EndUpdate;
    end;
  end else begin
    while not Reader.EndOfList do
      Reader.ReadString; { do nothing with Result }
  end;
  Reader.ReadListEnd;
end;

procedure TTntStrings.SaveToFile(const FileName: WideString);
var
  Stream: TStream;
begin
  Stream := TTntFileStream.Create(FileName, fmCreate);
  try
    SaveToStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TTntStrings.SaveToStream(Stream: TStream);
begin
  SaveToStream_BOM(Stream, True);
end;

procedure TTntStrings.SaveToStream_BOM(Stream: TStream; WithBOM: Boolean);
// Saves the currently loaded text into the given stream.
// WithBOM determines whether to write a byte order mark or not.
var
  SW: WideString;
  BOM: WideChar;
begin
  if WithBOM then begin
    BOM := UNICODE_BOM;
    Stream.WriteBuffer(BOM, SizeOf(WideChar));
  end;
  SW := GetTextStr;
  Stream.WriteBuffer(PWideChar(SW)^, Length(SW) * SizeOf(WideChar));
end;

procedure TTntStrings.WriteDataUTF7(Writer: TWriter);
var
  I: Integer;
begin
  Writer.WriteListBegin;
  for I := 0 to Count-1 do
    Writer.WriteString(WideStringToUTF7(Get(I)));
  Writer.WriteListEnd;
end;

{ TTntStringList }

destructor TTntStringList.Destroy;
begin
  FOnChange := nil;
  FOnChanging := nil;
  inherited Destroy;
  if FCount <> 0 then Finalize(FList^[0], FCount);
  FCount := 0;
  SetCapacity(0);
end;

function TTntStringList.Add(const S: WideString): Integer;
begin
  Result := AddObject(S, nil);
end;

function TTntStringList.AddObject(const S: WideString; AObject: TObject): Integer;
begin
  if not Sorted then
    Result := FCount
  else
    if Find(S, Result) then
      case Duplicates of
        dupIgnore: Exit;
        dupError: Error(PResStringRec(@SDuplicateString), 0);
      end;
  InsertItem(Result, S, AObject);
end;

procedure TTntStringList.Changed;
begin
  if (not FUpdating) and Assigned(FOnChange) then
    FOnChange(Self);
end;

procedure TTntStringList.Changing;
begin
  if (not FUpdating) and Assigned(FOnChanging) then
    FOnChanging(Self);
end;

procedure TTntStringList.Clear;
begin
  if FCount <> 0 then
  begin
    Changing;
    Finalize(FList^[0], FCount);
    FCount := 0;
    SetCapacity(0);
    Changed;
  end;
end;

procedure TTntStringList.Delete(Index: Integer);
begin
  if (Index < 0) or (Index >= FCount) then Error(PResStringRec(@SListIndexError), Index);
  Changing;
  Finalize(FList^[Index]);
  Dec(FCount);
  if Index < FCount then
    System.Move(FList^[Index + 1], FList^[Index],
      (FCount - Index) * SizeOf(TWideStringItem));
  Changed;
end;

procedure TTntStringList.Exchange(Index1, Index2: Integer);
begin
  if (Index1 < 0) or (Index1 >= FCount) then Error(PResStringRec(@SListIndexError), Index1);
  if (Index2 < 0) or (Index2 >= FCount) then Error(PResStringRec(@SListIndexError), Index2);
  Changing;
  ExchangeItems(Index1, Index2);
  Changed;
end;

procedure TTntStringList.ExchangeItems(Index1, Index2: Integer);
var
  Temp: Integer;
  Item1, Item2: PWideStringItem;
begin
  Item1 := @FList^[Index1];
  Item2 := @FList^[Index2];
  Temp := Integer(Item1^.FString);
  Integer(Item1^.FString) := Integer(Item2^.FString);
  Integer(Item2^.FString) := Temp;
  Temp := Integer(Item1^.FObject);
  Integer(Item1^.FObject) := Integer(Item2^.FObject);
  Integer(Item2^.FObject) := Temp;
end;

function TTntStringList.Find(const S: WideString; var Index: Integer): Boolean;
var
  L, H, I, C: Integer;
begin
  Result := False;
  L := 0;
  H := FCount - 1;
  while L <= H do
  begin
    I := (L + H) shr 1;
    C := CompareStrings(FList^[I].FString, S);
    if C < 0 then L := I + 1 else
    begin
      H := I - 1;
      if C = 0 then
      begin
        Result := True;
        if Duplicates <> dupAccept then L := I;
      end;
    end;
  end;
  Index := L;
end;

function TTntStringList.Get(Index: Integer): WideString;
begin
  if (Index < 0) or (Index >= FCount) then Error(PResStringRec(@SListIndexError), Index);
  Result := FList^[Index].FString;
end;

function TTntStringList.GetCapacity: Integer;
begin
  Result := FCapacity;
end;

function TTntStringList.GetCount: Integer;
begin
  Result := FCount;
end;

function TTntStringList.GetObject(Index: Integer): TObject;
begin
  if (Index < 0) or (Index >= FCount) then Error(PResStringRec(@SListIndexError), Index);
  Result := FList^[Index].FObject;
end;

procedure TTntStringList.Grow;
var
  Delta: Integer;
begin
  if FCapacity > 64 then Delta := FCapacity div 4 else
    if FCapacity > 8 then Delta := 16 else
      Delta := 4;
  SetCapacity(FCapacity + Delta);
end;

function TTntStringList.IndexOf(const S: WideString): Integer;
begin
  if not Sorted then Result := inherited IndexOf(S) else
    if not Find(S, Result) then Result := -1;
end;

function TTntStringList.IndexOfName(const Name: WideString): Integer;
var
  NameKey: WideString;
begin
  if not Sorted then
    Result := inherited IndexOfName(Name)
  else begin
    // use sort to find index more quickly
    NameKey := Name + NameValueSeparator;
    Find(NameKey, Result);
    if (Result < 0) or (Result > Count - 1) then
      Result := -1
    else if CompareStrings(NameKey, Copy(Strings[Result], 1, Length(NameKey))) <> 0 then
      Result := -1
  end;
end;

procedure TTntStringList.Insert(Index: Integer; const S: WideString);
begin
  InsertObject(Index, S, nil);
end;

procedure TTntStringList.InsertObject(Index: Integer; const S: WideString;
  AObject: TObject);
begin
  if Sorted then Error(PResStringRec(@SSortedListError), 0);
  if (Index < 0) or (Index > FCount) then Error(PResStringRec(@SListIndexError), Index);
  InsertItem(Index, S, AObject);
end;

procedure TTntStringList.InsertItem(Index: Integer; const S: WideString; AObject: TObject);
begin
  Changing;
  if FCount = FCapacity then Grow;
  if Index < FCount then
    System.Move(FList^[Index], FList^[Index + 1],
      (FCount - Index) * SizeOf(TWideStringItem));
  with FList^[Index] do
  begin
    Pointer(FString) := nil;
    FObject := AObject;
    FString := S;
  end;
  Inc(FCount);
  Changed;
end;

procedure TTntStringList.Put(Index: Integer; const S: WideString);
begin
  if Sorted then Error(PResStringRec(@SSortedListError), 0);
  if (Index < 0) or (Index >= FCount) then Error(PResStringRec(@SListIndexError), Index);
  Changing;
  FList^[Index].FString := S;
  Changed;
end;

procedure TTntStringList.PutObject(Index: Integer; AObject: TObject);
begin
  if (Index < 0) or (Index >= FCount) then Error(PResStringRec(@SListIndexError), Index);
  Changing;
  FList^[Index].FObject := AObject;
  Changed;
end;

procedure TTntStringList.QuickSort(L, R: Integer; SCompare: TWideStringListSortCompare);
var
  I, J, P: Integer;
begin
  repeat
    I := L;
    J := R;
    P := (L + R) shr 1;
    repeat
      while SCompare(Self, I, P) < 0 do Inc(I);
      while SCompare(Self, J, P) > 0 do Dec(J);
      if I <= J then
      begin
        ExchangeItems(I, J);
        if P = I then
          P := J
        else if P = J then
          P := I;
        Inc(I);
        Dec(J);
      end;
    until I > J;
    if L < J then QuickSort(L, J, SCompare);
    L := I;
  until I >= R;
end;

procedure TTntStringList.SetCapacity(NewCapacity: Integer);
begin
  ReallocMem(FList, NewCapacity * SizeOf(TWideStringItem));
  FCapacity := NewCapacity;
end;

procedure TTntStringList.SetSorted(Value: Boolean);
begin
  if FSorted <> Value then
  begin
    if Value then Sort;
    FSorted := Value;
  end;
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲资源在线观看| 亚洲自拍与偷拍| 男女激情视频一区| 日本精品一级二级| 国产农村妇女精品| 九九精品视频在线看| 欧美午夜精品久久久久久超碰 | 成人美女在线视频| 欧美一区二区在线免费观看| 亚洲在线中文字幕| 91香蕉视频在线| 欧美国产国产综合| 激情综合色丁香一区二区| 欧美日本国产一区| 亚洲激情在线激情| 97久久超碰国产精品| 欧美国产精品一区二区三区| 国内成人自拍视频| 日韩一区二区三区四区| 日日夜夜精品免费视频| 欧美日韩中字一区| 一区二区欧美视频| 91国产丝袜在线播放| 中文字幕中文字幕一区二区| 国产成人无遮挡在线视频| 精品久久久三级丝袜| 蜜桃视频在线观看一区| 欧美一区二区精品在线| 肉丝袜脚交视频一区二区| 欧美日韩一区成人| 亚洲网友自拍偷拍| 欧美午夜精品久久久久久孕妇| 亚洲免费在线播放| 在线一区二区三区四区五区| 一区二区三区不卡在线观看| 色综合天天综合色综合av| 亚洲女厕所小便bbb| 色香蕉久久蜜桃| 亚洲精品中文字幕乱码三区| 91丨porny丨国产入口| 亚洲精品美腿丝袜| 色8久久人人97超碰香蕉987| 一区二区三区波多野结衣在线观看| 91视频一区二区三区| 亚洲精品国产一区二区精华液 | 91免费视频观看| 亚洲欧洲美洲综合色网| 91亚洲精品久久久蜜桃网站| 一区二区三区在线观看视频| 91久久奴性调教| 亚洲成人先锋电影| 日韩一区二区三区高清免费看看| 麻豆视频观看网址久久| 精品国产一区二区三区久久久蜜月 | 久久久91精品国产一区二区三区| 国产一区二区在线免费观看| 久久久激情视频| 成人国产精品免费观看动漫| 亚洲色欲色欲www| 欧美婷婷六月丁香综合色| 日韩av高清在线观看| 日韩欧美一区在线| 国产成人午夜99999| 专区另类欧美日韩| 3d动漫精品啪啪| 国产在线精品一区二区夜色| 国产精品污www在线观看| 91视频观看免费| 日韩中文字幕不卡| 久久综合视频网| 99久久综合狠狠综合久久| 一区二区视频在线看| 337p亚洲精品色噜噜噜| 国产成人免费av在线| 一区二区三区视频在线看| 日韩欧美资源站| 不卡的av网站| 天天综合日日夜夜精品| 久久久av毛片精品| 欧美亚洲自拍偷拍| 黄色精品一二区| 一区二区在线观看免费视频播放| 日韩欧美一二三| 99精品视频一区| 久久精品av麻豆的观看方式| 国产精品乱人伦中文| 欧美人妇做爰xxxⅹ性高电影| 国产又粗又猛又爽又黄91精品| 最近日韩中文字幕| 欧美成人三级电影在线| 91麻豆免费观看| 久久精品99久久久| 一区二区三区成人在线视频| 精品久久久三级丝袜| 日本韩国精品在线| 久草精品在线观看| 亚洲综合一二区| 久久久久久**毛片大全| 精品视频色一区| 成人黄色av电影| 老司机一区二区| 一个色综合av| 欧美国产激情二区三区 | 国产成人亚洲综合色影视| 亚洲综合在线第一页| 国产亚洲综合在线| 欧美巨大另类极品videosbest | 久久99久国产精品黄毛片色诱| 中文字幕在线免费不卡| 欧美xxxxxxxx| 欧美日韩一区视频| 97久久精品人人做人人爽50路| 精品一区二区成人精品| 亚洲国产精品天堂| 国产精品另类一区| 欧美精品一区二区蜜臀亚洲| 欧美日韩国产综合视频在线观看 | 奇米影视在线99精品| 亚洲免费伊人电影| 国产精品五月天| 26uuu久久综合| 91麻豆精品国产自产在线观看一区 | 日本aⅴ亚洲精品中文乱码| 综合久久久久久久| 久久精品视频在线免费观看| 在线综合亚洲欧美在线视频| 欧美吞精做爰啪啪高潮| 91免费在线视频观看| 成人精品视频一区二区三区| 狠狠狠色丁香婷婷综合激情| 日韩中文字幕一区二区三区| 亚洲午夜电影在线| 亚洲精品乱码久久久久久黑人| 中文子幕无线码一区tr| 久久久国产综合精品女国产盗摄| 日韩一区二区三区av| 在线播放一区二区三区| 欧美亚洲国产bt| 日本精品免费观看高清观看| 99re成人精品视频| 99精品久久99久久久久| 成人精品视频.| 成人夜色视频网站在线观看| 国产成人av自拍| 国产99精品在线观看| 国内精品写真在线观看| 久久精品久久精品| 久久99国产精品久久99| 久久精品国产秦先生| 久久激五月天综合精品| 另类欧美日韩国产在线| 久久福利视频一区二区| 蜜臀av一区二区三区| 久久精品国产一区二区| 久草精品在线观看| 国产久卡久卡久卡久卡视频精品| 激情综合亚洲精品| 国产乱国产乱300精品| 国产成人亚洲综合a∨婷婷图片| 国产精品一区二区久激情瑜伽| 国产伦精品一区二区三区免费迷| 国产精品911| 成+人+亚洲+综合天堂| 91美女片黄在线观看91美女| 色乱码一区二区三区88| 欧美日韩亚洲另类| 欧美精品亚洲一区二区在线播放| 在线不卡a资源高清| 欧美成人激情免费网| 久久婷婷久久一区二区三区| 国产欧美精品一区| 亚洲欧美激情视频在线观看一区二区三区| 亚洲日本在线观看| 亚洲国产日韩a在线播放性色| 天天做天天摸天天爽国产一区| 青青草国产精品97视觉盛宴| 国产一区二区中文字幕| av一区二区三区| 欧美性感一类影片在线播放| 日韩一区二区视频在线观看| 久久蜜桃av一区精品变态类天堂| 国产精品久久久久久久久免费丝袜| 亚洲精品乱码久久久久久久久| 天堂在线亚洲视频| 国产在线日韩欧美| 91浏览器在线视频| 91精品国产全国免费观看| 久久久久9999亚洲精品| 亚洲人成小说网站色在线| 亚洲成a人v欧美综合天堂| 卡一卡二国产精品| 不卡电影免费在线播放一区| 欧美日韩亚州综合| 久久嫩草精品久久久精品| 亚洲人亚洲人成电影网站色| 天堂久久一区二区三区| 国产成人精品影视| 欧美在线观看18| 精品噜噜噜噜久久久久久久久试看| 国产精品免费免费|