Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Asociar archivo creado por mi aplicacion (https://www.clubdelphi.com/foros/showthread.php?t=68458)

vna 15-06-2010 06:14:38

Asociar archivo creado por mi aplicacion
 
Hola a todos estuve viendo otros hilos similares a lo que quiero hacer pero tengo unas dudas, si alguien pudiera aclararlas le agradecia mucho; explico mi situacion.
Bueno, estoy trabajando en un graficador, y tengo un tipo de archivo especifico, ahora quiero asociar el archivo con mi aplicacion para que tenga un icono propio y al hacerle doble click al archivo desde el explorador de windows se pueda abrir.
Mi otro problema, es que como nunca hice algo similar no se como implementarlo ni en donde, quizas es algo muy facil y obvio pero la verdad es que no se. Por eso si pudieran orientarme como y donde les agradeceria mucho, porque los otros hilos que vi muestran como se hace pero por ahi hay algo que no se, que hace que no los entienda muy bien y que no vea con obviedad como implementarlo

ecfisa 15-06-2010 07:06:11

Hola.

Navegando un poco encontré esto:http://edwinblog.byethost6.com/2009/...elphi/#more-34

Ojalá te sirva.

Nota: Revisalo. ( no lo probé... )

Saludos.

Neftali [Germán.Estévez] 15-06-2010 10:19:18

Yo en alguna ocasión he itilizado este código (no es mío):

Código Delphi [-]
procedure RegisterFileTypeEx(cMyExt, cMyFileType, cMyDescription, ExeName: string;
                             sIconPath:string; sIconNumber:Integer; DoUpdate: boolean = false);
var
   Reg: TRegistry;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_CLASSES_ROOT;
    Reg.OpenKey(cMyExt, True);
    // Write my file type to it.
    // This adds HKEY_CLASSES_ROOT\.abc\(Default) = 'Project1.FileType'
    Reg.WriteString('', cMyFileType);
    Reg.CloseKey;
    // Now create an association for that file type
    Reg.OpenKey(cMyFileType, True);
    // This adds HKEY_CLASSES_ROOT\Project1.FileType\(Default)
    //   = 'Project1 File'
    // This is what you see in the file type description for
    // the a file's properties.
    Reg.WriteString('', cMyDescription);
    Reg.CloseKey;    // Now write the default icon for my file type
    // This adds HKEY_CLASSES_ROOT\Project1.FileType\DefaultIcon
    //  \(Default) = 'Application Dir\Project1.exe,0'
    Reg.OpenKey(cMyFileType + '\DefaultIcon', True);

    if (sIconPath = '') then begin
      Reg.WriteString('', ExeName + ',' + IntToStr(sIconNumber));
    end
    else begin
      Reg.WriteString('', sIconPath);
    end;
    Reg.CloseKey;
    // Now write the open action in explorer
    Reg.OpenKey(cMyFileType + '\Shell\Open', True);
    Reg.WriteString('', '&Open');
    Reg.CloseKey;
    // Write what application to open it with
    // This adds HKEY_CLASSES_ROOT\Project1.FileType\Shell\Open\Command
    //  (Default) = '"Application Dir\Project1.exe" "%1"'
    // Your application must scan the command line parameters
    // to see what file was passed to it.
    Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True);
    Reg.WriteString('', '"' + ExeName + '" "%1"');
    Reg.CloseKey;
    // Finally, we want the Windows Explorer to realize we added
    // our file type by using the SHChangeNotify API.
    if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
  finally
    Reg.Free;
  end;
end;

Y la llamada era similar a esta:

Código Delphi [-]
      RegisterFileTypeEx(STR_EXT, STR_DESC_CNN,
                       STR_DESC_CNN,
                       Application.ExeName,
                       IcoName, 2,  // icono
                       True);

Los parámetros eran los siguientes:
* STR_EXT la extensión con la forma '.CNN';
* STR_DESC_CNN es una cadenas descriptiva tipo esta: 'Fichero de conexión'
* IcoName es el path donde está el icono a asociar.

vna 16-06-2010 06:40:40

Gracias! pruebo las dos opciones y les cuento.
lo que mas estaria necesitando es que me expliquen como lo implemento, esto es, en que instancia del programa, en que momento, ahi es mas donde ando perdida.

vna 21-06-2010 07:26:15

hola
no se si me podrian ayudar, no entiendo que estoy haciendo mal pero en esta linea me salta error
Reg.WriteString('', cMyFileType);
ERegistryException -> failed to set a data for ''
otra duda que tengo en la segunda propuesta no entiendo bien que datos van en las variables cMyFileType y cMyDescription y si me pudieran explicar para que sirve, probe las dos propuestas y otras mas que encontre en el foro, pero veo que algo estoy haciendo mal para que siempre me salga ese error
Desde ya muchas gracias

Neftali [Germán.Estévez] 21-06-2010 09:18:53

Cita:

Empezado por vna (Mensaje 367836)
hola
no se si me podrian ayudar, no entiendo que estoy haciendo mal pero en esta linea me salta error
Reg.WriteString('', cMyFileType);
ERegistryException -> failed to set a data for ''

A mi me funciona perfectamente en Delphi 6 (XP).
Con qué sistema estás trabajando.

Cita:

Empezado por vna (Mensaje 367836)
otra duda que tengo en la segunda propuesta no entiendo bien que datos van en las variables cMyFileType y cMyDescription y si me pudieran explicar para que sirve

Esos dos parámetros corresponden con los que te he puesto en la llamada de ejemplo y donde te he explicado para qué sirven:

RegisterFileTypeEx(cMyExt, cMyFileType, cMyDescription,
cMyExt: Extensión con formato .XXX
cMyFileType: Tipo de Fichero (Fichero Bitmap, Fichero ejecutable,...)
cMyDescription: Descripción del tipo de fichero

vna 22-06-2010 01:40:59

hola, gracias por la explicacion.
Estoy trabajando en delphi 2010 en Windows 7.
No se si mi error esta en el momento en el que realizo la asociacion. Pero cada vez que pruebo salta el mismo error.

Neftali [Germán.Estévez] 22-06-2010 12:19:21

Cita:

Empezado por vna (Mensaje 367946)
hola, gracias por la explicacion.
Estoy trabajando en delphi 2010 en Windows 7.
No se si mi error esta en el momento en el que realizo la asociacion. Pero cada vez que pruebo salta el mismo error.

Si es con Windows 7 revisa que no sean permisos a la hora de acceder al registro. Ya se sabe que es bastante menos restrictivo que las otras versiones de Windows.

vna 22-06-2010 18:00:45

Si, muchas gracias, por la ayuda, probe en windows XP y me anda perfectamente, asi que revisare eso que me dices porque necesito que me ande en windows 7. Muchas gracias de nuevo


La franja horaria es GMT +2. Ahora son las 18:04:48.

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