delphi 泛型,存放N张图片  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 泛型,存放N张图片


(* *************************************************
    1、里面放多张图片,用文件名作为索引
    2、线程在背后从硬盘加载到内存
    3、批量加载
    4、加载完成后执行回调,回调是线程安全的
    5、回调中的参数是新加载了多少张图片
************************************************** *)
unit BitmapList;
 
interface
 
uses
  ystem.SysUtils, System.Classes, FMX.Graphics, Generics.Collections,
  xSuperObject, xSuperJson, UrlMon, IdURI, DateUtils;
 
type
  TBitmapList = class(TDictionary)
  private
 
  public
    RPath, LPath: string; // url路径,本地路径
    function CreateDirPath(url: string): string; // 生成路径
    function GetSubDateTime(S1, S2: string): string; // 获取两个时间间隔
    procedure LoadFromFiles(s: string; callback: TProc < Integer >= nil); overload; // 加载一个或逗号分隔的多个图片文件名
    procedure LoadFromFiles(ss: TStrings; callback: TProc < Integer >= nil);overload; // TStrings    的多个图片文件名
    procedure LoadFromFiles(ja: ISuperArray; callback: TProc < Integer >= nil);   overload; // jo          的多个图片文件名
    procedure LoadFromFiles(ja: ISuperArray; k: string; callback: TProc < Integer >= nil); overload;  // ja.O[i].S[K]的多个图片文件名  ja里的某个值
end;
implementation
uses UnitLog;
{ TBitmapList }
procedure TBitmapList.LoadFromFiles(s: string; callback: TProc);
var
  temp1, temp2: string;
  i, j: Integer;
begin
  TThread.CreateAnonymousThread(
    procedure
    var
        i, n: Integer;
    t, t1: string;
    o: TBitmap;
    a: TArray;
    begin
      n := 0;
      a := s.Split([',']);
       for i := 0 to length(a) - 1 do
      begin
        t := a[i];
        if (t <> '') and (not ContainsKey(t)) then
        begin
          if (not FileExists(t)) and (RPath <> '') then
          begin
            t1 := t.Replace(RPath, LPath).Replace('/', '\'); // 本地路径
            if (UrlDownloadToFile(nil, PChar(TIdURI.URLEncode(t)), PChar(t1), 0, nil) = 0) then
            t := t1
           else
            t := '';
          end;
            if (t <> '') and (ContainsKey(t) = False) then
            begin
              o := TBitmap.Create;
              o.LoadFromFile(t);
              Add(t, o);
              Inc(n);
            end;
        end;
    end;
 
    if (Assigned(callback)) then
        TThread.Synchronize(TThread.CurrentThread,
        procedure
        begin
        callback(n);
                    end);
        end).Start;
end;
 
procedure TBitmapList.LoadFromFiles(ss: TStrings; callback: TProc);
var
    s: string;
    i: Integer;
begin
    for i := 0 to ss.Count - 1 do
    begin
        s := ss[i];
        LoadFromFiles(s, callback);
    end;
end;
 
procedure TBitmapList.LoadFromFiles(ja: ISuperArray; k: string;
callback: TProc);
var
    s: String;
    x: IMember;
    i: Integer;
begin
    s := '';
    for x in ja do
        s := s + x.AsObject.s[k] + ',';
    s := s.TrimRight([',']);
    LoadFromFiles(s, callback);
end;
 
procedure TBitmapList.LoadFromFiles(ja: ISuperArray; callback: TProc);
var
    s: string;
    x: IMember;
begin
    s := '';
    for x in ja do
        s := x.AsString;
    LoadFromFiles(s, callback);
end;
推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.036485910415649 seconds