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

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

?? icolist.pas

?? RX Library contains a large number of components, objects and routines for Borland Delphi with full
?? PAS
字號:
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (RX)                    }
{                                                       }
{         Copyright (c) 1997 Master-Bank                }
{                                                       }
{*******************************************************}

unit IcoList;

interface

{$I RX.INC}

uses Messages, {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
  SysUtils, Classes, Graphics;

type

{ TIconList class }

  TIconList = class(TPersistent)
  private
    FList: TList;
    FUpdateCount: Integer;
    FOnChange: TNotifyEvent;
    procedure ReadData(Stream: TStream);
    procedure WriteData(Stream: TStream);
    procedure SetUpdateState(Updating: Boolean);
    procedure IconChanged(Sender: TObject);
    function AddIcon(Icon: TIcon): Integer;
  protected
    procedure Changed; virtual;
    procedure DefineProperties(Filer: TFiler); override;
    function Get(Index: Integer): TIcon; virtual;
    function GetCount: Integer; virtual;
    procedure Put(Index: Integer; Icon: TIcon); virtual;
  public
    constructor Create;
    destructor Destroy; override;
    function Add(Icon: TIcon): Integer; virtual;
    function AddResource(Instance: THandle; ResId: PChar): Integer; virtual;
    procedure Assign(Source: TPersistent); override;
    procedure BeginUpdate;
    procedure EndUpdate;
    procedure Clear; virtual;
    procedure Delete(Index: Integer); virtual;
    procedure Exchange(Index1, Index2: Integer); virtual;
    function IndexOf(Icon: TIcon): Integer; virtual;
    procedure Insert(Index: Integer; Icon: TIcon); virtual;
    procedure InsertResource(Index: Integer; Instance: THandle;
      ResId: PChar); virtual;
    procedure LoadResource(Instance: THandle; const ResIds: array of PChar);
    procedure LoadFromStream(Stream: TStream); virtual;
    procedure Move(CurIndex, NewIndex: Integer); virtual;
    procedure SaveToStream(Stream: TStream); virtual;
    property Count: Integer read GetCount;
    property Icons[Index: Integer]: TIcon read Get write Put; default;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

implementation

{ TIconList }

constructor TIconList.Create;
begin
  inherited Create;
  FList := TList.Create;
end;

destructor TIconList.Destroy;
begin
  FOnChange := nil;
  Clear;
  FList.Free;
  inherited Destroy;
end;

procedure TIconList.BeginUpdate;
begin
  if FUpdateCount = 0 then SetUpdateState(True);
  Inc(FUpdateCount);
end;

procedure TIconList.Changed;
begin
  if (FUpdateCount = 0) and Assigned(FOnChange) then FOnChange(Self);
end;

procedure TIconList.EndUpdate;
begin
  Dec(FUpdateCount);
  if FUpdateCount = 0 then SetUpdateState(False);
end;

procedure TIconList.ReadData(Stream: TStream);
var
  Len, Cnt: Longint;
  I: Integer;
  Icon: TIcon;
  Mem: TMemoryStream;
begin
  BeginUpdate;
  try
    Clear;
    Mem := TMemoryStream.Create;
    try
      Stream.Read(Cnt, SizeOf(Longint));
      for I := 0 to Cnt - 1 do begin
        Stream.Read(Len, SizeOf(Longint));
        if Len > 0 then begin
          Icon := TIcon.Create;
          try
            Mem.SetSize(Len);
            Stream.Read(Mem.Memory^, Len);
            Mem.Position := 0;
            Icon.LoadFromStream(Mem);
            AddIcon(Icon);
          except
            Icon.Free;
            raise;
          end;
        end
        else AddIcon(nil);
      end;
    finally
      Mem.Free;
    end;
  finally
    EndUpdate;
  end;
end;

procedure TIconList.WriteData(Stream: TStream);
var
  I: Integer;
  Len: Longint;
  Mem: TMemoryStream;
begin
  Mem := TMemoryStream.Create;
  try
    Len := FList.Count;
    Stream.Write(Len, SizeOf(Longint));
    for I := 0 to FList.Count - 1 do begin
      Mem.Clear;
      if (Icons[I] <> nil) and not Icons[I].Empty then begin
        Icons[I].SaveToStream(Mem);
        Len := Mem.Size;
      end
      else Len := 0;
      Stream.Write(Len, SizeOf(Longint));
      if Len > 0 then Stream.Write(Mem.Memory^, Mem.Size);
    end;
  finally
    Mem.Free;
  end;
end;

procedure TIconList.DefineProperties(Filer: TFiler);

{$IFDEF WIN32}
  function DoWrite: Boolean;
  var
    I: Integer;
    Ancestor: TIconList;
  begin
    Ancestor := TIconList(Filer.Ancestor);
    if (Ancestor <> nil) and (Ancestor.Count = Count) and (Count > 0) then
    begin
      Result := False;
      for I := 0 to Count - 1 do begin
        Result := Icons[I] <> Ancestor.Icons[I];
        if Result then Break;
      end
    end
    else Result := Count > 0;
  end;
{$ENDIF}

begin
  Filer.DefineBinaryProperty('Icons', ReadData, WriteData,
    {$IFDEF WIN32} DoWrite {$ELSE} Count > 0 {$ENDIF});
end;

function TIconList.Get(Index: Integer): TIcon;
begin
  Result := TObject(FList[Index]) as TIcon;
end;

function TIconList.GetCount: Integer;
begin
  Result := FList.Count;
end;

procedure TIconList.IconChanged(Sender: TObject);
begin
  Changed;
end;

procedure TIconList.Put(Index: Integer; Icon: TIcon);
begin
  BeginUpdate;
  try
    if Index = Count then Add(nil);
    if Icons[Index] = nil then FList[Index] := TIcon.Create;
    Icons[Index].OnChange := IconChanged;
    Icons[Index].Assign(Icon);
  finally
    EndUpdate;
  end;
end;

function TIconList.AddIcon(Icon: TIcon): Integer;
begin
  Result := FList.Add(Icon);
  if Icon <> nil then Icon.OnChange := IconChanged;
  Changed;
end;

function TIconList.Add(Icon: TIcon): Integer;
var
  Ico: TIcon;
begin
  Ico := TIcon.Create;
  try
    Ico.Assign(Icon);
    Result := AddIcon(Ico);
  except
    Ico.Free;
    raise;
  end;
end;

function TIconList.AddResource(Instance: THandle; ResId: PChar): Integer;
var
  Ico: TIcon;
begin
  Ico := TIcon.Create;
  try
    Ico.Handle := LoadIcon(Instance, ResId);
    Result := AddIcon(Ico);
  except
    Ico.Free;
    raise;
  end;
end;

procedure TIconList.Assign(Source: TPersistent);
var
  I: Integer;
begin
  if Source = nil then Clear
  else if Source is TIconList then begin
    BeginUpdate;
    try
      Clear;
      for I := 0 to TIconList(Source).Count - 1 do
        Add(TIconList(Source)[I]);
    finally
      EndUpdate;
    end;
  end
  else if Source is TIcon then begin
    BeginUpdate;
    try
      Clear;
      Add(TIcon(Source));
    finally
      EndUpdate;
    end;
  end
  else inherited Assign(Source);
end;

procedure TIconList.Clear;
var
  I: Integer;
begin
  BeginUpdate;
  try
    for I := FList.Count - 1 downto 0 do Delete(I);
  finally
    EndUpdate;
  end;
end;

procedure TIconList.Delete(Index: Integer);
var
  Icon: TIcon;
begin
  Icon := Icons[Index];
  if Icon <> nil then begin
    Icon.OnChange := nil;
    Icon.Free;
  end;
  FList.Delete(Index);
  Changed;
end;

procedure TIconList.Exchange(Index1, Index2: Integer);
begin
  FList.Exchange(Index1, Index2);
  Changed;
end;

function TIconList.IndexOf(Icon: TIcon): Integer;
begin
  Result := FList.IndexOf(Icon);
end;

procedure TIconList.InsertResource(Index: Integer; Instance: THandle;
  ResId: PChar);
var
  Ico: TIcon;
begin
  Ico := TIcon.Create;
  try
    Ico.Handle := LoadIcon(Instance, ResId);
    FList.Insert(Index, Ico);
    Ico.OnChange := IconChanged;
  except
    Ico.Free;
    raise;
  end;
  Changed;
end;

procedure TIconList.Insert(Index: Integer; Icon: TIcon);
var
  Ico: TIcon;
begin
  Ico := TIcon.Create;
  try
    Ico.Assign(Icon);
    FList.Insert(Index, Ico);
    Ico.OnChange := IconChanged;
  except
    Ico.Free;
    raise;
  end;
  Changed;
end;

procedure TIconList.LoadResource(Instance: THandle; const ResIds: array of PChar);
var
  I: Integer;
begin
  BeginUpdate;
  try
    for I := Low(ResIds) to High(ResIds) do
      AddResource(Instance, ResIds[I]);
  finally
    EndUpdate;
  end;
end;

procedure TIconList.Move(CurIndex, NewIndex: Integer);
begin
  FList.Move(CurIndex, NewIndex);
  Changed;
end;

procedure TIconList.SetUpdateState(Updating: Boolean);
begin
  if not Updating then Changed;
end;

procedure TIconList.LoadFromStream(Stream: TStream);
begin
  ReadData(Stream);
end;

procedure TIconList.SaveToStream(Stream: TStream);
begin
  WriteData(Stream);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品精品国产高清a毛片牛牛| 色一情一伦一子一伦一区| 石原莉奈在线亚洲二区| 日本一道高清亚洲日美韩| 高清国产一区二区| 91久久精品网| 欧美成人a∨高清免费观看| 久久久精品免费观看| 亚洲色图欧美偷拍| 韩国午夜理伦三级不卡影院| 99久久综合精品| 欧美一级xxx| 亚洲综合色丁香婷婷六月图片| 久久不见久久见免费视频1| 色综合久久九月婷婷色综合| 亚洲狠狠爱一区二区三区| 99在线精品观看| 亚洲国产综合人成综合网站| 欧美一区欧美二区| 亚洲综合激情另类小说区| 91精品久久久久久久91蜜桃| 亚洲男人的天堂网| 国产成人精品亚洲午夜麻豆| 欧美tickling挠脚心丨vk| 丁香五精品蜜臀久久久久99网站| 一区二区三区日韩欧美精品| 91女人视频在线观看| 国产精品久久三| 国产东北露脸精品视频| 亚洲欧美一区二区不卡| 日韩无一区二区| jlzzjlzz亚洲女人18| 日韩成人午夜精品| 国产精品毛片无遮挡高清| 成人黄色一级视频| 国产精品高潮呻吟久久| 欧美精品久久99久久在免费线| 亚洲成人资源在线| 91精品黄色片免费大全| 不卡的看片网站| 青草国产精品久久久久久| 在线综合视频播放| 99免费精品视频| 国产精品123区| 日韩精品电影一区亚洲| 亚洲欧美在线视频| 欧美在线三级电影| 亚洲gay无套男同| |精品福利一区二区三区| 精品免费国产一区二区三区四区| 日本韩国一区二区三区| 成人性生交大片免费看中文网站| 国产精品色一区二区三区| 日韩欧美第一区| 国产精品羞羞答答xxdd| 亚洲婷婷在线视频| 国产色91在线| 色综合天天做天天爱| 亚洲一区二区三区三| 国产精品美女一区二区| 国产丝袜欧美中文另类| 欧美精品一区二区三区在线播放| 欧美精品在线一区二区三区| 99久久777色| 亚洲超丰满肉感bbw| 亚洲免费在线视频一区 二区| 国产嫩草影院久久久久| 欧美中文一区二区三区| 99国内精品久久| 成人综合在线观看| 国产传媒一区在线| 国产精品香蕉一区二区三区| 国产精品一区不卡| 国内精品伊人久久久久av影院| 日韩精品乱码av一区二区| 五月综合激情婷婷六月色窝| 久久精品人人做人人综合| 久久只精品国产| 欧美午夜精品一区二区三区| 狠狠久久亚洲欧美| 极品尤物av久久免费看| 亚洲你懂的在线视频| 一区二区在线观看av| 2020国产精品| 久久精品水蜜桃av综合天堂| 国产午夜精品一区二区三区嫩草 | 精品久久久久一区二区国产| 日韩欧美成人午夜| 国产亚洲欧洲一区高清在线观看| 久久综合九色综合97婷婷| 国产午夜亚洲精品午夜鲁丝片 | 亚洲一区二区三区小说| 亚洲国产wwwccc36天堂| 丝袜美腿亚洲一区二区图片| 九一久久久久久| 国产69精品一区二区亚洲孕妇| 成人午夜av电影| 欧美综合亚洲图片综合区| 3atv在线一区二区三区| 久久综合九色欧美综合狠狠| 国产女主播一区| 亚洲欧美日韩久久精品| 亚洲成人一区在线| 久久国产人妖系列| 99综合电影在线视频| 欧美伦理电影网| 久久久99久久| 一级精品视频在线观看宜春院| 日韩成人免费在线| 懂色av一区二区三区蜜臀| 色丁香久综合在线久综合在线观看| 欧美性猛片aaaaaaa做受| 欧美电影精品一区二区| 综合色天天鬼久久鬼色| 青娱乐精品视频| 菠萝蜜视频在线观看一区| 欧美日韩成人一区| 欧美综合一区二区| 久久精品一级爱片| 亚洲国产欧美日韩另类综合 | 欧美在线高清视频| 久久影院午夜片一区| 一区二区三区四区高清精品免费观看| 日本欧美大码aⅴ在线播放| 国产盗摄女厕一区二区三区| 欧美日韩国产小视频在线观看| 久久蜜桃av一区二区天堂| 一区二区三区四区亚洲| 国产剧情一区二区三区| 欧美亚男人的天堂| 久久精品欧美日韩精品| 午夜精品福利一区二区蜜股av| 国产九色精品成人porny | 成人性生交大片| 欧美一区二视频| 亚洲欧美国产高清| 国产福利91精品一区二区三区| 欧美老肥妇做.爰bbww| 中文字幕在线一区免费| 国产一区二区伦理| 丰满白嫩尤物一区二区| 91麻豆精品国产综合久久久久久| 国产精品麻豆久久久| 激情欧美一区二区| 51午夜精品国产| 亚洲高清在线视频| 91高清在线观看| 最新中文字幕一区二区三区| 国内精品久久久久影院薰衣草 | 亚洲精品国产成人久久av盗摄 | 亚洲欧洲色图综合| 高潮精品一区videoshd| 亚洲精品一区在线观看| 天天综合天天综合色| 91丨porny丨最新| 国产精品久久久久三级| 国产精品18久久久久| 久久综合久久综合亚洲| 日本成人在线不卡视频| 3751色影院一区二区三区| 亚洲一区二区免费视频| 色88888久久久久久影院按摩| 最近日韩中文字幕| 色综合久久中文综合久久97| 亚洲欧美中日韩| 一本到三区不卡视频| 一区二区在线观看av| 日本高清不卡aⅴ免费网站| 中文字幕亚洲在| 一本一道久久a久久精品| 亚洲日本欧美天堂| 在线视频一区二区三| 一区二区三区久久| 欧美少妇性性性| 午夜电影久久久| 成人激情免费电影网址| 精品福利一二区| 国产精品一区免费在线观看| 久久综合一区二区| 国产成人精品免费在线| 国产精品理论在线观看| 91猫先生在线| 午夜精品在线看| 日韩欧美卡一卡二| 国产精品自在在线| 国产欧美日韩久久| 色94色欧美sute亚洲线路二| 亚洲国产va精品久久久不卡综合| 91精品蜜臀在线一区尤物| 精品一区二区三区在线播放视频| 国产夜色精品一区二区av| 99精品欧美一区| 丝袜诱惑亚洲看片| 2023国产一二三区日本精品2022| 成人的网站免费观看| 一区二区三区鲁丝不卡| 日韩一级黄色片| 成人黄色大片在线观看| 亚洲一区二区三区中文字幕 | 成人精品视频一区二区三区尤物|