Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 14-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ok. El tipo de datos es REG_MULTI_SZ, esto es, cadenas de caracteres separadas por nulos (#0).

Estuve viendo los métodos de TRegistry y al parecer no hay uno (o no lo he visto) para leer este tipo de datos.

Pero buscando se encuentra

Te pongo la siguiente rutina ReadStrings para leer un valor de este tipo del registro:

Código Delphi [-]
{
  Convierte una lista de cadenas separadas
  por nulos en una lista normal de cadenas.
}
procedure SzStringsToStrings(const SzStrings: String; Strings: TStrings);
var
  NullPos: Integer;
  S: String;

begin
  S := SzStrings;
  while S <> '' do
  begin
    NullPos := Pos(#0, S);
    if NullPos <> 0 then
    begin
      Strings.Add(S);
      Delete(S, 1, NullPos);
    end
    else
      break;
  end;
end;

{
  Similar a Win32Check pero para funciones que
  regresan un entero.
}
procedure CheckApi(RetVal: Integer);
begin
  if RetVal <> ERROR_SUCCESS then
    RaiseLastOSError;
end;

{
  Lee un valor multilínea del registro
}
procedure ReadStrings(Root: HKey; Key, Value: String; Strings: TStrings);
var
  Data: String;
  Size: Integer;

begin
  with TRegistry.Create do
    try
      RootKey := Root;

      if OpenKey(Key, false) then
      begin
        { Obtener el tamaño que ocupa el dato }
        CheckApi(RegQueryValueEx(CurrentKey, PChar(Value), nil, nil, nil, @Size));
        SetLength(Data, Size);

        { Leer el dato }
        CheckApi(RegQueryValueEx(CurrentKey, PChar(Value), nil, nil, @Data[1], @Size));

        { Convertir el dato a TStrings }
        SzStringsToStrings(Data, Strings);
      end;
    finally
      Free;
    end;
end;

Un ejemplo de uso:

Código Delphi [-]
var
  Key: String;
  Value: String;

begin
  Key := 'System\ControlSet001\Services\lanmanserver\Shares';
  ReadStrings(HKEY_LOCAL_MACHINE, Key, 'Documentos', Memo1.Lines);
end;

// Saludos
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:41:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi