Ver Mensaje Individual
  #2  
Antiguo 21-05-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Creo que te refieres a asociar una extensión de archivo con tu programa. Las siguientes funciones las uso yo en una aplicación para ello. Las escribí hace tiempo y no he hecho ahora sino copiarlas aquí. Atención, porque puede que tengan algún que otro problema: debes hacer pruebas y asegurarte de que todo va bien para repasar lo que fuera menester.

Código Delphi [-]
{ Asociar una determinada extensión de archivo de
  forma que el programa se encarge de abrir el tipo
  de archivo correspondiente.

  Basado en un procedimiento escrito por roman en
  los foros del ClubDelphi (www.clubdelphi.com).
}
procedure AsociarExtension(extension: string);
var
  reg: TRegistry;
  temp, tipo: string;
begin
  tipo := rsProyecto + Copy(UpperCase(extension),
    2, Length(extension));
  reg := TRegistry.Create;
  try
    with reg do begin
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(extension, true);
        temp := ReadString(EmptyStr);
        WriteString(EmptyStr, tipo);
      CloseKey;
      OpenKey(tipo + '\shell\open\command', true);
        WriteString(EmptyStr, ParamStr(0) +' "%1"');
      CloseKey;
      OpenKey(tipo + '\DefaultIcon', true);
        WriteString(EmptyStr, ParamStr(0) +',0');
      CloseKey;
      { Realizamos una copia de seguridad para
        que puedan "desasociarse" extensiones de
        archivo con el programa y recuperarse la
        información relativa a la misma.
      }
      if (temp <> EmptyStr) and (temp <> tipo) then
      begin
        RootKey := rsRegRoot;
        OpenKey(rsRegExtensiones +rsBarraIzq+ extension, true);
          WriteString(EmptyStr, temp);
        CloseKey;
      end;
    end;
  finally
    reg.Free;
  end;
end;

{ Desasociar una determinada extensión de
  archivo asociada antes con este programa.
}
procedure DesasociarExtension(extension: string);
var
  reg: TRegistry;
  temp, tipo: string;
begin
  temp := EmptyStr;
  tipo := rsProyecto + Copy(UpperCase(extension),
    2, Length(extension));
  reg := TRegistry.Create;
  try
    with reg do begin
      RootKey := rsRegRoot;
      { Tratamos de recuperar el nombre del tipo
        de archivo perteneciente a la extensión,
        que previamente, si existía, guardamos
        en el procedimiento "AsociarExtension"
      }
      OpenKey(rsRegExtensiones +rsBarraIzq+ extension, false);
        temp := ReadString(EmptyStr);
      CloseKey;
      DeleteKey(rsRegExtensiones +rsBarraIzq+ extension);
      // Y, en cualquier caso...
      RootKey := HKEY_CLASSES_ROOT;
      OpenKey(extension, false);
        WriteString(EmptyStr, temp);
      CloseKey;
      DeleteKey(tipo);
    end;
  finally
    reg.Free;
  end;
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita