本例效果图 代码文件 unitUnit; interface uses WindowsMessagesSysUtilsVariantsClassesGraphicsControlsForms DialogsStdCtrls; type TForm=class(TForm) Button:TButton; Button:TButton; procedureFormCreate(Sender:TObject); procedureButtonClick(Sender:TObject); procedureButtonClick(Sender:TObject); end; var Form:TForm; implementation {$R*dfm} UsesActivex; type TRec=record Name:string[]; Age:Word; end; constFileName=C:TempTestdat; procedureTFormFormCreate(Sender:TObject); begin ButtonCaption:=写复合文件; ButtonCaption:=读复合文件; Position:=poDesktopCenter; end; procedureTFormButtonClick(Sender:TObject); const Mode=STGM_CREATEorSTGM_READWRITEorSTGM_SHARE_EXCLUSIVE; var StgRootStgSub:IStorage; Stm:IStream; Rec:TRec; begin {建立根IStorage:StgRoot} StgCreateDocfile(FileNameModeStgRoot); {建立子IStorage:StgSub} StgRootCreateStorage(StgSubModeStgSub); {在子IStorage:StgSub中建立IStream:Stm} StgSubCreateStream(StmModeStm); {写入数据} RecName:=张三; RecAge:=; StmWrite(@RecSizeOf(TRec)nil); end; procedureTFormButtonClick(Sender:TObject); const Mode=STGM_READorSTGM_SHARE_EXCLUSIVE; Var StgRootStgSub:IStorage; Stm:IStream; Rec:TRec; Begin {如果不是结构化存储文件则退出} ifStgIsStorageFile(FileName)<>S_OKthenExit; {获取根IStorage:StgRoot} StgOpenStorage(FileNamenilModenilStgRoot); {获取子IStorage:StgSub;注意:第一个参数的名称必须和保存时一致} StgRootOpenStorage(StgSubnilModenilStgSub); {获取IStream:Stm;注意:第一个参数的名称必须和保存时一致} StgSubOpenStream(StmnilModeStm); {读出数据} StmRead(@RecSizeOf(TRec)nil); ShowMessageFmt(%s%d[RecNameRecAge]); end; end 窗体文件 objectForm:TForm Left= Top= Caption=Form ClientHeight= ClientWidth= Color=clBtnFace FontCharset=DEFAULT_CHARSET FontColor=clWindowText FontHeight= FontName=Tahoma FontStyle=[] OldCreateOrder=False OnCreate=FormCreate PixelsPerInch= TextHeight= objectButton:TButton Left= Top= Width= Height= Caption=Button TabOrder= OnClick=ButtonClick end objectButton:TButton Left= Top= Width= Height= Caption=Button TabOrder= OnClick=ButtonClick end end |