Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Código Delphi [-]
 
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
begin
        if paramcount <> 0 then
        Memo1.Lines.LoadFromFile(paramstr(1));
end;
end.

paramstr(0) es el nombre del .exe

en el momento de registrar la extension a windows, escoges tu programa, siempre que no lo hagas mediante codigo.

saludos.
Responder Con Cita
  #2  
Antiguo 02-07-2008
Dean Dean is offline
Miembro
 
Registrado: jun 2008
Posts: 33
Poder: 0
Dean Va por buen camino
Talking

ok gracias parece que debi probar con el paramstr desde el principio pero no pense que fuera tan facil
Responder Con Cita
  #3  
Antiguo 02-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
jej personalmente encuentro mas divertido primero probar y luego preguntar (aunque a veces te la pegas ) saludos y de nada
Responder Con Cita
  #4  
Antiguo 02-07-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Bueno, apuntar una aclaración. Lo que tu quieres hacer requiere haber registrado previamente, de alguna forma, el tipo de archivo. luego, usar los parémetros de la línea de comandos, como apunta coso,

En Builder C++ sería algo así:

Código:
// Siendo LoadFile la función que abre el fichero
if(ParamCount()>0){
     LoadFile(ParamStr(1)); // Abre la cadena del primer parámetro pasado 
}
El Evento OnActivate puede resultar peligroso si se ejecuta por segunda ves desde que se abrió la aplicación. Para evitar que se te vuelva a abrir el archivo deberás detectar que sólo es una vez.

Usa una variable static de la función que al cambiar de valor te indica que ya no es la primera ejecución.

En algun caso puedes tener conflictos con ventanas que no se han creado y cuyo código no puede ejecutarse hasta que se existan visualmente. En este caso un truco es usar un TTimmer que se desactiva sólo (sólo ocurrirá una vez).

Mira este código. Cada vez que clickes en Form1 se ejecutará el evento OnActivate otra vez... Es un ejemplo que demuestra que no es un evento seguro a no ser que firtremos la primera vez que se ejecuta.

Código:
void __fastcall TForm1::FormActivate(TObject *Sender)
{
      static int n=0;
      Label1->Caption = IntToStr(n);
      n++;
      Form2->Show();
}
Con este otro puedes ver como un Timer puede ser la solución
Código:
void __fastcall TForm1::TimerCreateTimer(TObject *Sender)
{
   TimerCreate->Enabled = false;
   AfterCreate(); // Función que seguro se ejectua tras crear visualmente la ventana
}
Saludos.
Responder Con Cita
  #5  
Antiguo 26-02-2011
rogeliogamberro rogeliogamberro is offline
Miembro
 
Registrado: oct 2008
Posts: 23
Poder: 0
rogeliogamberro Va por buen camino
Unhappy

Intente agregar a un nuevo proyecto el codigo de c publicado

Código:
#include <Registry.hpp>
#include <shlobj.h>

void
RegisterFileType(AnsiString Ext, AnsiString PathExec)
{
  // Ext tipo de archivo : EXTENSION
  // PathExec: RUTA COMPLETA del ejecutable que queremos que lo abra

  TRegistry *Registry = new TRegistry;
  try{
    Registry->RootKey = HKEY_CLASSES_ROOT;
    // Crear la clave .Ext
    Registry->OpenKey("." + Ext, true);
    try{
      // Ccrear el valor con el nombre del tipo de archivo para esta clave (extfile)
      Registry->WriteString("", Ext + "file");
    }
    __finally{
      Registry->CloseKey();
    }
    // Crear una clave nueva para el nombre del tipo de archivo dado anteriormente (extfile)
    Registry->CreateKey(Ext + "file");
    // Crear una nueva clave para el icono por defecto
    Registry->OpenKey(Ext + "file\\DefaultIcon", true);
    // Crear un valor con el icono (PathExec.exe,0)
    try{
      Registry->WriteString("", PathExec + ",0");
    }
    __finally{
      Registry->CloseKey();
    }
    Registry->OpenKey(Ext + "file\\shell\\open\\command", true);
    //Crear el valor para el ejecutable que abre el tipo de archivo (PathExec.exe "%1")
    try{
      Registry->WriteString("", PathExec + " \"%1\"");
    }
    __finally{
      Registry->CloseKey();
    }
  }
  __finally{
    delete Registry;
  }
  // Notificar al sistema el cambio efectuado
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
}
Agregue la declaracion de la rutina en el .h y ohhh sorpresa... Me da 4 errores...

Código:
[C++ Error] shlobj.h(1762): E2238 Multiple declaration for 'FVSHOWINFO'
[C++ Error] shlobj.h(1936): E2238 Multiple declaration for 'FOLDERSETTINGS'
[C++ Error] shlobj.h(3717): E2238 Multiple declaration for 'DESKBANDINFO'
[C++ Error] shlobj.h(4808): E2238 Multiple declaration for 'SHELLFLAGSTATE'
los cuales hacen referencia a las siguientes estructuras en el archivo shlobj.h

Código:
shlobj.h

// --------------------------------------------------------------------

typedef struct
{
    // Stuff passed into viewer (in)
    DWORD cbSize;           // Size of structure for future expansion...
    HWND hwndOwner;         // who is the owner window.
    int iShow;              // The show command

    // Passed in and updated  (in/Out)
    DWORD dwFlags;          // flags
    RECT rect;              // Where to create the window may have defaults
    IUnknown *punkRel;      // Relese this interface when window is visible

    // Stuff that might be returned from viewer (out)
    OLECHAR strNewFile[MAX_PATH];   // New File to view.

} FVSHOWINFO, *LPFVSHOWINFO;

// --------------------------------------------------------------------
typedef struct
    {
    UINT ViewMode;       // View mode (FOLDERVIEWMODE values)
    UINT fFlags;         // View options (FOLDERFLAGS bits)
    } FOLDERSETTINGS, *LPFOLDERSETTINGS;

// --------------------------------------------------------------------

typedef struct {
    DWORD       dwMask;
    POINTL      ptMinSize;
    POINTL      ptMaxSize;
    POINTL      ptIntegral;
    POINTL      ptActual;
    WCHAR       wszTitle[256];
    DWORD       dwModeFlags;
    COLORREF    crBkgnd;
} DESKBANDINFO;

// --------------------------------------------------------------------
typedef struct {
    BOOL fShowAllObjects : 1;
    BOOL fShowExtensions : 1;
    BOOL fNoConfirmRecycle : 1;
    BOOL fShowSysFiles : 1;
    BOOL fShowCompColor : 1;
    BOOL fDoubleClickInWebView : 1;
    BOOL fDesktopHTML : 1;
    BOOL fWin95Classic : 1;
    BOOL fDontPrettyPath : 1;
    BOOL fShowAttribCol : 1;
    BOOL fMapNetDrvBtn : 1;
    BOOL fShowInfoTip : 1;
    BOOL fHideIcons : 1;
    UINT fRestFlags : 3;
} SHELLFLAGSTATE, * LPSHELLFLAGSTATE;
Por favor... Alguien me podria ayudar a solucionarlo?? Muchas gracias!!

PD: utilizo Borland C++ Builder 5
Responder Con Cita
  #6  
Antiguo 28-02-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para compilarlo con BCB5 tendrás que añadir lo siguiente al principio de tu archivo cpp:

Código:
#define ShlObjHPP
#include <vcl.h>
#pragma hdrstop
 
#include <shlobj.h>
#include <Registry.hpp>
.

Saludos.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problemas para abrir archivo EXCEL marceloalegre Varios 1 18-09-2007 19:40:39
como puedo hacer para cambiar un archivo de excel con versión 2.1 a versión 8.0 RONPABLO Servers 4 23-01-2006 06:02:38
abrir un html con ie dandole el path completo !! Velia Varios 3 12-11-2005 23:04:45
Como abrir un archivo .EXE? Albano Varios 4 29-05-2005 14:37:43
¿Qué instrucción es necesaria para abrir un archivo PDF? vhirginia Varios 10 07-05-2004 00:05:36


La franja horaria es GMT +2. Ahora son las 04:35:06.


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