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

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

?? tntclasses.pas

?? TNT Components Source
?? PAS
?? 第 1 頁 / 共 4 頁
字號:

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.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产色产综合产在线视频| 国产亚洲精久久久久久| 国产精品一二三四| 亚洲综合一区二区三区| 久久久蜜桃精品| 欧美精品一二三区| 91视频在线观看免费| 韩国精品主播一区二区在线观看 | 男人的天堂亚洲一区| 国产精品传媒视频| 精品久久人人做人人爱| 欧美色窝79yyyycom| yourporn久久国产精品| 捆绑调教美女网站视频一区| 亚洲精品乱码久久久久久日本蜜臀| 日韩午夜电影av| 欧美午夜在线观看| 91免费在线视频观看| 国产一区中文字幕| 免费成人在线网站| 日韩电影免费在线观看网站| 亚洲欧美日韩一区二区| 久久精品视频网| 精品免费视频一区二区| 欧美一区二区精品在线| 欧美日韩一区中文字幕| 色综合久久天天综合网| av资源网一区| 成人av影视在线观看| 国产黄色精品视频| 国产乱理伦片在线观看夜一区| 蜜臀久久99精品久久久画质超高清 | 国产成人夜色高潮福利影视| 精品在线一区二区| 极品尤物av久久免费看| 奇米精品一区二区三区在线观看一| 一区二区三区国产豹纹内裤在线| 亚洲欧洲日产国码二区| 中文字幕在线免费不卡| 亚洲美女免费在线| 亚洲男女一区二区三区| 一区二区在线观看免费| 亚洲国产精品自拍| 日韩av中文字幕一区二区| 成年人国产精品| 国产不卡视频一区| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 久久久99免费| 久久久久久一二三区| 久久久久久久综合狠狠综合| 久久久91精品国产一区二区精品| 日本一区二区三区国色天香| 欧美国产欧美亚州国产日韩mv天天看完整| 久久久不卡网国产精品一区| 国产精品乱人伦中文| 中文字幕一区二区三区av| 亚洲资源在线观看| 日本色综合中文字幕| 久久精品久久精品| 韩国精品一区二区| 99国产精品国产精品毛片| 欧美在线制服丝袜| 日韩欧美一卡二卡| 国产精品网站在线| 亚洲午夜三级在线| 久久国产精品免费| 99麻豆久久久国产精品免费 | 欧美一区二区三区小说| 精品电影一区二区三区 | 亚洲女同女同女同女同女同69| 亚洲自拍偷拍av| 久久机这里只有精品| 成人永久免费视频| 欧美日韩三级一区| 久久老女人爱爱| 一区二区不卡在线播放| 麻豆精品国产传媒mv男同| gogo大胆日本视频一区| 一区二区中文字幕在线| 亚洲香肠在线观看| 国产美女一区二区| 欧美图片一区二区三区| 欧美精品一区二区在线观看| 亚洲欧洲日韩一区二区三区| 免费亚洲电影在线| 99久久婷婷国产综合精品电影 | 日韩二区在线观看| 成人福利视频在线| 欧美丰满一区二区免费视频 | 免费精品视频最新在线| 不卡视频一二三| 日韩女优av电影| 亚洲在线成人精品| 国产精品正在播放| 欧美精品色一区二区三区| 国产精品国产精品国产专区不蜜| 日本亚洲欧美天堂免费| 91视频观看视频| 久久久精品国产99久久精品芒果| 香蕉成人伊视频在线观看| 成人动漫一区二区在线| 欧美成人福利视频| 亚洲国产日产av| 色综合中文字幕| 亚洲国产高清不卡| 精品在线免费观看| 欧美日韩aaaaaa| 亚洲欧美日本韩国| 成人午夜看片网址| 精品国产凹凸成av人网站| 亚洲一区二区三区中文字幕| 不卡一区二区在线| 久久精品一区八戒影视| 男女男精品视频网| 91超碰这里只有精品国产| 亚洲精品成人精品456| 成人国产电影网| 亚洲国产精品精华液2区45| 精品亚洲国产成人av制服丝袜| 欧美久久久久久蜜桃| 亚洲资源在线观看| 欧美在线观看一区| 亚洲欧美日韩国产手机在线| 成人精品在线视频观看| 国产情人综合久久777777| 国产一区二区视频在线播放| 日韩精品中文字幕一区二区三区 | 美脚の诱脚舐め脚责91| 欧美乱熟臀69xxxxxx| 亚洲大片免费看| 欧美视频一区二区三区四区| 亚洲综合激情网| 久久久91精品国产一区二区三区| 久久国产精品色婷婷| 精品久久久久久久久久久久久久久| 日韩在线一区二区| 91精品国产高清一区二区三区| 婷婷丁香久久五月婷婷| 91精品国产综合久久精品| 日韩 欧美一区二区三区| 91精品国产一区二区人妖| 日韩精品一级中文字幕精品视频免费观看 | 亚洲少妇屁股交4| 91视频国产观看| 亚洲一区二区三区四区在线| 欧美性感一类影片在线播放| 亚洲成a人片在线不卡一二三区| 欧美日韩激情一区二区三区| 亚洲.国产.中文慕字在线| 欧美一区日本一区韩国一区| 久久成人精品无人区| www国产成人免费观看视频 深夜成人网| 国内一区二区视频| 国产精品久久免费看| 91麻豆蜜桃一区二区三区| 亚洲综合男人的天堂| 日韩一区二区视频在线观看| 激情五月婷婷综合网| 国产精品私人影院| 在线观看日韩一区| 美女脱光内衣内裤视频久久影院| 久久久久成人黄色影片| 99国产欧美久久久精品| 五月综合激情婷婷六月色窝| www国产成人| 91丝袜美女网| 日本不卡视频在线观看| 久久精品一区四区| 日本精品视频一区二区| 美女视频黄免费的久久| 国产精品人成在线观看免费 | 欧美日韩成人在线| 国内外精品视频| 亚洲视频小说图片| 欧美一区三区二区| av中文字幕在线不卡| 五月天国产精品| 欧美国产一区视频在线观看| 欧美日韩亚洲国产综合| 国产精品一区一区| 亚洲永久精品国产| 久久品道一品道久久精品| 日本韩国精品在线| 韩国毛片一区二区三区| 亚洲女同女同女同女同女同69| 日韩精品一区二| 91麻豆免费视频| 国产一区在线看| 同产精品九九九| 成人欧美一区二区三区小说| 欧美一级片免费看| 在线观看av不卡| 成人夜色视频网站在线观看| 三级不卡在线观看| 亚洲男人天堂av网| 国产日韩精品一区二区浪潮av| 欧美精品 国产精品| 99精品一区二区| 国产成人自拍网| 精品一区二区三区在线视频|