я б лучше так сделал:
| Код |
unit RegistryEx;
interface
uses Windows, Classes, Registry;
type
TRegistryEx = class(TRegistry) public procedure ReadStrings(const Name: String; List: TStrings); procedure WriteStrings(const Name: String; List: TStrings); end;
implementation
uses RTLConsts;
{ TRegistryEx }
procedure TRegistryEx.ReadStrings(const Name: String; List: TStrings); var Data: String; Info: TRegDataInfo; i: Integer; begin if GetDataInfo(Name, Info) then begin if Info.DataSize <> 0 then begin SetLength(Data, Info.DataSize); ReadBinaryData(Name, Pointer(Data)^, Info.DataSize); SetLength(Data, Info.DataSize - 2); for i := 1 to Length(Data) do if Data[i] = #0 then Data[i] := #13; List.Text := Data; end else List.Text := ''; end else List.Text := ''; end;
procedure TRegistryEx.WriteStrings(const Name: String; List: TStrings); var i: Integer; Data: String; begin Data := ''; for i := 0 to List.Count - 1 do Data := Data + List[i] + #13; if Data = '' then Data := #13#13 else Data := Data + #13; for i := 1 to Length(Data) do if Data[i] = #13 then Data[i] := #0;
if RegSetValueEx(CurrentKey, PChar(Name), 0, REG_MULTI_SZ, Pointer(Data), Length(Data)) <> ERROR_SUCCESS then raise ERegistryException.CreateResFmt(@SRegSetDataFailed, [Name]); end;
end.
| |