📄 storages_u1.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 + -