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

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

?? tntclasses.pas

?? TNT Components Source
?? 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精品国产色综合久久久蜜香臀| 精品国产乱码久久久久久夜甘婷婷 | 欧美日韩精品一区二区天天拍小说| 欧美国产日韩a欧美在线观看| 国产在线精品免费av| 欧美电视剧在线看免费| 蜜臀91精品一区二区三区 | 国产成人一区在线| 国产色91在线| 色诱视频网站一区| 国产精品久久精品日日| 91麻豆免费在线观看| 一区二区欧美在线观看| 欧美伊人久久大香线蕉综合69| 麻豆极品一区二区三区| 久久综合一区二区| 成人黄色小视频| 亚洲国产精品久久不卡毛片 | 一区二区三区在线免费视频| 欧美午夜精品一区二区蜜桃| 久久av中文字幕片| 亚洲色图欧美激情| 日韩三级免费观看| 97久久精品人人做人人爽| 午夜精品久久久| 国产欧美一区二区三区鸳鸯浴| 99久久国产免费看| 韩国欧美国产一区| 亚洲制服丝袜一区| 国产亚洲午夜高清国产拍精品| 欧美三级一区二区| 欧美专区日韩专区| 成人激情视频网站| 蜜臀久久99精品久久久画质超高清 | 激情综合网最新| 亚洲一区二区三区免费视频| 2021国产精品久久精品 | 久久99久久久欧美国产| 依依成人精品视频| 亚洲欧洲性图库| 中文字幕精品一区二区精品绿巨人| 69堂成人精品免费视频| 欧美亚州韩日在线看免费版国语版| 国产风韵犹存在线视精品| 日本怡春院一区二区| 亚洲国产wwwccc36天堂| 一区二区三区在线免费视频| 亚洲人成影院在线观看| 中文字幕亚洲视频| 国产一区视频导航| 国产精品一品视频| 国产91丝袜在线观看| 国产成人午夜电影网| 成人动漫av在线| 91丨国产丨九色丨pron| 欧美图片一区二区三区| 欧美高清一级片在线| 精品国产精品一区二区夜夜嗨| 欧美电影免费观看完整版| 精品av综合导航| 亚洲黄色小视频| 日韩精品免费视频人成| 国产一区二区久久| 色视频成人在线观看免| 欧美精品 国产精品| 精品福利av导航| 欧美男同性恋视频网站| 久久精品一级爱片| 亚洲乱码国产乱码精品精可以看| 高清国产午夜精品久久久久久| av一本久道久久综合久久鬼色| 欧美性受xxxx| 久久九九久久九九| 亚洲一线二线三线视频| 国产乱码精品一区二区三区av| 99国产精品久久久久久久久久| 欧美精品在线观看一区二区| 久久影院午夜论| 亚洲国产综合色| 另类小说一区二区三区| 色婷婷av一区二区| 久久综合色天天久久综合图片| 国产精品成人午夜| 国产在线视视频有精品| 欧美一级国产精品| 亚瑟在线精品视频| 欧美日韩视频在线一区二区| 国产精品无圣光一区二区| 狠狠色丁香婷婷综合| 9191国产精品| 日本成人中文字幕| 在线不卡一区二区| 午夜国产精品影院在线观看| 日本久久精品电影| 亚洲欧美日韩小说| 99re在线精品| 亚洲国产一区二区三区| 欧美在线综合视频| 午夜影视日本亚洲欧洲精品| 色综合色狠狠综合色| 亚洲精品中文字幕在线观看| 97久久超碰国产精品| 综合色中文字幕| 欧美日韩一区不卡| 五月婷婷综合网| 久久嫩草精品久久久久| 国产电影一区在线| 亚洲影视在线播放| 欧美一卡2卡3卡4卡| 国产一区二区三区久久悠悠色av| 日韩一区二区三区av| 国产中文字幕一区| 欧美国产精品一区| 欧美色综合影院| 蜜臀av一区二区在线观看| 久久综合九色综合久久久精品综合| 麻豆一区二区三| 成人欧美一区二区三区黑人麻豆 | 国产精品18久久久久久久久 | 中文字幕一区二区不卡| 91黄色免费网站| 日韩中文字幕1| 国产精品福利电影一区二区三区四区| 99精品久久免费看蜜臀剧情介绍| 中文字幕在线不卡一区二区三区 | 国产中文字幕一区| 午夜久久久久久电影| 久久看人人爽人人| 日韩欧美一级二级三级| 欧洲生活片亚洲生活在线观看| 蜜桃视频一区二区三区| 一区二区三区蜜桃网| 国产午夜三级一区二区三| 666欧美在线视频| 91福利在线免费观看| www.日韩在线| 国产高清成人在线| 国产呦萝稀缺另类资源| 日本伊人午夜精品| 日韩精品一二三四| 亚洲国产裸拍裸体视频在线观看乱了| 国产精品午夜在线| 中文字幕av一区二区三区| 国产亚洲成年网址在线观看| 91精品视频网| 欧美mv日韩mv亚洲| 日韩欧美电影在线| 精品福利视频一区二区三区| 日韩精品中文字幕在线不卡尤物| 欧美精品aⅴ在线视频| 欧美裸体一区二区三区| 欧美日韩一二区| 91精品久久久久久久99蜜桃| 欧美日韩一二三区| 日韩欧美www| 久久九九影视网| 裸体歌舞表演一区二区| 国产剧情一区在线| a4yy欧美一区二区三区| 欧美日韩国产三级| 久久综合中文字幕| 亚洲欧美日韩综合aⅴ视频| 亚洲成a人在线观看| 免费日韩伦理电影| 91网页版在线| 久久先锋资源网| 亚洲一卡二卡三卡四卡无卡久久| 日日夜夜一区二区| 国产91丝袜在线播放0| 欧美日韩视频不卡| 国产日韩在线不卡| 蜜臀av一区二区在线免费观看| 大桥未久av一区二区三区中文| 欧美久久一二区| 综合欧美亚洲日本| 国产精品一区二区久久不卡| 日本精品裸体写真集在线观看| 2017欧美狠狠色| 亚洲va国产天堂va久久en| 国产一区二区三区免费观看| 欧美色视频在线| 亚洲欧美另类图片小说| 韩国三级中文字幕hd久久精品| 色综合av在线| 欧美极品美女视频| 国产激情偷乱视频一区二区三区| 94色蜜桃网一区二区三区| 国产精品丝袜久久久久久app| 日韩av一级片| 欧美日韩精品专区| 亚洲综合小说图片| 91在线丨porny丨国产| 国产网红主播福利一区二区| 另类人妖一区二区av| 欧美一级理论片| 精品午夜久久福利影院| 5858s免费视频成人| 亚洲va欧美va人人爽午夜| 欧美日韩一区二区三区免费看 | 国产人妖乱国产精品人妖|