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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tntclasses.pas

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

procedure TTntStringList.SetUpdateState(Updating: Boolean);
begin
  FUpdating := Updating;
  if Updating then Changing else Changed;
end;

function WideStringListCompareStrings(List: TTntStringList; Index1, Index2: Integer): Integer;
begin
  Result := List.CompareStrings(List.FList^[Index1].FString,
                                List.FList^[Index2].FString);
end;

procedure TTntStringList.Sort;
begin
  CustomSort(WideStringListCompareStrings);
end;

procedure TTntStringList.CustomSort(Compare: TWideStringListSortCompare);
begin
  if not Sorted and (FCount > 1) then
  begin
    Changing;
    QuickSort(0, FCount - 1, Compare);
    Changed;
  end;
end;

function TTntStringList.CompareStrings(const S1, S2: WideString): Integer;
begin
  if CaseSensitive then
    Result := WideCompareStr(S1, S2)
  else
    Result := WideCompareText(S1, S2);
end;

procedure TTntStringList.SetCaseSensitive(const Value: Boolean);
begin
  if Value <> FCaseSensitive then
  begin
    FCaseSensitive := Value;
    if Sorted then Sort;
  end;
end;

//------------------------- TntClasses introduced procs ----------------------------------

function AutoDetectCharacterSet(Stream: TStream): TTntStreamCharSet;
var
  ByteOrderMark: WideChar;
  BytesRead: Integer;
  Utf8Test: array[0..2] of AnsiChar;
begin
  // Byte Order Mark
  ByteOrderMark := #0;
  if (Stream.Size - Stream.Position) >= SizeOf(ByteOrderMark) then begin
    BytesRead := Stream.Read(ByteOrderMark, SizeOf(ByteOrderMark));
    if (ByteOrderMark <> UNICODE_BOM) and (ByteOrderMark <> UNICODE_BOM_SWAPPED) then begin
      ByteOrderMark := #0;
      Stream.Seek(-BytesRead, soFromCurrent);
      if (Stream.Size - Stream.Position) >= Length(Utf8Test) * SizeOf(AnsiChar) then begin
        BytesRead := Stream.Read(Utf8Test[0], Length(Utf8Test) * SizeOf(AnsiChar));
        if Utf8Test <> UTF8_BOM then
          Stream.Seek(-BytesRead, soFromCurrent);
      end;
    end;
  end;
  // Test Byte Order Mark
  if ByteOrderMark = UNICODE_BOM then
    Result := csUnicode
  else if ByteOrderMark = UNICODE_BOM_SWAPPED then
    Result := csUnicodeSwapped
  else if Utf8Test = UTF8_BOM then
    Result := csUtf8
  else
    Result := csAnsi;
end;

function FindSortedListByTarget(List: TList; TargetCompare: TListTargetCompare;
  Target: Pointer; var Index: Integer): Boolean;
var
  L, H, I, C: Integer;
begin
  Result := False;
  L := 0;
  H := List.Count - 1;
  while L <= H do
  begin
    I := (L + H) shr 1;
    C := TargetCompare(List[i], Target);
    if C < 0 then L := I + 1 else
    begin
      H := I - 1;
      if C = 0 then
      begin
        Result := True;
        L := I;
      end;
    end;
  end;
  Index := L;
end;

function ClassIsRegistered(const clsid: TCLSID): Boolean;
var
  OleStr: POleStr;
  Reg: TRegIniFile;
  Key, Filename: WideString;
begin
  // First, check to see if there is a ProgID.  This will tell if the
  // control is registered on the machine.  No ProgID, control won't run
  Result := ProgIDFromCLSID(clsid, OleStr) = S_OK;
  if not Result then Exit;  //Bail as soon as anything goes wrong.

  // Next, make sure that the file is actually there by rooting it out
  // of the registry
  Key := WideFormat('\SOFTWARE\Classes\CLSID\%s', [GUIDToString(clsid)]);
  Reg := TRegIniFile.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    Result := Reg.OpenKeyReadOnly(Key);
    if not Result then Exit; // Bail as soon as anything goes wrong.

    FileName := Reg.ReadString('InProcServer32', '', EmptyStr);
    if (Filename = EmptyStr) then // try another key for the file name
    begin
      FileName := Reg.ReadString('InProcServer', '', EmptyStr);
    end;
    Result := Filename <> EmptyStr;
    if not Result then Exit;
    Result := WideFileExists(Filename);
  finally
    Reg.Free;
  end;
end;

{ TBufferedAnsiString }

procedure TBufferedAnsiString.Clear;
begin
  LastWriteIndex := 0;
  if Length(FStringBuffer) > 0 then
    FillChar(FStringBuffer[1], Length(FStringBuffer) * SizeOf(AnsiChar), 0);
end;

procedure TBufferedAnsiString.AddChar(const wc: AnsiChar);
const
  MIN_GROW_SIZE = 32;
  MAX_GROW_SIZE = 256;
var
  GrowSize: Integer;
begin
  Inc(LastWriteIndex);
  if LastWriteIndex > Length(FStringBuffer) then begin
    GrowSize := Max(MIN_GROW_SIZE, Length(FStringBuffer));
    GrowSize := Min(GrowSize, MAX_GROW_SIZE);
    SetLength(FStringBuffer, Length(FStringBuffer) + GrowSize);
    FillChar(FStringBuffer[LastWriteIndex], GrowSize * SizeOf(AnsiChar), 0);
  end;
  FStringBuffer[LastWriteIndex] := wc;
end;

procedure TBufferedAnsiString.AddString(const s: AnsiString);
var
  LenS: Integer;
  BlockSize: Integer;
  AllocSize: Integer;
begin
  LenS := Length(s);
  if LenS > 0 then begin
    Inc(LastWriteIndex);
    if LastWriteIndex + LenS - 1 > Length(FStringBuffer) then begin
      // determine optimum new allocation size
      BlockSize := Length(FStringBuffer) div 2;
      if BlockSize < 8 then
        BlockSize := 8;
      AllocSize := ((LenS div BlockSize) + 1) * BlockSize;
      // realloc buffer
      SetLength(FStringBuffer, Length(FStringBuffer) + AllocSize);
      FillChar(FStringBuffer[Length(FStringBuffer) - AllocSize + 1], AllocSize * SizeOf(AnsiChar), 0);
    end;
    CopyMemory(@FStringBuffer[LastWriteIndex], @s[1], LenS * SizeOf(AnsiChar));
    Inc(LastWriteIndex, LenS - 1);
  end;
end;

procedure TBufferedAnsiString.AddBuffer(Buff: PAnsiChar; Chars: Integer);
var
  i: integer;
begin
  for i := 1 to Chars do begin
    if Buff^ = #0 then
      break;
    AddChar(Buff^);
    Inc(Buff);
  end;
end;

function TBufferedAnsiString.Value: AnsiString;
begin
  Result := PAnsiChar(FStringBuffer);
end;

function TBufferedAnsiString.BuffPtr: PAnsiChar;
begin
  Result := PAnsiChar(FStringBuffer);
end;

{ TBufferedWideString }

procedure TBufferedWideString.Clear;
begin
  LastWriteIndex := 0;
  if Length(FStringBuffer) > 0 then
    FillChar(FStringBuffer[1], Length(FStringBuffer) * SizeOf(WideChar), 0);
end;

procedure TBufferedWideString.AddChar(const wc: WideChar);
const
  MIN_GROW_SIZE = 32;
  MAX_GROW_SIZE = 256;
var
  GrowSize: Integer;
begin
  Inc(LastWriteIndex);
  if LastWriteIndex > Length(FStringBuffer) then begin
    GrowSize := Max(MIN_GROW_SIZE, Length(FStringBuffer));
    GrowSize := Min(GrowSize, MAX_GROW_SIZE);
    SetLength(FStringBuffer, Length(FStringBuffer) + GrowSize);
    FillChar(FStringBuffer[LastWriteIndex], GrowSize * SizeOf(WideChar), 0);
  end;
  FStringBuffer[LastWriteIndex] := wc;
end;

procedure TBufferedWideString.AddString(const s: WideString);
var
  i: integer;
begin
  for i := 1 to Length(s) do
    AddChar(s[i]);
end;

procedure TBufferedWideString.AddBuffer(Buff: PWideChar; Chars: Integer);
var
  i: integer;
begin
  for i := 1 to Chars do begin
    if Buff^ = #0 then
      break;
    AddChar(Buff^);
    Inc(Buff);
  end;
end;

function TBufferedWideString.Value: WideString;
begin
  Result := PWideChar(FStringBuffer);
end;

function TBufferedWideString.BuffPtr: PWideChar;
begin
  Result := PWideChar(FStringBuffer);
end;

{ TBufferedStreamReader }

constructor TBufferedStreamReader.Create(Stream: TStream; BufferSize: Integer = 1024);
begin
  // init stream
  FStream := Stream;
  FStreamSize := Stream.Size;
  // init buffer
  FBufferSize := BufferSize;
  SetLength(FBuffer, BufferSize);
  FBufferStartPosition := -FBufferSize; { out of any useful range }
  // init virtual position
  FVirtualPosition := 0;
end;

function TBufferedStreamReader.Seek(Offset: Integer; Origin: Word): Longint;
begin
  case Origin of
    soFromBeginning: FVirtualPosition := Offset;
    soFromCurrent:   Inc(FVirtualPosition, Offset);
    soFromEnd:       FVirtualPosition := FStreamSize + Offset;
  end;
  Result := FVirtualPosition;
end;

procedure TBufferedStreamReader.UpdateBufferFromPosition(StartPos: Integer);
begin
  try
    FStream.Position := StartPos;
    FStream.Read(FBuffer[0], FBufferSize);
    FBufferStartPosition := StartPos;
  except
    FBufferStartPosition := -FBufferSize; { out of any useful range }
    raise;
  end;
end;

function TBufferedStreamReader.Read(var Buffer; Count: Integer): Longint;
var
  BytesLeft: Integer;
  FirstBufferRead: Integer;
  StreamDirectRead: Integer;
  Buf: PAnsiChar;
begin
  if (FVirtualPosition >= 0) and (Count >= 0) then
  begin
    Result := FStreamSize - FVirtualPosition;
    if Result > 0 then
    begin
      if Result > Count then
        Result := Count;

      Buf := @Buffer;
      BytesLeft := Result;

      // try to read what is left in buffer
      FirstBufferRead := FBufferStartPosition + FBufferSize - FVirtualPosition;
      if (FirstBufferRead < 0) or (FirstBufferRead > FBufferSize) then
        FirstBufferRead := 0;
      FirstBufferRead := Min(FirstBufferRead, Result);
      if FirstBufferRead > 0 then begin
        Move(FBuffer[FVirtualPosition - FBufferStartPosition], Buf[0], FirstBufferRead);
        Dec(BytesLeft, FirstBufferRead);
      end;

      if BytesLeft > 0 then begin
        // The first read in buffer was not enough
        StreamDirectRead := (BytesLeft div FBufferSize) * FBufferSize;
        FStream.Position := FVirtualPosition + FirstBufferRead;
        FStream.Read(Buf[FirstBufferRead], StreamDirectRead);
        Dec(BytesLeft, StreamDirectRead);

        if BytesLeft > 0 then begin
          // update buffer, and read what is left
          UpdateBufferFromPosition(FStream.Position);
          Move(FBuffer[0], Buf[FirstBufferRead + StreamDirectRead], BytesLeft);
        end;
      end;

      Inc(FVirtualPosition, Result);
      Exit;
    end;
  end;
  Result := 0;
end;

function TBufferedStreamReader.Write(const Buffer; Count: Integer): Longint;
begin
  raise ETntInternalError.Create('Internal Error: class can not write.');
  Result := 0;
end;

//-------- synced wide string -----------------

function GetSyncedWideString(var WideStr: WideString; const AnsiStr: AnsiString): WideString;
begin
  if AnsiString(WideStr) <> (AnsiStr) then begin
    WideStr := AnsiStr; {AnsiStr changed.  Keep WideStr in sync.}
  end;
  Result := WideStr;
end;

procedure SetSyncedWideString(const Value: WideString; var WideStr: WideString;
  const AnsiStr: AnsiString; SetAnsiStr: TSetAnsiStrEvent);
begin
  if Value <> GetSyncedWideString(WideStr, AnsiStr) then
  begin
    if (not WideSameStr(Value, AnsiString(Value))) {unicode chars lost in conversion}
    and (AnsiStr = AnsiString(Value))  {AnsiStr is not going to change}
    then begin
      SetAnsiStr(''); {force the change}
    end;
    WideStr := Value;
    SetAnsiStr(Value);
  end;
end;

{ TWideComponentHelper }

function CompareComponentHelperToTarget(Item, Target: Pointer): Integer;
begin
  if Integer(TWideComponentHelper(Item).FComponent) < Integer(Target) then
    Result := -1
  else if Integer(TWideComponentHelper(Item).FComponent) > Integer(Target) then
    Result := 1
  else
    Result := 0;
end;

function FindWideComponentHelperIndex(ComponentHelperList: TComponentList; Component: TComponent; var Index: Integer): Boolean;
begin
  // find Component in sorted wide caption list (list is sorted by TWideComponentHelper.FComponent)
  Result := FindSortedListByTarget(ComponentHelperList, CompareComponentHelperToTarget, Component, Index);
end;

constructor TWideComponentHelper.Create(AOwner: TComponent);
begin
  raise ETntInternalError.Create('TNT Internal Error: TWideComponentHelper.Create should never be encountered.');
end;

constructor TWideComponentHelper.CreateHelper(AOwner: TComponent; ComponentHelperList: TComponentList);
var
  Index: Integer;
begin
  // don't use direct ownership for memory management
  inherited Create(nil);
  FComponent := AOwner;
  FComponent.FreeNotification(Self);

  // insert into list according to sort
  FindWideComponentHelperIndex(ComponentHelperList, FComponent, Index);
  ComponentHelperList.Insert(Index, Self);
end;

procedure TWideComponentHelper.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;
  if (AComponent = FComponent) and (Operation = opRemove) then begin
    FComponent := nil;
    Free;
  end;
end;

function FindWideComponentHelper(ComponentHelperList: TComponentList; Component: TComponent): TWideComponentHelper;
var
  Index: integer;
begin
  if FindWideComponentHelperIndex(ComponentHelperList, Component, Index) then begin
  	Result := TWideComponentHelper(ComponentHelperList[Index]);
    Assert(Result.FComponent = Component, 'TNT Internal Error: FindWideComponentHelperIndex failed.');
  end else
    Result := nil;
end;

initialization
  RuntimeUTFStreaming := False; { Delphi 6 and higher don't need UTF help at runtime. }

end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频你懂得一区二区三区| 色综合久久88色综合天天6| 国产精品麻豆视频| 欧美日韩国产综合一区二区 | 国产成人99久久亚洲综合精品| 亚洲欧美aⅴ...| 精品成人在线观看| 欧美日韩精品一二三区| 97久久超碰国产精品电影| 另类欧美日韩国产在线| 亚洲一区二区三区中文字幕| 国产午夜精品久久久久久久| 欧美一区二区精品久久911| 一本色道**综合亚洲精品蜜桃冫| 国产成人一区在线| 久久99九九99精品| 青椒成人免费视频| 亚洲成人一区在线| 亚洲精品网站在线观看| 国产人成一区二区三区影院| 欧美大肚乱孕交hd孕妇| 欧美精品乱码久久久久久按摩| 99热精品国产| 成人福利视频在线看| 国产麻豆视频一区| 极品少妇一区二区三区精品视频| 天天综合日日夜夜精品| 亚洲一区二区黄色| 亚洲激情六月丁香| 亚洲欧美日韩精品久久久久| 国产精品久久毛片| 欧美国产一区二区在线观看| 欧美精品一区二区三区在线| 日韩欧美视频在线| 精品欧美乱码久久久久久1区2区| 欧美一区二区播放| 日韩一区二区在线免费观看| 制服丝袜亚洲色图| 91精品婷婷国产综合久久竹菊| 欧美色图一区二区三区| 欧美视频一区二区| 欧美日韩亚洲高清一区二区| 欧美日韩国产高清一区| 欧美电影影音先锋| 日韩欧美一二三区| 精品福利视频一区二区三区| 久久久噜噜噜久久人人看| 国产三级精品视频| 国产精品日产欧美久久久久| 国产精品久久久久aaaa| 亚洲男帅同性gay1069| 一区二区三区在线视频观看| 一区二区三区欧美日| 亚洲国产精品人人做人人爽| 日韩精品成人一区二区三区| 日本欧美大码aⅴ在线播放| 麻豆精品国产传媒mv男同| 国产一区二区视频在线| 国产成人综合在线播放| 99re热这里只有精品视频| 色婷婷av一区二区| 欧美精品 日韩| 久久久亚洲精华液精华液精华液| 中文字幕乱码日本亚洲一区二区| 综合久久国产九一剧情麻豆| 亚洲成人在线免费| 国内国产精品久久| 91蝌蚪国产九色| 欧美福利电影网| 精品国产sm最大网站免费看| 中文一区一区三区高中清不卡| 亚洲精品乱码久久久久久黑人| 香蕉久久一区二区不卡无毒影院 | 五月天激情综合网| 精品一区二区成人精品| 99久久精品国产观看| 91高清视频在线| 日韩精品一区二区在线观看| 国产精品久久久久久亚洲伦 | 制服丝袜亚洲播放| 国产拍欧美日韩视频二区| 亚洲午夜久久久久| 国内精品免费**视频| 91福利视频在线| 久久亚洲私人国产精品va媚药| 亚洲色图欧洲色图| 韩国三级电影一区二区| 欧美在线观看一二区| 久久先锋影音av鲁色资源| 一区二区三区日韩欧美精品| 精品在线免费视频| 欧美中文字幕一区| 久久久一区二区三区捆绑**| 亚洲超碰97人人做人人爱| 成人免费视频视频| 日韩网站在线看片你懂的| 亚洲日本一区二区| 国产精品1区二区.| 日韩一区二区精品在线观看| 亚洲青青青在线视频| 国产盗摄视频一区二区三区| 3atv在线一区二区三区| 一区二区三区.www| 成人激情免费视频| 久久综合九色综合欧美就去吻| 亚洲第一福利视频在线| av欧美精品.com| 久久日韩精品一区二区五区| 日韩制服丝袜先锋影音| 色哟哟国产精品免费观看| 国产日韩欧美一区二区三区综合| 日本va欧美va精品发布| 在线观看日产精品| √…a在线天堂一区| 国产成人在线电影| 久久婷婷综合激情| 久久99精品久久久久| 日韩欧美中文字幕制服| 亚洲v中文字幕| 91黄色小视频| 亚洲综合一区在线| 一本大道久久精品懂色aⅴ | 一区二区三区久久| aa级大片欧美| 国产蜜臀97一区二区三区| 精品在线观看免费| 欧美精品一区二区三区在线 | 欧美日本一道本| 一级特黄大欧美久久久| 99久久99精品久久久久久| 中文字幕av一区二区三区免费看| 国产精品亚洲一区二区三区妖精| 久久久国产精华| 国产酒店精品激情| 久久精品亚洲一区二区三区浴池| 极品少妇xxxx偷拍精品少妇| 久久综合九色综合久久久精品综合| 韩日欧美一区二区三区| 久久久久久久久蜜桃| 国产精品一二三区在线| 国产欧美一区二区精品仙草咪| 国产成人亚洲综合a∨婷婷| 国产欧美日本一区视频| 国产盗摄精品一区二区三区在线| 欧美国产日韩亚洲一区| 成人中文字幕电影| 1024成人网| 欧美色中文字幕| 日本vs亚洲vs韩国一区三区二区| 欧美电影免费提供在线观看| 国产一区二区三区| 国产精品全国免费观看高清| 99精品久久久久久| 亚洲成人自拍网| 精品久久久久久久久久久久久久久 | 成人免费高清视频在线观看| 国产精品不卡在线| 在线观看亚洲一区| 日日噜噜夜夜狠狠视频欧美人| 日韩一区二区在线观看| 国产一区二区网址| 亚洲免费观看高清| 在线播放欧美女士性生活| 久久国产精品露脸对白| 国产拍欧美日韩视频二区| 91激情在线视频| 麻豆91小视频| 国产精品久99| 欧美精品在线观看一区二区| 国产在线精品一区二区夜色| 国产精品久久久一区麻豆最新章节| 日本精品裸体写真集在线观看| 日韩精品每日更新| 中文一区二区在线观看| 欧美日韩精品欧美日韩精品| 精品一区在线看| 亚洲久草在线视频| 精品国产成人系列| 91黄色激情网站| 韩国成人精品a∨在线观看| 亚洲精品自拍动漫在线| 欧美成人免费网站| 色婷婷综合久久久中文一区二区| 久88久久88久久久| 亚洲综合久久久| 精品国产乱码久久久久久1区2区| 91色.com| 国内精品久久久久影院色| 亚洲国产aⅴ成人精品无吗| 国产色产综合色产在线视频| 欧美色窝79yyyycom| 成人午夜免费电影| 青青草伊人久久| 亚洲精品国产一区二区精华液| 精品毛片乱码1区2区3区| 一本久久综合亚洲鲁鲁五月天| 国模大尺度一区二区三区| 亚洲国产精品视频| 日韩一区在线免费观看| 精品乱码亚洲一区二区不卡|