📄 _stregini.pas
字号:
(* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is TurboPower SysTools
*
* The Initial Developer of the Original Code is
* TurboPower Software
*
* Portions created by the Initial Developer are Copyright (C) 1996-2002
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* ***** END LICENSE BLOCK ***** *)
{*********************************************************}
{* _STREGINI.PAS 3.00 *}
{*********************************************************}
{$I STDEFINE.INC}
{$I STCOMDEF.INC}
unit _StRegINI;
interface
uses
Windows, ComObj, ActiveX, SysTools_TLB, StRegIni, Classes, StdVcl;
type
IEnumVariant = interface(IUnknown)
['{00020404-0000-0000-C000-000000000046}']
function Next(celt: Longint; out elt; pceltFetched: PLongint): HResult; stdcall;
function Skip(celt: Longint): HResult; stdcall;
function Reset: HResult; stdcall;
function Clone(out Enum: IEnumVariant): HResult; stdcall;
end;
TStRegINIQueryKeyInfo = class(TAutoIntfObject, IStRegINIQueryKeyInfo)
private
FOwner : StRegIni.TQueryKeyInfo;
public
constructor Create(AOwner: StRegIni.TQueryKeyInfo);
protected
function Get_QIClassName: WideString; safecall;
function Get_QIFileTime: TDateTime; safecall;
function Get_QIKey: Integer; safecall;
function Get_QIMaxCNLen: Integer; safecall;
function Get_QIMaxDataLen: Integer; safecall;
function Get_QIMaxSKNLen: Integer; safecall;
function Get_QIMaxVNLen: Integer; safecall;
function Get_QINumSubKeys: Integer; safecall;
function Get_QINumValues: Integer; safecall;
function Get_QISDescLen: Integer; safecall;
{ Protected declarations }
end;
TStRegINISubKey = class(TAutoIntfObject, IStRegINISubKey)
private
FOwner : WideString;
public
constructor Create(AOwner: WideString);
protected
function Get_Value: WideString; safecall;
{ Protected declarations }
end;
TStRegINISubKeys = class(TAutoIntfObject, IStRegINISubKeys, IEnumVariant)
private
FOwner : TStrings;
FEnumPos : Integer;
public
constructor Create(AOwner: TStrings);
destructor Destroy; override;
protected
{ IEnumVariant }
function Next(celt: LongInt; out elt; pceltFetched: PLongInt): HResult; stdcall;
function Skip(celt: LongInt): HResult; stdcall;
function Reset: HResult; stdcall;
function Clone(out Enum: IEnumVariant): HResult; stdcall;
function Get__NewEnum: IUnknown; safecall;
function Get_Count: Integer; safecall;
function Get_Item(Index: Integer): IStRegINISubKey; safecall;
end;
TStRegIniValue = class(TAutoIntfObject, IStRegIniValue)
private
FOwner : WideString;
public
constructor Create(AOwner: WideString);
protected
function Get_Value: WideString; safecall;
end;
TStRegINIValues = class(TAutoIntfObject, IStRegINIValues, IEnumVariant)
private
FOwner : TStrings;
FEnumPos : Integer;
public
constructor Create(AOwner: TStrings);
destructor Destroy; override;
protected
{ IEnumVariant }
function Next(celt: LongInt; out elt; pceltFetched: PLongInt): HResult; stdcall;
function Skip(celt: LongInt): HResult; stdcall;
function Reset: HResult; stdcall;
function Clone(out Enum: IEnumVariant): HResult; stdcall;
function Get__NewEnum: IUnknown; safecall;
function Get_Count: Integer; safecall;
function Get_Item(Index: Integer): IStRegINIValue; safecall;
end;
TStRegINI = class(TAutoObject, IStRegINI)
private
FOwner : StRegIni.TStRegIni;
FIsLicensed : Boolean;
public
procedure Initialize; override;
destructor Destroy; override;
protected
function Get_CurrentSubKey: WideString; safecall;
function Get_IsIniFile: WordBool; safecall;
function Get_Primary: WideString; safecall;
function Get_SubKeys: IStRegINISubKeys; safecall;
function Get_Values: IStRegINIValues; safecall;
function KeyExists(const KeyName: WideString): WordBool; safecall;
function QueryKey: IStRegINIQueryKeyInfo; safecall;
function ReadBoolean(const ValueName: WideString;
Default: WordBool): WordBool; safecall;
function ReadDate(const ValueName: WideString;
Default: TDateTime): TDateTime; safecall;
function ReadDateTime(const ValueName: WideString;
Default: TDateTime): TDateTime; safecall;
function ReadInteger(const ValueName: WideString;
Default: Integer): Integer; safecall;
function ReadString(const ValueName, Default: WideString): WideString;
safecall;
function ReadTime(const ValueName: WideString;
Default: TDateTime): TDateTime; safecall;
procedure CreateKey(const KeyName: WideString); safecall;
procedure DeleteKey(const KeyName: WideString; DeleteSubKeys: WordBool);
safecall;
procedure DeleteValue(const ValueName: WideString); safecall;
procedure Open(const RootName: WideString; IsIniFile: WordBool); safecall;
procedure Set_CurrentSubKey(const Value: WideString); safecall;
procedure Set_Primary(const Value: WideString); safecall;
procedure WriteBoolean(const ValueName: WideString; Value: WordBool);
safecall;
procedure WriteDate(const ValueName: WideString; Value: TDateTime);
safecall;
procedure WriteDateTime(const ValueName: WideString; Value: TDateTime);
safecall;
procedure WriteInteger(const ValueName: WideString; Value: Integer);
safecall;
procedure WriteString(const ValueName, Value: WideString); safecall;
procedure WriteTime(const ValueName: WideString; Value: TDateTime);
safecall;
function License(const Key: WideString): WordBool; safecall;
{ Protected declarations }
end;
implementation
uses ComServ, StBase, StConst, StDate {$IFDEF LICENSE}, StComLic {$ENDIF};
procedure RaiseRegIniError(Code : LongInt);
var
E : ESTRegIniError;
begin
E := ESTRegIniError.CreateResTP(Code, 0);
E.ErrorCode := Code;
raise E;
end;
{ ******** IRegIniQueryKeyInfo *** }
constructor TStRegINIQueryKeyInfo.Create(AOwner: StRegIni.TQueryKeyInfo);
begin
inherited Create(ComServer.TypeLib, IStRegIniQueryKeyInfo);
FOwner := AOwner;
end;
function TStRegINIQueryKeyInfo.Get_QIClassName: WideString;
begin
Result := FOwner.QIClassName;
end;
function TStRegINIQueryKeyInfo.Get_QIFileTime: TDateTime;
begin
// Result := FOwner.QIFileTime;
end;
function TStRegINIQueryKeyInfo.Get_QIKey: Integer;
begin
Result := FOwner.QIKey;
end;
function TStRegINIQueryKeyInfo.Get_QIMaxCNLen: Integer;
begin
Result := FOwner.QIMaxCNLen;
end;
function TStRegINIQueryKeyInfo.Get_QIMaxDataLen: Integer;
begin
Result := FOwner.QIMaxDataLen;
end;
function TStRegINIQueryKeyInfo.Get_QIMaxSKNLen: Integer;
begin
Result := FOwner.QIMaxSKNLen;
end;
function TStRegINIQueryKeyInfo.Get_QIMaxVNLen: Integer;
begin
Result := FOwner.QIMaxVNLen;
end;
function TStRegINIQueryKeyInfo.Get_QINumSubKeys: Integer;
begin
Result := FOwner.QINumSubKeys;
end;
function TStRegINIQueryKeyInfo.Get_QINumValues: Integer;
begin
Result := FOwner.QINumValues;
end;
function TStRegINIQueryKeyInfo.Get_QISDescLen: Integer;
begin
Result := FOwner.QISDescLen;
end;
{ ******************************** }
{ ******** IRegIniSubKey ********* }
constructor TStRegIniSubKey.Create(AOwner: WideString);
begin
inherited Create(ComServer.TypeLib, IStRegIniSubKey);
FOwner := AOwner;
end;
function TStRegINISubKey.Get_Value: WideString;
begin
Result := FOwner;
end;
{ ******************************** }
{ ******** IRegIniSubKeys ******** }
constructor TStRegIniSubKeys.Create(AOwner: TStrings);
begin
inherited Create(ComServer.TypeLib, IStRegIniSubKeys);
FOwner := AOwner;
FEnumPos := 0;
end;
destructor TStRegIniSubKeys.Destroy;
begin
FOwner.Free;
inherited Destroy;
end;
function TStRegIniSubKeys.Next(celt: LongInt; out elt; pceltFetched: PLongInt): HRESULT;
var
V : OleVariant;
I : Integer;
begin
Result := S_FALSE;
try
if pceltFetched <> nil then
pceltFetched^ := 0;
for I := 0 to celt - 1 do begin
if FEnumPos >= FOwner.Count then begin
FEnumPos := 0;
Exit;
end;
V := Get_Item(FEnumPos);
TVariantArgList(elt)[I] := TVariantArg(V);
// Prevent COM garbage collection
TVarData(V).VType := varEmpty;
TVarData(V).VInteger := 0;
Inc(FEnumPos);
if pceltFetched <> nil then
Inc(pceltFetched^);
end;
except
end;
if (pceltFetched = nil) or ((pceltFetched <> nil) and (pceltFetched^ = celt)) then
Result := S_OK;
end;
function TStRegIniSubKeys.Skip(celt: LongInt): HResult;
begin
Inc(FEnumPos, celt);
Result := S_OK;
end;
function TStRegIniSubKeys.Reset: HResult;
begin
FEnumPos := 0;
Result := S_OK;
end;
function TStRegIniSubKeys.Clone(out Enum: IEnumVariant): HResult;
begin
Enum := nil;
Result := S_OK;
try
Enum := Self.Create(FOwner);
except
Result := E_OUTOFMEMORY;
end;
end;
function TStRegINISubKeys.Get__NewEnum: IUnknown;
begin
Result := Self;
end;
function TStRegINISubKeys.Get_Count: Integer;
begin
FOwner.Count;
end;
function TStRegINISubKeys.Get_Item(Index: Integer): IStRegINISubKey;
begin
Result := TStRegIniSubKey.Create(FOwner.Strings[Index]);
end;
{ ******************************** }
{ ******** IRegIniValue ********** }
constructor TStRegIniValue.Create(AOwner: WideString);
begin
inherited Create(ComServer.TypeLib, IStRegIniValue);
FOwner := AOwner;
end;
function TStRegIniValue.Get_Value: WideString;
begin
Result := FOwner;
end;
{ ******************************** }
{ ******** IRegIniValues ********* }
constructor TStRegIniValues.Create(AOwner: TStrings);
begin
inherited Create(ComServer.TypeLib, IStRegIniValues);
FOwner := AOwner;
FEnumPos := 0;
end;
destructor TStRegIniValues.Destroy;
begin
FOwner.Free;
inherited Destroy;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -