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

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

?? inffiles.~pas

?? U盤autorun病毒通測與查殺工具安裝SUI控件
?? ~PAS
?? 第 1 頁 / 共 2 頁
字號:
{ *************************************************************************** }
{                                                                             }
{ Delphi and Kylix Cross-Platform Visual Component Library                    }
{                                                                             }
{ Copyright (c) 1995, 2001 Borland Software Corporation                       }
{                                                                             }
{ *************************************************************************** }


unit IniFiles;

{$R-,T-,H+,X+}

interface

uses SysUtils, Classes;

type
  EIniFileException = class(Exception);

  TCustomIniFile = class(TObject)
  private
    FFileName: string;
  public
    constructor Create(const FileName: string);
    function SectionExists(const Section: string): Boolean;
    function ReadString(const Section, Ident, Default: string): string; virtual; abstract;
    procedure WriteString(const Section, Ident, Value: String); virtual; abstract;
    function ReadInteger(const Section, Ident: string; Default: Longint): Longint; virtual;
    procedure WriteInteger(const Section, Ident: string; Value: Longint); virtual;
    function ReadBool(const Section, Ident: string; Default: Boolean): Boolean; virtual;
    procedure WriteBool(const Section, Ident: string; Value: Boolean); virtual;
    function ReadBinaryStream(const Section, Name: string; Value: TStream): Integer; virtual;
    function ReadDate(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
    function ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
    function ReadFloat(const Section, Name: string; Default: Double): Double; virtual;
    function ReadTime(const Section, Name: string; Default: TDateTime): TDateTime; virtual;
    procedure WriteBinaryStream(const Section, Name: string; Value: TStream); virtual;
    procedure WriteDate(const Section, Name: string; Value: TDateTime); virtual;
    procedure WriteDateTime(const Section, Name: string; Value: TDateTime); virtual;
    procedure WriteFloat(const Section, Name: string; Value: Double); virtual;
    procedure WriteTime(const Section, Name: string; Value: TDateTime); virtual;
    procedure ReadSection(const Section: string; Strings: TStrings); virtual; abstract;
    procedure ReadSections(Strings: TStrings); virtual; abstract;
    procedure ReadSectionValues(const Section: string; Strings: TStrings); virtual; abstract;
    procedure EraseSection(const Section: string); virtual; abstract;
    procedure DeleteKey(const Section, Ident: String); virtual; abstract;
    procedure UpdateFile; virtual; abstract;
    function ValueExists(const Section, Ident: string): Boolean;
    property FileName: string read FFileName;
  end;

  { TStringHash - used internally by TMemIniFile to optimize searches. }

  PPHashItem = ^PHashItem;
  PHashItem = ^THashItem;
  THashItem = record
    Next: PHashItem;
    Key: string;
    Value: Integer;
  end;

  TStringHash = class
  private
    Buckets: array of PHashItem;
  protected
    function Find(const Key: string): PPHashItem;
    function HashOf(const Key: string): Cardinal; virtual;
  public
    constructor Create(Size: Integer = 256);
    destructor Destroy; override;
    procedure Add(const Key: string; Value: Integer);
    procedure Clear;
    procedure Remove(const Key: string);
    function Modify(const Key: string; Value: Integer): Boolean;
    function ValueOf(const Key: string): Integer;
  end;

  { THashedStringList - A TStringList that uses TStringHash to improve the
    speed of Find }
  THashedStringList = class(TStringList)
  private
    FValueHash: TStringHash;
    FNameHash: TStringHash;
    FValueHashValid: Boolean;
    FNameHashValid: Boolean;
    procedure UpdateValueHash;
    procedure UpdateNameHash;
  protected
    procedure Changed; override;
  public
    destructor Destroy; override;
    function IndexOf(const S: string): Integer; override;
    function IndexOfName(const Name: string): Integer; override;
  end;

  { TMemIniFile - loads and entire ini file into memory and allows all
    operations to be performed on the memory image.  The image can then
    be written out to the disk file }

  TMemIniFile = class(TCustomIniFile)
  private
    FSections: TStringList;
    function AddSection(const Section: string): TStrings;
    function GetCaseSensitive: Boolean;
    procedure LoadValues;
    procedure SetCaseSensitive(Value: Boolean);
  public
    constructor Create(const FileName: string);
    destructor Destroy; override;
    procedure Clear;
    procedure DeleteKey(const Section, Ident: String); override;
    procedure EraseSection(const Section: string); override;
    procedure GetStrings(List: TStrings);
    procedure ReadSection(const Section: string; Strings: TStrings); override;
    procedure ReadSections(Strings: TStrings); override;
    procedure ReadSectionValues(const Section: string; Strings: TStrings); override;
    function ReadString(const Section, Ident, Default: string): string; override;
    procedure Rename(const FileName: string; Reload: Boolean);
    procedure SetStrings(List: TStrings);
    procedure UpdateFile; override;
    procedure WriteString(const Section, Ident, Value: String); override;
    property CaseSensitive: Boolean read GetCaseSensitive write SetCaseSensitive;
  end;

{$IFDEF MSWINDOWS}
  { TIniFile - Encapsulates the Windows INI file interface
    (Get/SetPrivateProfileXXX functions) }

  TIniFile = class(TCustomIniFile)
  public
    destructor Destroy; override;
    function ReadString(const Section, Ident, Default: string): string; override;
    procedure WriteString(const Section, Ident, Value: String); override;
    procedure ReadSection(const Section: string; Strings: TStrings); override;
    procedure ReadSections(Strings: TStrings); override;
    procedure ReadSectionValues(const Section: string; Strings: TStrings); override;
    procedure EraseSection(const Section: string); override;
    procedure DeleteKey(const Section, Ident: String); override;
    procedure UpdateFile; override;
  end;
{$ELSE}
    TIniFile = class(TMemIniFile);
{$ENDIF}


implementation

uses RTLConsts
{$IFDEF MSWINDOWS}
  , Windows
{$ENDIF};

{ TCustomIniFile }

constructor TCustomIniFile.Create(const FileName: string);
begin
  FFileName := FileName;
end;

function TCustomIniFile.SectionExists(const Section: string): Boolean;
var
  S: TStrings;
begin
  S := TStringList.Create;
  try
    ReadSection(Section, S);
    Result := S.Count > 0;
  finally
    S.Free;
  end;
end;

function TCustomIniFile.ReadInteger(const Section, Ident: string;
  Default: Longint): Longint;
var
  IntStr: string;
begin
  IntStr := ReadString(Section, Ident, '');
  if (Length(IntStr) > 2) and (IntStr[1] = '0') and
    ((IntStr[2] = 'X') or (IntStr[2] = 'x')) then
    IntStr := '$' + Copy(IntStr, 3, Maxint);
  Result := StrToIntDef(IntStr, Default);
end;

procedure TCustomIniFile.WriteInteger(const Section, Ident: string; Value: Longint);
begin
  WriteString(Section, Ident, IntToStr(Value));
end;

function TCustomIniFile.ReadBool(const Section, Ident: string;
  Default: Boolean): Boolean;
begin
  Result := ReadInteger(Section, Ident, Ord(Default)) <> 0;
end;

function TCustomIniFile.ReadDate(const Section, Name: string; Default: TDateTime): TDateTime;
var
  DateStr: string;
begin
  DateStr := ReadString(Section, Name, '');
  Result := Default;
  if DateStr <> '' then
  try
    Result := StrToDate(DateStr);
  except
    on EConvertError do
    else raise;
  end;
end;

function TCustomIniFile.ReadDateTime(const Section, Name: string; Default: TDateTime): TDateTime;
var
  DateStr: string;
begin
  DateStr := ReadString(Section, Name, '');
  Result := Default;
  if DateStr <> '' then
  try
    Result := StrToDateTime(DateStr);
  except
    on EConvertError do
    else raise;
  end;
end;

function TCustomIniFile.ReadFloat(const Section, Name: string; Default: Double): Double;
var
  FloatStr: string;
begin
  FloatStr := ReadString(Section, Name, '');
  Result := Default;
  if FloatStr <> '' then
  try
    Result := StrToFloat(FloatStr);
  except
    on EConvertError do
    else raise;
  end;
end;

function TCustomIniFile.ReadTime(const Section, Name: string; Default: TDateTime): TDateTime;
var
  TimeStr: string;
begin
  TimeStr := ReadString(Section, Name, '');
  Result := Default;
  if TimeStr <> '' then
  try
    Result := StrToTime(TimeStr);
  except
    on EConvertError do
    else raise;
  end;
end;

procedure TCustomIniFile.WriteDate(const Section, Name: string; Value: TDateTime);
begin
  WriteString(Section, Name, DateToStr(Value));
end;

procedure TCustomIniFile.WriteDateTime(const Section, Name: string; Value: TDateTime);
begin
  WriteString(Section, Name, DateTimeToStr(Value));
end;

procedure TCustomIniFile.WriteFloat(const Section, Name: string; Value: Double);
begin
  WriteString(Section, Name, FloatToStr(Value));
end;

procedure TCustomIniFile.WriteTime(const Section, Name: string; Value: TDateTime);
begin
  WriteString(Section, Name, TimeToStr(Value));
end;

procedure TCustomIniFile.WriteBool(const Section, Ident: string; Value: Boolean);
const
  Values: array[Boolean] of string = ('0', '1');
begin
  WriteString(Section, Ident, Values[Value]);
end;

function TCustomIniFile.ValueExists(const Section, Ident: string): Boolean;
var
  S: TStrings;
begin
  S := TStringList.Create;
  try
    ReadSection(Section, S);
    Result := S.IndexOf(Ident) > -1;
  finally
    S.Free;
  end;
end;

function TCustomIniFile.ReadBinaryStream(const Section, Name: string;
  Value: TStream): Integer;
var
  Text: string;
  Stream: TMemoryStream;
  Pos: Integer;
begin
  Text := ReadString(Section, Name, '');
  if Text <> '' then
  begin
    if Value is TMemoryStream then
      Stream := TMemoryStream(Value)
    else Stream := TMemoryStream.Create;
    try
      Pos := Stream.Position;
      Stream.SetSize(Stream.Size + Length(Text) div 2);
      HexToBin(PChar(Text), PChar(Integer(Stream.Memory) + Stream.Position), Length(Text) div 2);
      Stream.Position := Pos;
      if Value <> Stream then Value.CopyFrom(Stream, Length(Text) div 2);
      Result := Stream.Size - Pos;
    finally
      if Value <> Stream then Stream.Free;
    end;
  end else Result := 0;
end;

procedure TCustomIniFile.WriteBinaryStream(const Section, Name: string;
  Value: TStream);
var
  Text: string;
  Stream: TMemoryStream;
begin
  SetLength(Text, (Value.Size - Value.Position) * 2);
  if Length(Text) > 0 then
  begin
    if Value is TMemoryStream then
      Stream := TMemoryStream(Value)
    else Stream := TMemoryStream.Create;
    try
      if Stream <> Value then
      begin
        Stream.CopyFrom(Value, Value.Size - Value.Position);
        Stream.Position := 0;
      end;
      BinToHex(PChar(Integer(Stream.Memory) + Stream.Position), PChar(Text),
        Stream.Size - Stream.Position);
    finally
      if Value <> Stream then Stream.Free;
    end;
  end;
  WriteString(Section, Name, Text);
end;

{ TStringHash }

procedure TStringHash.Add(const Key: string; Value: Integer);
var
  Hash: Integer;
  Bucket: PHashItem;
begin
  Hash := HashOf(Key) mod Cardinal(Length(Buckets));
  New(Bucket);
  Bucket^.Key := Key;
  Bucket^.Value := Value;
  Bucket^.Next := Buckets[Hash];
  Buckets[Hash] := Bucket;
end;

procedure TStringHash.Clear;
var
  I: Integer;
  P, N: PHashItem;
begin
  for I := 0 to Length(Buckets) - 1 do
  begin
    P := Buckets[I];
    while P <> nil do
    begin
      N := P^.Next;
      Dispose(P);
      P := N;
    end;
    Buckets[I] := nil;
  end;
end;

constructor TStringHash.Create(Size: Integer);
begin
  inherited Create;
  SetLength(Buckets, Size);
end;

destructor TStringHash.Destroy;
begin
  Clear;
  inherited;
end;

function TStringHash.Find(const Key: string): PPHashItem;
var
  Hash: Integer;
begin
  Hash := HashOf(Key) mod Cardinal(Length(Buckets));
  Result := @Buckets[Hash];
  while Result^ <> nil do
  begin
    if Result^.Key = Key then
      Exit
    else
      Result := @Result^.Next;
  end;
end;

function TStringHash.HashOf(const Key: string): Cardinal;
var
  I: Integer;
begin
  Result := 0;
  for I := 1 to Length(Key) do
    Result := ((Result shl 2) or (Result shr (SizeOf(Result) * 8 - 2))) xor
      Ord(Key[I]);
end;

function TStringHash.Modify(const Key: string; Value: Integer): Boolean;
var
  P: PHashItem;
begin
  P := Find(Key)^;
  if P <> nil then
  begin
    Result := True;
    P^.Value := Value;
  end
  else
    Result := False;
end;

procedure TStringHash.Remove(const Key: string);
var
  P: PHashItem;
  Prev: PPHashItem;
begin
  Prev := Find(Key);
  P := Prev^;
  if P <> nil then
  begin
    Prev^ := P^.Next;
    Dispose(P);
  end;
end;

function TStringHash.ValueOf(const Key: string): Integer;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品专区在线影院观看| 99这里都是精品| 555夜色666亚洲国产免| 午夜一区二区三区视频| 欧美军同video69gay| 久久国产福利国产秒拍| 久久久久久久综合| 丁香网亚洲国际| 亚洲三级在线看| 欧美艳星brazzers| 轻轻草成人在线| 久久一区二区三区四区| 成人精品鲁一区一区二区| 中文字幕亚洲不卡| 欧美日韩成人高清| 激情综合网天天干| 专区另类欧美日韩| 欧美日韩国产影片| 大胆欧美人体老妇| 亚洲成人激情av| 精品国产1区二区| 99精品国产热久久91蜜凸| 视频在线在亚洲| 久久丝袜美腿综合| 91国偷自产一区二区三区观看| 亚洲一区二区在线免费看| 欧美一区日韩一区| 懂色av一区二区夜夜嗨| 亚洲r级在线视频| 国产午夜精品美女毛片视频| 91久久线看在观草草青青| 另类小说欧美激情| 亚洲久草在线视频| 日韩女优制服丝袜电影| 99国产精品99久久久久久| 亚洲第一在线综合网站| 国产欧美一区二区精品性色 | 亚洲人成网站色在线观看| 欧美日本在线观看| 成人免费va视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品国产自产拍高清av| 日韩精品一区二区三区在线观看| 99re这里只有精品视频首页| 精品一区二区精品| 午夜在线电影亚洲一区| 中文字幕一区二区三区av| 欧美tickling网站挠脚心| 色综合网站在线| 懂色av一区二区三区免费看| 蜜臀av性久久久久蜜臀av麻豆| 一区二区三区四区乱视频| 国产欧美日韩三级| 欧美一区二区三区四区久久| 一本到一区二区三区| 国产精品69毛片高清亚洲| 奇米影视在线99精品| 亚洲欧美日韩综合aⅴ视频| 国产欧美日韩综合精品一区二区| 欧美一区二区美女| 欧美精品一二三| 91久久精品一区二区三| 成人av电影在线播放| 国产一区视频网站| 久久精品99久久久| 奇米色777欧美一区二区| 午夜天堂影视香蕉久久| 亚洲福利视频一区| 亚洲国产精品尤物yw在线观看| 亚洲欧洲综合另类| 中文字幕在线播放不卡一区| 国产女同性恋一区二区| 久久青草欧美一区二区三区| 2014亚洲片线观看视频免费| 日韩小视频在线观看专区| 91精品在线观看入口| 91精品一区二区三区在线观看| 欧美日韩高清影院| 51精品秘密在线观看| 337p亚洲精品色噜噜狠狠| 欧美日韩亚洲丝袜制服| 911国产精品| 精品国产亚洲在线| 精品国产露脸精彩对白| 2欧美一区二区三区在线观看视频| 日韩一级视频免费观看在线| 日韩欧美高清dvd碟片| 欧美精品一区二区在线播放| 国产视频一区在线播放| 中文字幕精品一区二区精品绿巨人 | 成人18视频在线播放| av在线免费不卡| 色婷婷久久久久swag精品 | 欧美激情艳妇裸体舞| 日本一区二区在线不卡| 亚洲人妖av一区二区| 一区二区三区四区乱视频| 午夜免费久久看| 韩国av一区二区| 成人动漫精品一区二区| 欧美中文字幕一区二区三区亚洲| 欧美精品第1页| 精品国产一区二区三区久久久蜜月 | 4438成人网| 国产亚洲欧美激情| 亚洲美女在线一区| 日产国产高清一区二区三区 | 成人国产精品视频| 日本韩国欧美三级| 日韩一区二区视频| 中文字幕va一区二区三区| 一区二区在线观看免费| 日本欧美韩国一区三区| 成人黄色片在线观看| 欧美少妇bbb| 欧美精品一区二区三区蜜桃| 最近中文字幕一区二区三区| 婷婷成人激情在线网| 国产福利91精品一区| 欧美性生活大片视频| 久久久国产精品麻豆| 亚洲综合色视频| 国产成人免费网站| 欧美巨大另类极品videosbest | 国产精品理伦片| 亚洲高清久久久| 成人性生交大合| 这里是久久伊人| 亚洲欧美成人一区二区三区| 蜜臀国产一区二区三区在线播放 | 欧美性一级生活| 中文字幕不卡在线播放| 日韩av不卡一区二区| 在线观看亚洲精品视频| 国产亚洲一区二区三区在线观看| 午夜精品久久久久久不卡8050| 国产91精品久久久久久久网曝门| 在线不卡的av| 亚洲男同性恋视频| 成人av免费在线观看| www精品美女久久久tv| 日一区二区三区| 一本到不卡精品视频在线观看 | 欧美韩国日本不卡| 久久精品99国产精品| 欧美日韩一区国产| 亚洲精品国产a久久久久久| 风间由美性色一区二区三区| 日韩欧美在线123| 午夜精品福利一区二区蜜股av| 成人福利电影精品一区二区在线观看| 日韩精品专区在线影院重磅| 午夜精品久久久久| 欧美撒尿777hd撒尿| 中文字幕一区二区日韩精品绯色| 国产一区二区三区国产| 日韩欧美电影在线| 免费成人你懂的| 欧美一区二区三区在线观看视频 | 亚洲桃色在线一区| av一区二区三区在线| 中文成人av在线| 丁香激情综合五月| 国产精品丝袜久久久久久app| 精品一区二区在线看| 欧美一区二区啪啪| 蜜臀久久99精品久久久画质超高清| 欧美日韩国产免费一区二区 | 欧美一二三四在线| 日韩精品一二三区| 91精品国产美女浴室洗澡无遮挡| 偷拍一区二区三区| 日韩一区国产二区欧美三区| 看片的网站亚洲| 26uuu精品一区二区| 国产福利91精品一区二区三区| 国产欧美一区二区三区在线看蜜臀| 国产99久久久精品| 中文字幕一区在线观看| 色婷婷激情一区二区三区| 亚洲综合一二区| 宅男在线国产精品| 国产在线观看一区二区| 久久精品亚洲一区二区三区浴池| 精品中文字幕一区二区| 国产日韩欧美综合在线| 日韩视频永久免费| 韩国av一区二区三区| 国产精品蜜臀av| 色综合色狠狠综合色| 午夜精品久久久久久久| 日韩欧美高清dvd碟片| 成人自拍视频在线| 亚洲黄一区二区三区| 欧美男同性恋视频网站| 国产精一区二区三区| 1000部国产精品成人观看| 欧美日韩亚洲丝袜制服| 国产精一区二区三区| 一区二区三区中文字幕在线观看|