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

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

?? tntwidestrings.pas

?? Delphi知道現在也沒有提供Unicode支持
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
  if (Count = 1) and (Get(0) = '') then
    Result := WideString(QuoteChar) + QuoteChar
  else
  begin
    Result := '';
    for I := 0 to Count - 1 do
    begin
      S := Get(I);
      P := PWideChar(S);
      while not ((P^ in [WideChar(#0)..WideChar(' ')]) or (P^ = QuoteChar) or (P^ = Delimiter)) do
        Inc(P);
      if (P^ <> #0) then S := WideQuotedStr(S, QuoteChar);
      Result := Result + S + Delimiter;
    end;
    System.Delete(Result, Length(Result), 1);
  end;
end;

function TWideStrings.GetName(Index: Integer): WideString;
begin
  Result := ExtractName(Get(Index));
end;

function TWideStrings.GetObject(Index: Integer): TObject;
begin
  Result := nil;
end;

function TWideStrings.GetEnumerator: TWideStringsEnumerator;
begin
  Result := TWideStringsEnumerator.Create(Self);
end;

function TWideStrings.GetTextW: PWideChar;
begin
  Result := WStrNew(PWideChar(GetTextStr));
end;

function TWideStrings.GetTextStr: WideString;
var
  I, L, Size, Count: Integer;
  P: PWideChar;
  S, LB: WideString;
begin
  Count := GetCount;
  Size := 0;
  LB := sLineBreak;
  for I := 0 to Count - 1 do Inc(Size, Length(Get(I)) + Length(LB));
  SetString(Result, nil, Size);
  P := Pointer(Result);
  for I := 0 to Count - 1 do
  begin
    S := Get(I);
    L := Length(S);
    if L <> 0 then
    begin
      System.Move(Pointer(S)^, P^, L * SizeOf(WideChar));
      Inc(P, L);
    end;
    L := Length(LB);
    if L <> 0 then
    begin
      System.Move(Pointer(LB)^, P^, L * SizeOf(WideChar));
      Inc(P, L);
    end;
  end;
end;

function TWideStrings.GetValue(const Name: WideString): WideString;
var
  I: Integer;
begin
  I := IndexOfName(Name);
  if I >= 0 then
    Result := Copy(Get(I), Length(Name) + 2, MaxInt) else
    Result := '';
end;

function TWideStrings.IndexOf(const S: WideString): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if CompareStrings(Get(Result), S) = 0 then Exit;
  Result := -1;
end;

function TWideStrings.IndexOfName(const Name: WideString): Integer;
var
  P: Integer;
  S: WideString;
begin
  for Result := 0 to GetCount - 1 do
  begin
    S := Get(Result);
    P := Pos(NameValueSeparator, S);
    if (P <> 0) and (CompareStrings(Copy(S, 1, P - 1), Name) = 0) then Exit;
  end;
  Result := -1;
end;

function TWideStrings.IndexOfObject(AObject: TObject): Integer;
begin
  for Result := 0 to GetCount - 1 do
    if GetObject(Result) = AObject then Exit;
  Result := -1;
end;

procedure TWideStrings.InsertObject(Index: Integer; const S: WideString;
  AObject: TObject);
begin
  Insert(Index, S);
  PutObject(Index, AObject);
end;

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

procedure TWideStrings.LoadFromStream(Stream: TStream);
var
  Size: Integer;
  S: WideString;
begin
  BeginUpdate;
  try
    Size := Stream.Size - Stream.Position;
    SetString(S, nil, Size div SizeOf(WideChar));
    Stream.Read(Pointer(S)^, Length(S) * SizeOf(WideChar));
    SetTextStr(S);
  finally
    EndUpdate;
  end;
end;

procedure TWideStrings.Move(CurIndex, NewIndex: Integer);
var
  TempObject: TObject;
  TempString: WideString;
begin
  if CurIndex <> NewIndex then
  begin
    BeginUpdate;
    try
      TempString := Get(CurIndex);
      TempObject := GetObject(CurIndex);
      Delete(CurIndex);
      InsertObject(NewIndex, TempString, TempObject);
    finally
      EndUpdate;
    end;
  end;
end;

procedure TWideStrings.Put(Index: Integer; const S: WideString);
var
  TempObject: TObject;
begin
  TempObject := GetObject(Index);
  Delete(Index);
  InsertObject(Index, S, TempObject);
end;

procedure TWideStrings.PutObject(Index: Integer; AObject: TObject);
begin
end;

procedure TWideStrings.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 TWideStrings.SaveToFile(const FileName: WideString);
var
  Stream: TStream;
begin
  Stream := TTntFileStream.Create(FileName, fmCreate);
  try
    SaveToStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TWideStrings.SaveToStream(Stream: TStream);
var
  SW: WideString;
begin
  SW := GetTextStr;
  Stream.WriteBuffer(PWideChar(SW)^, Length(SW) * SizeOf(WideChar));
end;

procedure TWideStrings.SetCapacity(NewCapacity: Integer);
begin
  // do nothing - descendents may optionally implement this method
end;

procedure TWideStrings.SetCommaText(const Value: WideString);
begin
  Delimiter := ',';
  QuoteChar := '"';
  SetDelimitedText(Value);
end;

procedure TWideStrings.SetStringsAdapter(const Value: IWideStringsAdapter);
begin
  if FAdapter <> nil then FAdapter.ReleaseStrings;
  FAdapter := Value;
  if FAdapter <> nil then FAdapter.ReferenceStrings(Self);
end;

procedure TWideStrings.SetTextW(const Text: PWideChar);
begin
  SetTextStr(Text);
end;

procedure TWideStrings.SetTextStr(const Value: WideString);
var
  P, Start: PWideChar;
  S: WideString;
begin
  BeginUpdate;
  try
    Clear;
    P := Pointer(Value);
    if P <> nil then
      while P^ <> #0 do
      begin
        Start := P;
        while not (P^ in [WideChar(#0), WideChar(#10), WideChar(#13)]) and (P^ <> WideLineSeparator) do
          Inc(P);
        SetString(S, Start, P - Start);
        Add(S);
        if P^ = #13 then Inc(P);
        if P^ = #10 then Inc(P);
        if P^ = WideLineSeparator then Inc(P);
      end;
  finally
    EndUpdate;
  end;
end;

procedure TWideStrings.SetUpdateState(Updating: Boolean);
begin
end;

procedure TWideStrings.SetValue(const Name, Value: WideString);
var
  I: Integer;
begin
  I := IndexOfName(Name);
  if Value <> '' then
  begin
    if I < 0 then I := Add('');
    Put(I, Name + NameValueSeparator + Value);
  end else
  begin
    if I >= 0 then Delete(I);
  end;
end;

procedure TWideStrings.WriteData(Writer: TWriter);
var
  I: Integer;
begin
  Writer.WriteListBegin;
  for I := 0 to Count-1 do begin
    Writer.WriteWideString(Get(I));
  end;
  Writer.WriteListEnd;
end;

procedure TWideStrings.SetDelimitedText(const Value: WideString);
var
  P, P1: PWideChar;
  S: WideString;
begin
  BeginUpdate;
  try
    Clear;
    P := PWideChar(Value);
    while P^ in [WideChar(#1)..WideChar(' ')] do
      Inc(P);
    while P^ <> #0 do
    begin
      if P^ = QuoteChar then
        S := WideExtractQuotedStr(P, QuoteChar)
      else
      begin
        P1 := P;
        while (P^ > ' ') and (P^ <> Delimiter) do
          Inc(P);
        SetString(S, P1, P - P1);
      end;
      Add(S);
      while P^ in [WideChar(#1)..WideChar(' ')] do
        Inc(P);
      if P^ = Delimiter then
      begin
        P1 := P;
        Inc(P1);
        if P1^ = #0 then
          Add('');
        repeat
          Inc(P);
        until not (P^ in [WideChar(#1)..WideChar(' ')]);
      end;
    end;
  finally
    EndUpdate;
  end;
end;

function TWideStrings.GetDelimiter: WideChar;
begin
  if not (sdDelimiter in FDefined) then
    Delimiter := ',';
  Result := FDelimiter;
end;

function TWideStrings.GetQuoteChar: WideChar;
begin
  if not (sdQuoteChar in FDefined) then
    QuoteChar := '"';
  Result := FQuoteChar;
end;

procedure TWideStrings.SetDelimiter(const Value: WideChar);
begin
  if (FDelimiter <> Value) or not (sdDelimiter in FDefined) then
  begin
    Include(FDefined, sdDelimiter);
    FDelimiter := Value;
  end
end;

procedure TWideStrings.SetQuoteChar(const Value: WideChar);
begin
  if (FQuoteChar <> Value) or not (sdQuoteChar in FDefined) then
  begin
    Include(FDefined, sdQuoteChar);
    FQuoteChar := Value;
  end
end;

function TWideStrings.CompareStrings(const S1, S2: WideString): Integer;
begin
  Result := WideCompareText(S1, S2);
end;

function TWideStrings.GetNameValueSeparator: WideChar;
begin
  {$IFDEF COMPILER_7_UP}
  if not (sdNameValueSeparator in FDefined) then
    NameValueSeparator := '=';
  Result := FNameValueSeparator;
  {$ELSE}
  Result := '=';
  {$ENDIF}
end;

{$IFDEF COMPILER_7_UP}
procedure TWideStrings.SetNameValueSeparator(const Value: WideChar);
begin
  if (FNameValueSeparator <> Value) or not (sdNameValueSeparator in FDefined) then
  begin
    Include(FDefined, sdNameValueSeparator);
    FNameValueSeparator := Value;
  end
end;
{$ENDIF}

function TWideStrings.GetValueFromIndex(Index: Integer): WideString;
begin
  if Index >= 0 then
    Result := Copy(Get(Index), Length(Names[Index]) + 2, MaxInt) else
    Result := '';
end;

procedure TWideStrings.SetValueFromIndex(Index: Integer; const Value: WideString);
begin
  if Value <> '' then
  begin
    if Index < 0 then Index := Add('');
    Put(Index, Names[Index] + NameValueSeparator + Value);
  end
  else
    if Index >= 0 then Delete(Index);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级大片在线观看| 91无套直看片红桃| 91精品国产品国语在线不卡| 一个色妞综合视频在线观看| 欧美午夜一区二区三区免费大片| 亚洲精品va在线观看| 欧美在线制服丝袜| 日韩在线一二三区| 精品国产91久久久久久久妲己 | 日韩一区二区电影在线| 日韩精品亚洲专区| 精品国产一区二区三区av性色 | 波多野洁衣一区| 亚洲美女在线一区| 久久色在线视频| 国产成人午夜视频| 中文字幕在线不卡一区二区三区| 99re在线精品| 亚洲va欧美va人人爽午夜| 精品国产一区二区亚洲人成毛片| 福利一区福利二区| 一二三区精品视频| 精品99999| 91老司机福利 在线| 日韩主播视频在线| 国产欧美日本一区视频| 日本韩国欧美在线| 免费xxxx性欧美18vr| 中日韩av电影| 在线播放亚洲一区| 东方欧美亚洲色图在线| 亚洲国产你懂的| 久久这里只有精品6| 色婷婷综合久久久中文字幕| 舔着乳尖日韩一区| 中文欧美字幕免费| 91精品国产入口| 99久久免费精品| 人禽交欧美网站| 亚洲欧美一区二区三区国产精品| 欧美一区二区三区免费| 色综合夜色一区| 久久99热狠狠色一区二区| 亚洲精品国产高清久久伦理二区| 欧美精品一区在线观看| 欧美性生活一区| 成人av免费网站| 国产一区二区三区综合| 亚洲第一会所有码转帖| 国产精品国产馆在线真实露脸| 制服.丝袜.亚洲.中文.综合| av激情亚洲男人天堂| 国产一区二区精品久久99| 亚洲成人免费看| 亚洲男人的天堂在线aⅴ视频| 欧美精品一区二区三区在线播放| 欧美亚洲日本一区| 99热99精品| 丁香天五香天堂综合| 精品一区二区三区香蕉蜜桃| 亚洲成人av一区| 亚洲色图视频网| 欧美激情一区二区三区蜜桃视频 | 国产毛片精品视频| 日韩黄色免费网站| 樱花影视一区二区| 亚洲欧美综合在线精品| 国产欧美一区二区精品性色| 欧美成人女星排名| 日韩午夜激情视频| 91麻豆精品国产91久久久久久 | 天天射综合影视| 亚洲一区二区中文在线| 亚洲精品自拍动漫在线| 亚洲色大成网站www久久九九| 国产喂奶挤奶一区二区三区| 久久伊人中文字幕| 欧美精品一区二区久久久| 精品少妇一区二区三区免费观看 | 久久综合九色综合欧美亚洲| 欧美一区二区三区四区久久 | 色妹子一区二区| 欧美变态口味重另类| 日韩女优制服丝袜电影| 日韩一级免费观看| 久久综合狠狠综合久久激情| 久久嫩草精品久久久精品一| 久久久久久久综合日本| 中文字幕不卡一区| 亚洲男人都懂的| 亚洲国产精品一区二区www在线| 亚洲综合在线五月| 图片区小说区区亚洲影院| 日韩高清在线观看| 麻豆国产一区二区| 国产盗摄一区二区| 99久久久久久99| 欧美在线不卡视频| 91超碰这里只有精品国产| 欧美一级欧美三级| 久久久久久久久久看片| 国产精品久久久久影院亚瑟 | 国产亚洲欧洲997久久综合| 国产农村妇女毛片精品久久麻豆| 中文字幕不卡在线| 亚洲第一主播视频| 久久成人久久爱| av不卡一区二区三区| 欧美色综合网站| 精品日韩成人av| 日韩美女啊v在线免费观看| 亚洲成在人线免费| 国产精品一区二区久久精品爱涩| 91年精品国产| 欧美一区二区在线视频| 国产欧美日韩综合精品一区二区| 综合久久一区二区三区| 蜜臀久久99精品久久久画质超高清 | 国产精品一区二区男女羞羞无遮挡| 成人美女在线视频| 欧美日韩一区国产| 国产日本亚洲高清| 五月婷婷久久丁香| 成人av网站免费| 欧美一级在线视频| 椎名由奈av一区二区三区| 日本在线不卡一区| 99久久久无码国产精品| 日韩免费福利电影在线观看| 中文字幕制服丝袜一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 国产成人免费视频网站| 欧美精品日韩一本| 亚洲天堂精品视频| 国产一区二区三区蝌蚪| 欧美色男人天堂| 亚洲国产激情av| 久久99精品视频| 欧美性xxxxxxxx| 久久日韩精品一区二区五区| 亚洲综合一区在线| 成人黄色电影在线| 久久男人中文字幕资源站| 三级成人在线视频| 91久久免费观看| 国产精品私人影院| 韩国理伦片一区二区三区在线播放| 欧美日韩高清不卡| 一区二区三区鲁丝不卡| 99精品在线观看视频| 国产亚洲一区字幕| 久久国产日韩欧美精品| 日韩一区二区在线免费观看| 亚洲午夜激情av| 在线观看不卡视频| 亚洲欧美另类图片小说| 欧美一区二区三区男人的天堂| 亚洲视频网在线直播| 成人手机电影网| www国产亚洲精品久久麻豆| 日韩中文字幕麻豆| 在线成人高清不卡| 婷婷综合五月天| 精品视频1区2区| 亚洲午夜一区二区| 在线精品视频小说1| 亚洲欧美日韩国产综合| 色欧美乱欧美15图片| 亚洲精品视频一区二区| 在线一区二区三区四区| 1区2区3区国产精品| 北岛玲一区二区三区四区| 亚洲国产成人私人影院tom| 东方欧美亚洲色图在线| 欧美国产欧美综合| 国产成人免费视频网站| 国产精品视频yy9299一区| 成人精品电影在线观看| 国产精品二三区| 91美女福利视频| 亚洲国产乱码最新视频 | 国产精品影视网| 欧美国产一区视频在线观看| 成人三级在线视频| 亚洲女同女同女同女同女同69| 色婷婷综合在线| 日韩和欧美的一区| 欧美大尺度电影在线| 国产精品综合久久| 亚洲精选一二三| 欧美精品vⅰdeose4hd| 奇米色一区二区| 国产亚洲污的网站| 色哟哟亚洲精品| 午夜精品福利视频网站| 日韩欧美国产综合| 岛国一区二区三区| 樱花影视一区二区| 日韩欧美的一区| 91丝袜美女网|