123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- {
- This file is part of the Free Component Library (FCL)
- Copyright (c) 1999-2000 by the Free Pascal development team
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {****************************************************************************}
- {* TPersistent *}
- {****************************************************************************}
- procedure TPersistent.AssignError(Source: TPersistent);
- Var SourceName : String;
- begin
- If Source<>Nil then
- SourceName:=Source.ClassName
- else
- SourceName:='Nil';
- raise EConvertError.CreateFmt (SAssignError,[SourceName,ClassName]);
- end;
- procedure TPersistent.AssignTo(Dest: TPersistent);
- begin
- Dest.AssignError(Self);
- end;
- procedure TPersistent.DefineProperties(Filer: TFiler);
- begin
- end;
- function TPersistent.GetOwner: TPersistent;
- begin
- Result:=Nil;
- end;
- destructor TPersistent.Destroy;
- begin
- Inherited Destroy;
- end;
- procedure TPersistent.Assign(Source: TPersistent);
- begin
- If Source<>Nil then
- Source.AssignTo(Self)
- else
- AssignError(Nil);
- end;
- function TPersistent.GetNamePath: string;
- Var OwnerName :String;
- begin
- Result:=ClassNAme;
- If GetOwner<>Nil then
- begin
- OwnerName:=GetOwner.GetNamePath;
- If OwnerName<>'' then Result:=OwnerName+'.'+Result;
- end;
- end;
- {****************************************************************************}
- {* TInterfacedPersistent *}
- {****************************************************************************}
- procedure TInterfacedPersistent.AfterConstruction;
- begin
- inherited;
- if assigned(GetOwner) then
- GetOwner.GetInterface(IUnknown,FOwnerInterface);
- end;
- function TInterfacedPersistent._AddRef: Integer;stdcall;
- begin
- if assigned(FOwnerInterface) then
- Result:=FOwnerInterface._AddRef
- else
- Result:=-1;
- end;
- function TInterfacedPersistent._Release: Integer;stdcall;
- begin
- if assigned(FOwnerInterface) then
- Result:=FOwnerInterface._Release
- else
- Result:=-1;
- end;
- function TInterfacedPersistent.QueryInterface(const IID: TGUID; out Obj): HResult;stdcall;
- begin
- if GetInterface(IID, Obj) then
- Result:=0
- else
- Result:=HResult($80004002);
- end;
- {****************************************************************************}
- {* TRecall *}
- {****************************************************************************}
- constructor TRecall.Create(AStorage,AReference: TPersistent);
- begin
- inherited Create;
- FStorage:=AStorage;
- FReference:=AReference;
- Store;
- end;
- destructor TRecall.Destroy;
- begin
- if Assigned(FReference) then
- FReference.Assign(FStorage);
- Forget;
- inherited;
- end;
- procedure TRecall.Forget;
- begin
- FReference:=nil;
- FreeAndNil(FStorage);
- end;
- procedure TRecall.Store;
- begin
- if Assigned(FReference) then
- FStorage.Assign(FReference);
- end;
|