Hola,
No sé hasta qué punto sacarás algo en claro (advierto desde ya que tiene algunos problemas) de lo siguiente:
Código Delphi
[-]
unit UDocsRecientes;
interface
uses
Classes, Dialogs,
Registry, SysUtils;
type
TDocsRecientes = class(TObject)
private
FMaxDocs: integer;
FDocsRecientes: TStringList;
public
constructor Create;
destructor Destroy; override;
procedure Anadir(rutaDoc: string);
procedure Borrar(rutaDoc: string);
procedure Guardar(rootReg: Cardinal; claveReg: string);
procedure Recuperar(rootReg: Cardinal; claveReg: string);
published
property DocsRecientes: TStringList read FDocsRecientes;
property MaxDocs: integer read FMaxDocs write FMaxDocs default 10;
end;
implementation
resourcestring
rsDocReciente = 'DocReciente%d';
constructor TDocsRecientes.Create;
begin
inherited Create;
FMaxDocs := 10;
FDocsRecientes := TStringList.Create;
end;
destructor TDocsRecientes.Destroy;
begin
FDocsRecientes.Free;
inherited Destroy;
end;
procedure TDocsRecientes.Anadir(rutaDoc: string);
var
i: integer;
begin
if not FileExists(rutaDoc) then Exit;
i := fDocsRecientes.IndexOf(rutaDoc);
if i <> -1 then
begin
if i > 0 then
FDocsRecientes.Move(i, 0);
FDocsRecientes[0] := rutaDoc;
end
else
FDocsRecientes.Insert(0, rutaDoc);
end;
procedure TDocsRecientes.Borrar(rutaDoc: string);
var
i: integer;
begin
i := FDocsRecientes.IndexOf(rutaDoc);
if i <> -1 then FDocsRecientes.Delete(i);
end;
procedure TDocsRecientes.Guardar(rootReg: Cardinal; claveReg: string);
var
i: integer;
reg: TRegistry;
begin
reg := TRegistry.Create;
try
with reg do begin
RootKey := rootReg;
if KeyExists(claveReg) then
DeleteKey(claveReg);
OpenKey(claveReg, true);
for i := 0 to FDocsRecientes.Count-1 do
begin
if FileExists(FDocsRecientes[i]) then
WriteString(Format(rsDocReciente,
[i]), FDocsRecientes[i]);
end;
CloseKey;
end;
finally
reg.Free;
end;
end;
procedure TDocsRecientes.Recuperar(rootReg: Cardinal;
claveReg: string);
var
i: integer;
reg: TRegistry;
begin
FDocsRecientes.Clear;
reg := TRegistry.Create;
try
with reg do begin
RootKey := rootReg;
OpenKey(claveReg, false);
for i := 0 to fMaxDocs-1 do begin
if ValueExists(Format(rsDocReciente, [i])) then begin
if FileExists(ReadString(Format(rsDocReciente, [i]))) then
FDocsRecientes.Add(ReadString(Format(rsDocReciente, [i])));
end;
end;
CloseKey;
end;
finally
reg.Free;
end;
end;
end.
Cabe decir que, naturalmente, puedes complicar/mejorar el código lo que quieras, pero, yo espero haberte dado alguna idea, humildemente.