Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 15-12-2011
Avatar de sintecsl
sintecsl sintecsl is offline
Miembro
 
Registrado: jun 2008
Ubicación: Barcelona - Spain
Posts: 40
Poder: 0
sintecsl Va por buen camino
Antes de nada agradeceros las respuestas y vuestro interés. Os comento, que en el arranque de (Create) la form realizo la creación del semáforo y verifico si existe (Last Errror).

Como de momento no tenia solución simplemente silenciaba el problema capturando el error con try except (Cuestión de estética).

Y si creo que la solución debe estar en la forma de parametrizar la línea de comandos al registrar la extenxión asociada a la aplicación.
En este caso tengo este objeto que utilizo siempre que se crea la form :

Código Delphi [-]
........

//Registramos nuestro ejecutable para asociarlo a las extensiones .PRESUPUESTO
     RegistraExtension1.RegistraExt('.PRESUPUESTO',
                       'Fichero PRESUPUESTO','PRESUPUESTOS',Application.ExeName,0);
..........

El código de la misma es el siguiente (Unidad completa) :

Código Delphi [-]

{
 Referencia rápìda :

    Extension : Extensión del fichero a asociar con el ejecutable
    Descripcion : Lo que aparece en el explorador de windos al lado como descripción
    Tipo : Identificador dentro del registro (no se debe repetir pues machaca el existente)
    Ejecutable : El fichero que ejecutara a la extensión asociada y el path completo
    IndiceIcono : El icono que se mostrará para la extensión buscando desde
                  el ejecutable (0 -> es el que tiene por defecto)
    }

unit RegistraAplicacion;
//{$R RegistraAplicacion.dcr}

interface
Uses classes, Forms;

Type

TRegistraExtension = class(TComponent)
  private
  protected
  public
     procedure RegistraExt(Extension,
                           Descripcion,
                           Tipo,
                           Ejecutable : string;
                           IndiceIcono: integer);
     procedure EliminaExt(Extension,
                          Tipo : String);
  published
end;

procedure Register;

implementation

Uses Registry, Windows, ShlObj, SysUtils;

{ TRegistraExtension }

procedure Register;
begin
  RegisterComponents('UTIL', [TRegistraExtension]);
end;

procedure TRegistraExtension.EliminaExt(Extension, Tipo: String);
Var
  Reg :TRegistry;
Begin
    Reg := TRegistry.Create;
    try
      Extension:=AnsiUpperCase(Extension); //Mayusculas
      If Pos('.',Extension)<>1 Then Extension:='.'+Extension; //Aseguramos
     If (Extension='.EXE') Or (Extension='.COM') Or
        (Pos('?',Extension)>0) Or (Pos('*',Extension)>0)
        Then Extension:=''; //Borramos prohibidos
     If (Extension='') Or (Tipo='') Then Exit; //No hay nada
     with Reg do
      Begin
     (*   RootKey := HKEY_CLASSES_ROOT;
        OpenKey(Extension, True);
        DeleteKey(Extension);
        CloseKey;
        OpenKey(Tipo, True);
        DeleteKey(Tipo);
        CloseKey;   *) //De momento no funciona
      End;
    finally
      Reg.Free;
    End
end;

procedure TRegistraExtension.RegistraExt(Extension,
                                         Descripcion,
                                         Tipo,
                                         Ejecutable : string;
                                         IndiceIcono: integer);
Var
  Reg :TRegistry;
Begin
  Reg := TRegistry.Create;
    try
      Extension:=AnsiUpperCase(Extension); //Mayusculas
      If Pos('.',Extension)<>1 Then Extension:='.'+Extension; //Aseguramos
     If (Extension='.EXE') Or (Extension='.COM') Or
        (Pos('?',Extension)>0) Or (Pos('*',Extension)>0)
        Then Extension:=''; //Borramos prohibidos
     If Extension='' Then Exit; //No hay nada
     If Descripcion='' Then //Si no hay descripción la creamos en base el EXE
        Descripcion:=ChangeFileExt(ExtractFileName(Application.ExeName),'');
     If (Ejecutable='') Or Not FileExists(Ejecutable) Then
        Ejecutable:=Application.ExeName;
     If Tipo='' Then Tipo:=Descripcion;
      with Reg do
      Begin
        RootKey := HKEY_CLASSES_ROOT;
        OpenKey(Extension, True);
        WriteString('', Tipo);  //TIPO es la llave para acceder al resto del arbol
        CloseKey;
        OpenKey(Tipo, True);
        WriteString('', Descripcion);
        CloseKey;
        OpenKey(Tipo+'\DefaultIcon', True);
        WriteString('', Ejecutable + ',' + IntToStr(IndiceIcono));
        CloseKey;
        OpenKey(Tipo+'\Shell\Open', True);
        WriteString('', '&Abrir');
        CloseKey;
        OpenKey(Tipo+'\Shell\Open\Command', True);
        WriteString('', '"' + Ejecutable + '" "%1"'); --> CREO KE AKÍ ES DONDE ESTA MAL PARAMETRIZADO
        CloseKey;
      End;
     //Nos permite actualizar las ventanas
 (*     SHChangeNotify( SHCNE_ASSOCCHANGED,
                      SHCNF_IDLIST,
                      nil, nil);         *)
    finally
      Reg.Free;
    End
End;

(*  EJEMPLO DE USO :

 Registramos nuestro ejecutable para asociarlo a las extensiones .PRESUPUESTO
     RegistraExtension('.PRESUPUESTO',
                       'Fichero PRESUPUESTO',
                       'PRESUPUESTOS',
                       Application.ExeName,
                       0);
     RegistraExtension('.PRESUPUESTO',
                       'Fichero PRESUPUESTO',
                       '',
                       '',
                       0);
*)

end.

Editaré el registro de alguna aplicación (como un editor de textos) y miraré como resuelve el tema paramétrico en Open. Seguro que ahí tendré la respuesta.

Gracias a tod@s.
__________________
www.sintecsl.es
Responder Con Cita
 



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Evento para saber cuando se fuerza el cierre de una aplicación APO OOP 1 08-12-2011 14:20:56
Como saber mediante hook cuando se abre o cierra una aplicacion JoAnCa API de Windows 2 15-11-2008 20:05:48
Internet Explorar: Saber si ha terminado de cargar WEB. Jose_Pérez Internet 3 11-09-2007 14:18:44
Saber cuando ingresan a tu PC genius Varios 4 11-12-2006 14:47:52
¿Cómo puedo saber desde mi aplicación cuándo se abre por primera vez? nuri Varios 7 21-07-2005 14:07:51


La franja horaria es GMT +2. Ahora son las 03:22:55.


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