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

📄 storages_u1.pas

📁 是一个delphi的流程制作软件
💻 PAS
字号:
unit Storages_U1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls, Buttons,  ComCtrls,  ActiveX,  AxCtrls;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    v: TTabSheet;
    TabSheet3: TTabSheet;
    mem_Page1: TMemo;
    mem_Page2: TMemo;
    mem_Page3: TMemo;
    procedure FormShow(Sender: TObject);
    procedure FormHide(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}


function GetStreamSize(  Stream : IStream  ) : LongInt;
var
   Hr : HResult;
   StatStg : TStatStg;
begin
      {Get the STATSTG info for the stream.
        Dont return the name (saves mem alloc & dealloc)}
   Hr := Stream.Stat(  StatStg,  STATFLAG_NONAME  );

      {Success?}
   if(   not SUCCEEDED(  Hr  )   ) then
   begin
      Result := -1;
      Exit;
   end;

      {Get the size as a LongInt}
   Result :=  StatStg.cbSize ;
end;



procedure TForm1.FormShow(Sender: TObject);

   procedure LoadPage(  Parent : IStorage;  sName : WideString;  Memo : TMemo  );
   var
      Hr : HResult;
      Stor : IStorage;
      Stream : IStream;
      OleStream : TOleStream;
   begin
         {Open the storage}
      Hr := Parent.OpenStorage(  PWideChar(sName),
                                 nil,
                                 STGM_READWRITE or
                                 STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
                                 nil,
                                 0,
                                 Stor
                               );

         {Was is opened?}
      if(   not SUCCEEDED(  Hr  )   ) then
      begin
         (*  Fail  *)
         Exit;
      end;

         {Try to open the stream}
      Hr := Stor.OpenStream(  'Data',
                               nil,
                               STGM_READWRITE or
                               STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
                               0,
                               Stream
                             );

         {Was is opened?}
      if(   not SUCCEEDED(  Hr  )   ) then
      begin
         (*  Fail  *)
         Exit;
      end;

         {Create the OleStream}
      OleStream := TOleStream.Create(  Stream  );

         {Load the data}
      Memo.Lines.LoadFromStream(  OleStream  );

         {Finished with the OleStream stream}
      OleStream.Free;
   end;

var
   Hr : HResult;
   RootStorage : IStorage;
   FileName:string;
begin
      {Try open the DocFile}
   FileName:=extractfilepath(application.exename)+'\mydoc.ole';
   Hr := StgOpenStorage(  pwidechar(FileName),
                          nil,
                          STGM_READWRITE or
                          STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
                          nil,
                          0,
                          RootStorage
                        );

      {Was is opened?}
   if(   not SUCCEEDED(  Hr  )   ) then
   begin
      (*  Fail  *)
      Exit;
   end;

      {Load the 3 pages}
   LoadPage(  RootStorage,  '1',  mem_Page1  );
   LoadPage(  RootStorage,  '2',  mem_Page2  );
   LoadPage(  RootStorage,  '3',  mem_Page3  );
end;



procedure TForm1.FormHide(Sender: TObject);

   procedure SavePage(  Parent : IStorage;  sName : WideString;  Memo : TMemo  );
   var
      Hr : HResult;
      Stor : IStorage;
      Stream : IStream;
      OleStream : TOleStream;
   begin
         {Try to create the storage}
      Hr := Parent.CreateStorage(  PWideChar(sName),
                                   STGM_READWRITE or STGM_CREATE or
                                   STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
                                   0,
                                   0,
                                   Stor
                                 );

         {Was is opened?}
      if(   not SUCCEEDED(  Hr  )   ) then
      begin
         (*  Fail  *)
         Exit;
      end;

         {Try to create the stream}
      Hr := Stor.CreateStream(  'Data',
                                 STGM_CREATE or STGM_READWRITE or
                                 STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
                                 0,
                                 0,
                                 Stream
                               );

         {Was is created?}
      if(   not SUCCEEDED(  Hr  )   ) then
      begin
         (*  Fail  *)
         Exit;
      end;

         {Create the OLE stream}
      OleStream := TOleStream.Create(  Stream  );
         {Save the data}
      Memo.Lines.SaveToStream(  OleStream  );
         {Free OleStream}
      OleStream.Free;
   end;

var
   Hr : HResult;
   RootStorage : IStorage;
begin
      {Try create the DocFile}
   Hr := StgCreateDocFile(  'c:\Temp\MyDocFile.ole',
                            STGM_CREATE or STGM_READWRITE or
                            STGM_DIRECT or STGM_SHARE_EXCLUSIVE,
                            0,
                            RootStorage
                          );

      {Was is created?}
   if(   not SUCCEEDED(  Hr  )   ) then
   begin
      (*  Fail  *)
      Exit;
   end;


      {Save the 3 pages}
   SavePage(  RootStorage,  '1',  mem_Page1  );
   SavePage(  RootStorage,  '2',  mem_Page2  );
   SavePage(  RootStorage,  '3',  mem_Page3  );
end;

end.

⌨️ 快捷键说明

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