⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitstructurestoragefile.pas

📁 图象处理的一些相关内容 不是很难的,实现简单,希望对大家有帮助
💻 PAS
字号:
unit UnitStructureStorageFile;

interface
uses SysUtils,Classes,controls,comctrls,extctrls,Graphics,jpeg,ActiveX,AxCtrls,ComObj;

const PassWordLength=12;
type PassWordString=string[PassWordLength];

type
  TSSPImageFileList=class
  private
    FStrListFile:TStringList;
    FIndex:integer;
    FSSPFileName:string;
    { Private declarations }
  public
    procedure SetSSPFileName(SSPFileName:string);

    function GetSSPFileName:string;

    //添加一个文件
    procedure Add(FileName:string);

    //清空文件列表
    procedure Clear;

    //删除一个文件
    procedure Delete(Index:integer);


    //返回文件数目
    function GetFileCount:integer;

    //设置索引
    procedure SetIndex(AIndex:integer);

    //返回文件索引
    function GetIndex:integer;


    //返回当前文件名
    function GetCurFileName:string;

    //返回下一个文件的文件名
    function GetNextFileName:string;

    //返回上一个文件的文件名
    function GetPreFileName:string;


    constructor Create;
    destructor Destroy; override;
    { Public declarations }
  end;



  procedure AddThumbFromStructureStorageFileToImageListAndListView(AStructureStorageFileName:string;
    AImageList:TImageList;AListView:TListView);
  procedure ShowLargeImageFromStructureStorageFile(AStructureStorageFileName,
    ALargeImageFileName: string; AImage: TImage);
  function IsCorrectPassWord(AStructureStorageFileName: string;
    APassWord: PassWordString):boolean;
  function IsRequrePassWord(
    AStructureStorageFileName: string): boolean;
var
  SSPJpeg:TjpegImage;
  SSPImageFileList:TSSPImageFileList;
implementation


{ TImageFileList }

procedure TSSPImageFileList.Add(FileName: string);
begin
  FStrListFile.Add(FileName);
end;


procedure TSSPImageFileList.Clear;
begin
  FStrListFile.Clear;
  Findex:=-1;
end;


constructor TSSPImageFileList.Create;
begin
  FStrListFile:=TStringList.Create;
  Findex:=-1;
end;

procedure TSSPImageFileList.Delete(Index: integer);
begin
  FStrListFile.Delete(Index);
  SetIndex(Index-1);
//
end;

destructor TSSPImageFileList.Destroy;
begin
  FStrListFile.Free;
  inherited;
end;

function TSSPImageFileList.GetCurFileName: string;
begin
  result:=FStrListFile.Strings[Findex];
end;


function TSSPImageFileList.GetFileCount: integer;
begin
  result:=FStrListFile.Count;
end;

function TSSPImageFileList.GetIndex: integer;
begin
  result:=FIndex;
end;

function TSSPImageFileList.GetNextFileName: string;
begin
  if Findex=FStrListFile.Count-1 then
    Findex:=0
  else
    inc(Findex);

  result:=FStrListFile.Strings[Findex];
end;
function TSSPImageFileList.GetPreFileName: string;
begin
  if Findex=0 then
    Findex:=FStrListFile.Count-1
  else
    dec(Findex);

  result:=FStrListFile.Strings[Findex];
end;

function TSSPImageFileList.GetSSPFileName: string;
begin
  result:=FSSPFileName;
end;

procedure TSSPImageFileList.SetSSPFileName(SSPFileName: string);
begin
  FSSPFileName:=SSPFileName;
//
end;


procedure TSSPImageFileList.SetIndex(AIndex: integer);
begin
  FIndex:=AIndex;
end;



procedure AddThumbFromStructureStorageFileToImageListAndListView(
  AStructureStorageFileName: string; AImageList: TImageList;
  AListView: TListView);
var
  stgRoot:IStorage;
  stgSmallImage:IStorage;

  stmSmallImage:IStream;

  OleStream:Tolestream;

  EnumStatStg:IEnumStatStg;
  StatStg:TStatStg;
  s:string;
  bmp:Tbitmap;
  i:integer;
begin

  //if not IsRefreshImageFinshi then exit;

  //IsReadStructureStorageFileMode:=true;


  //打开结构化存储文件,返回根存储stgRoot
  SSPImageFileList.SetSSPFileName(AStructureStorageFileName);
  SSPImageFileList.Clear;

  OleCheck(StgOpenStorage(StringToOleStr(AStructureStorageFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));

  //在根存储stgRoot下打开子存储stgSmallImage
  OleCheck(stgRoot.OpenStorage('SmallImage',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgSmallImage));

  OleCheck(stgSmallImage.EnumElements(0,nil,0,EnumStatStg));

  bmp:=Tbitmap.Create;
  bmp.PixelFormat:=pf24bit;
  Aimagelist.Clear;
  AListView.Clear;
  i:=0;
  while EnumStatStg.Next(1,StatStg,nil)=S_OK do
  begin
    if StatStg.dwType=STGTY_STREAM then
    begin

      OleCheck(stgSmallImage.OpenStream(StatStg.pwcsName,nil,STGM_READWRITE or
        STGM_SHARE_EXCLUSIVE,0,stmSmallImage));

      OleStream:=TOleStream.Create(stmSmallImage);

      try
        bmp.LoadFromStream(OleStream);
        Aimagelist.add(bmp,nil);
        SSPImageFileList.Add(StatStg.pwcsName);
        with AListView.Items.Add do
        begin
          caption:=StatStg.pwcsName;   //为什么不用转换?
          ImageIndex:=i;
          inc(i);
        end;
      finally
        OleStream.Free;
      end;

    end;
  end;
  bmp.Free;

end;


procedure ShowLargeImageFromStructureStorageFile(AStructureStorageFileName,
  ALargeImageFileName: string; AImage: TImage);
var
  stgRoot:IStorage;
  stgLargeImage:IStorage;

  stmLargeImage:IStream;

  OleStream:Tolestream;
begin

  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(AStructureStorageFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));



  //在根存储stgRoot下打开子存储stgSmallImage
  OleCheck(stgRoot.OpenStorage('LargeImage',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgLargeImage));


  OleCheck(stgLargeImage.OpenStream(StringToOleStr(ALargeImageFileName),nil,STGM_READWRITE or
    STGM_SHARE_EXCLUSIVE,0,stmLargeImage));

  if LowerCase(ExtractFileExt(ALargeImageFileName))='.bmp' then
  begin
    OleStream:=TOleStream.Create(stmLargeImage);
    try
      Aimage.Picture.Bitmap.LoadFromStream(OleStream);
    finally
      OleStream.Free;
    end;
  end
  else if (LowerCase(ExtractFileExt(ALargeImageFileName))='.jpg') or
    (LowerCase(ExtractFileExt(ALargeImageFileName))='.jpeg') then
  begin
    OleStream:=TOleStream.Create(stmLargeImage);
    try
      SSPJpeg.LoadFromStream(OleStream);
      AImage.Picture.Assign(SSPJpeg);
    finally
      OleStream.Free;
    end;
  end;
end;

function IsRequrePassWord(
  AStructureStorageFileName: string): boolean;
var
  stgRoot:IStorage;
  stgPassWord:IStorage;

  stmPassWord:IStream;

  ReadPassWord:PassWordString;

  ReadChars:integer;
begin
  result:=false;
  ReadPassWord:='            ';    //12个空格!

  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(AStructureStorageFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));



  //在根存储stgRoot下打开子存储stgPassWord
  OleCheck(stgRoot.OpenStorage('PassWord',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgPassWord));


  OleCheck(stgPassWord.OpenStream('PassWordValue',nil,STGM_READWRITE or
    STGM_SHARE_EXCLUSIVE,0,stmPassWord));

  stmPassWord.Read(@ReadPassWord[1],PassWordLength,@ReadChars);

  result:=not (trim(ReadPassWord)='NoPassWord');

end;



function IsCorrectPassWord(AStructureStorageFileName: string;
  APassWord: PassWordString):boolean;
var
  stgRoot:IStorage;
  stgPassWord:IStorage;

  stmPassWord:IStream;

  ReadPassWord:PassWordString;

  ReadChars:integer;
begin
  result:=false;
  ReadPassWord:='            ';    //12个空格!

  //打开结构化存储文件,返回根存储stgRoot
  OleCheck(StgOpenStorage(StringToOleStr(AStructureStorageFileName),nil,
    STGM_READWRITE or STGM_SHARE_EXCLUSIVE,nil,0,stgRoot));



  //在根存储stgRoot下打开子存储stgSmallImage
  OleCheck(stgRoot.OpenStorage('PassWord',nil, STGM_READWRITE or
  STGM_SHARE_EXCLUSIVE,nil,0, stgPassWord));


  OleCheck(stgPassWord.OpenStream('PassWordValue',nil,STGM_READWRITE or
    STGM_SHARE_EXCLUSIVE,0,stmPassWord));

  stmPassWord.Read(@ReadPassWord[1],PassWordLength,@ReadChars);

  //showmessage('true :'+ReadPassWord);

  //showmessage('length:'+inttostr(length(ReadPassWord)));


  //showmessage('2true :'+APassWord);

  //showmessage('2length:'+inttostr(length(APassWord)));

  result:=(trim(ReadPassWord)=trim(APassWord));

end;


initialization
  SSPJpeg:=TjpegImage.Create;
  SSPImageFileList:=TSSPImageFileList.Create;
finalization
  SSPJpeg.Free;
  SSPImageFileList.Free;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -