Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-05-2004
soul6301 soul6301 is offline
Miembro
 
Registrado: may 2004
Posts: 77
Poder: 20
soul6301 Va por buen camino
Question Abrir un programa desde un archivo asociado (2)

Disculpen por no haberme expresado bien, volveré a intentarlo:

El archivo de texto ya está asociado con mi programa hecho en Delphi. ¿Cómo logro obtener la dirección de ese archivo (incluyendo el nombre del archivo) para luego usarlo y lograr que mi programa lea la información del archivo?
Imaginemos el siguiente caso: Estoy en el explorador de Windows y le doy doble clic al archivo de texto, se abre mi programa pero éste debe leer también la información de dicho archivo.

Gracias por su interés en ayudar.

PD: Esta interrogante me lleva a otra pregunta: ¿Cómo logro asociar un tipo de archivo a mi programa desde un programa hecho en Delphi?... Tomen esta pregunta como una muy diferente a la anterior. Gracias otra vez.
Responder Con Cita
  #2  
Antiguo 31-05-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
Cita:
Empezado por soul6301
¿Cómo logro asociar un tipo de archivo a mi programa desde un programa hecho en Delphi
Simplemente debes escribir las entradas apropiadas en el registro. Por ejemplo, vamos a suponer que deseas asociar la extensión '.rom' a la aplicación 'RmDesigner.exe'. Deberás crear las siguientes entradas:

Código:
HKCR\.rom
  default value = 'RmDesigner.rom'

HKCR\RmDesigner.rom
  default value = 'Rm Designer master file'

HKCR\RmDesigner.rom\shell\open\command
  default value = 'c:\archivos de programas\roman software\RmDesigner.exe "%1"'
Aquí, HKCR corresponde a HKEY_CLASSES_ROOT. Bajo esta clave se crea la clave '.rom' cuyo valor por defecto es el nombre de la clave que realmente maneja la extensión; en este caso 'RmDesigner.rom', pero puedes usar cualquier identificador que gustes.

La siguiente clave es entonces 'RmDesigner.rom' cuyo valor por defecto será la descripción que desees que aparezca en el explorador; en este caso 'Rm Designer master file'. Si no pones nada, el explorador mostrará simplemente algo como 'Archivo ROM'.

Dentro de esta clave debes crear la clave 'shell\open\command', esto es, la clave 'shell', dentro de ella la clave 'open' y dentro de ella la clave 'command'.

El valor por defecto de la clave 'command' debe contener la ruta al ejecutable; en este caso 'c:\archivos de programas\roman software\RmDesigner.exe "%1"'. El símbolo %1 será sustituído por la línea de comandos, esto es, cuando se ejecute un archivo de extensión 'rom' el explorador pasará el nombre del archivo como parámetro al ejecutable.

Te recomiendo que antes de comenzar a experimentar husmees un poco en el registro para ver cómo funciona esto que te digo para extensiones ya registradas como, por ejemplo, '.txt'. Verás que cada clave tiene otros valores pero por el momento basta con los que te indico.

Para escribir estas claves en el registro desde tu aplicación Delphi puedes usar la clase TRegistry de la unidad Registry. Te pongo aquí un pequeño ejemplo:

Código Delphi [-]
(*
  Este procedimiento registra la extensión Ext con la 
  aplicación AppPath. El parámetro TypeName denota
  la clave del registro que maneja la extensión y el
  parámetro Description corresponde a la descripción
  que se muestra en el explorador de Windows.

  El método OpenKey de TRegistry abre la clave
  especificada. Si ésta no existe la crea.

  El primer parámetro del método WriteString es el
  nombre del identificador que desea escribirse dentro
  de una clave. Si se pasa la cadena vacía, corresponde
  al valor por defecto.
*)
procedure RegisterFileExt(Ext, TypeName, Description, AppPath: String);
var
  Registry: TRegistry;

begin
  Registry := TRegistry.Create;

  try
    Registry.RootKey := HKEY_CLASSES_ROOT;

    Registry.OpenKey(Ext, true);
    Registry.WriteString('', TypeName);
    Registry.CloseKey;

    Registry.OpenKey(TypeName, true);
    Registry.WriteString('', Description);

    Registry.OpenKey('shell\open\command', true);
    Registry.WriteString('', AppPath + ' "%1"');
  finally
    Registry.Free;
  end;
end;

Así, para el ejemplo anterior usarías:

Código Delphi [-]
RegisterFileExt(
  '.rom',
  'RmDesigner.rom',
  'Rm Designer Master file',
  'c:\archivos de programas\roman software\RmDesigner.exe'
);

// Saludos

Última edición por roman fecha: 31-05-2004 a las 06:28:51.
Responder Con Cita
  #3  
Antiguo 27-12-2007
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
Hola, muy chula la explicación, si me funciona me hará un gran papel pero...
Cita:
Registry.RootKey := HKEY_CLASSES_ROOT;
Que Uses tengo que utlizar para que me reconozca HKEY_CLASSES_ROOT?? ya que ahora mismo no sabe de donde sale Delphi y yo tampoco.

Muchas gracias de antemano.
Responder Con Cita
  #4  
Antiguo 27-12-2007
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
Vale, ya lo he encontrado gracias.
Está en Windows
Responder Con Cita
  #5  
Antiguo 27-12-2007
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
Question Dudas sobre aplicaciones registradas.

Vale, otra cosa.
Bueno dos
1º Los archivos que he asociado(.fil) antes claro los editaba con un programa y este les puso su iconito to chulo...como hago yo para que ahora se les ponga mi icono?
2º El archivo bien es cierto que me reconoce mi aplicación y me la abre super bien...pero me pasan otras dos cosas:
1.- Me abre la aplicación sin cargar el archivo...con lo cual no hemos hecho
tampoco nada...
Como hago para decirle que rutina tiene que usar la aplicación cuando
se abre por la llamada de un archivo?
2.- Si ya tengo una aplicación abierta me la vuelve a abrir por cada archivo
que clickeo...
En este caso la pregunta es ¿se puede cargar sobre la misma aplicación abierta sin necesidad de que se me habra otra?
Me imagino que con la respuesta anterior se podrá solucionar esta también.
Muchas gracias por su ayuda y su atención y disculpen las molestias.
Un saludo.
Responder Con Cita
  #6  
Antiguo 27-12-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si usas el regedit de windows y vas a la clave de registro, verás como se hace lo del icono (creo tienes que escribir una clave de registro más).

1 - ¿has programado algo para que lo abra? - Revisa la ayuda de "CommandLine" de delphi.

2 - Para abrir en la misma instancia, deberás programar en tu aplicación una opción que detecte varias instancias del programa. La JVCL de delphi tiene un componente. Por código también se puede hacer, roman tiene un componente en su web (UIApp en la sección de componentes).


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 27-12-2007
Tal Tal is offline
Miembro
 
Registrado: dic 2007
Posts: 52
Poder: 17
Tal Va por buen camino
OK, muchas gracias.
Responder Con Cita
Respuesta


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:25:46.


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
Copyright 1996-2007 Club Delphi