Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2007
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Como abrir un archivo con mi aplicacion. (parametros de ejectutable)

Buenas tardes amigos,.
Lo que pretendo es agregarle a cada archivo en el menu contextual ,
"abrir con" mi programa, , eso ya se como se hace,
pero en mi programa tiene que recibir los parametros,
para cuando se ejecute, abra efectivamente el archivo que lo llamo y lo cargue.

Mi programa recibe un archivo jpg, ,,,como hago para pasarle el parametro que lo llamo?
es decir, si la foto1.jpg, lo llamo, entonces, mi programa deberia cargar la foto1 al iniciarse...,,,,,,
Alguien sabe como se puede hacer esto???
Muchas Gracias!
Responder Con Cita
  #2  
Antiguo 16-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Si hablamos de Delphi puedes contar con algunas variables, donde recibes siempre la información que se pasa al programa por la línea de comandos, al ser ejecutado.

Si no recuerdo mal tenemos "ParamsCount", que te indica el número de parámetros que se han pasado a tu ejecutable. Y luego contamos con la función "ParamStr", que, pasándole el índice de un parámetro, te retorna su valor.

En "ParamStr(0)" siempre, y digo, siempre, tendrás la ruta completa de tu ejecutable. Y, a partir de ahí... el resto de parámetros. Por ejemplo:

Código:
start C:\miprograma.exe "C:\archivo.jpg"
Suponiendo esa línea de comandos, "miprograma.exe" recibiría dos parámetros, empezando a contar desde cero, el primero, "C:\miprograma.exe", y, el segundo, "C:\archivo.jpg", y así sucesivamente.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 16-11-2007
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Aplica esto si le dan doble click a un archivo jpg?
Como consulto ParamStr?
podrias mostrarme un ejemplo sencillo?

Muchas Gracias!
Responder Con Cita
  #4  
Antiguo 16-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Al abrir el ejecutable como tu dices, es como si hicieras esto, por ejemplo:

Cita:
MiEjecutables.Exe C:\MiImagen.JPG
En ese orden de ideas vemos como la ruta de la imagen esta siendo entregada como parametro, entonces...

La función ParamStr te devuelve ese valor si le pasas como parametro el 1 , asi por ejemplo:
Código Delphi [-]
var
  RutaDeImagen :String;
begin
  RutaDeImagen := ParamStr(1);
end;

En la ayuda de delphi encontraras la información necesaria sobre dicha función .

La función ParamStr te devuelve ese valor si le pasas como parametro el 1 , asi por ejemplo:
Código Delphi [-]
var
  RutaDeImagen :String;
begin
  RutaDeImagen := ParamStr(1);
end;

En la ayuda de delphi encontraras la información necesaria sobre dicha función .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 16-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
, Veo que dec y JuanErasmo estan conectados con el foro el dia de hoy .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 16-11-2007
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Muchas Gracias!

Muchas Gracias, Dec, y muchas Gracias Jhony!
Efectivamente asi lo hice!

Saludos desde Medellin johny! Gracias!
Responder Con Cita
  #7  
Antiguo 16-11-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por JuanErasmo Ver Mensaje
Muchas Gracias, Dec, y muchas Gracias Jhony!
Efectivamente asi lo hice!

Saludos desde Medellin johny! Gracias!
Pues que bueno .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
Antiguo 10-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
necesito realizar lo mismo con un archivo reg al colocar abrir con mi.exe tome la ruta en mi edit.text o el opendialog
probe el codigo que dejaron ay pero no me funciono que hago mal??
Código Delphi [-]
procedure TReg2infConverter.FormCreate(Sender: TObject);
var
  Ruta :String;
  begin
    Ruta := ParamStr(1);
end;
gracias!
Responder Con Cita
  #9  
Antiguo 10-11-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Ese código no abre nada, solo te permite saber el primer parámetro con el que se ha abierto tu programa. A partir de ese dato tu programa debe saber que hacer, es decir, tu sabrás que es lo que pretendes realizar con ese parámetro.

Saludos.
Responder Con Cita
  #10  
Antiguo 10-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Ese código no abre nada, solo te permite saber el primer parámetro con el que se ha abierto tu programa. A partir de ese dato tu programa debe saber que hacer, es decir, tu sabrás que es lo que pretendes realizar con ese parámetro.

Saludos.
si necesito que cuando de click derecho sobre un archivo .reg el usuario y seleccione
abrir con>mi aplicacion
el programa se abra y cargue el archivo
ya que abre pero no carga el archivo quisiera saber como tomar la ruta
he revisado en el foro y en google salen con paramstr pero no he encontrado ningun ejemplo claro

Gracias de antemano!!
Responder Con Cita
  #11  
Antiguo 10-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jonydread Ver Mensaje
si necesito que cuando de click derecho sobre un archivo .reg el usuario y seleccione
abrir con>mi aplicacion el programa se abra y cargue el archivo
Hola.

Te pongo un ejemplo muy simple. Sólo agregá un memo al form y el siguiente código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  try
    Memo1.Lines.LoadFromFile(ParamStr(1));
  except
    raise Exception.Create('No se puede abrir el archivo');
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #12  
Antiguo 10-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
se puede hacer que carge al opendialog donde puse // he intentado pero no lo logro

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  try
    // (ParamStr(1));
  except
    raise Exception.Create('No se puede abrir el archivo');
  end;
end;
Responder Con Cita
  #13  
Antiguo 10-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  if ParamStr(1) > '' then
  begin
    OpenDialog1.FileName:= ParamStr(1);
    OpenDialog1.Execute;
  end;
end;
Pero no veo la necesidad de llamar TOpenDialog si ya se está enviando el nombre de archivo en ParamStr(1)...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 11-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
lo que pasa es que tengo todo referenciado a opendialog
un genio amigo !!
asi quedo mi codigo
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
  if ParamStr(1) > '' then
  begin
    OpenDialog1.FileName:= ParamStr(1);
    edit1.Text:=ParamStr(1);
    end
muchas gracias!!
Responder Con Cita
  #15  
Antiguo 11-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jonydread.

Se me ocurrió algo que quizá te pueda interesar incluir.
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
     procedure DragDropFileMSG(var Msg : TMessage); message WM_DROPFILES;
  public
  end;

var
  Form1: TForm1;

implementation 

uses ShellApi;

procedure TForm1.DragDropFileMSG(var Msg: TMessage);
var
  DragDropFileName: array[0..255] of Char;
begin
  DragQueryFile(msg.WParam, 0, DragDropFileName, Length(DragDropFileName));
  DragFinish(Msg.WParam);
  OpenDialog1.FileName:= DragDropFileName;
  Edit1.Text:= DragDropFileName;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;
...
Estando abierta tu aplicación y el explorador de windows simultaneamente, seleccioná un archivo desde el último, arrastralo y soltalo sobre el form de tu aplicación.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 12-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
muchas gracias amigo funcionando !!
al arrastrar un archivo a mi aplicacion he hecho que se inicie automaticamente el proceso y estoy tratando de implementar un dialogo final Completado!! y al presionar ok se cierre pero no me funciona muy bien en esta parte tengo el error
hasta ay todo bien
Código Delphi [-]
if ExtractFileExt(nomArchivo) = '.reg' then
    ShellExecute(Handle, 'open', 'HAND.CMD', PChar(GetShortName(Opendialog1.FileName)), nil, SW_NORMAL)
     else if MessageDlg('Archivo invalido!', MtInformation, [mbOK],0) = mrok then
      Application.Terminate;
       end;
Aca el problema en esta linea no se la forma correcta de hacerla
if ShellExecute(Handle, 'open', 'HAND.CMD', PChar(GetShortName(Opendialog1.FileName)), nil, SW_NORMAL)
Código Delphi [-]
if ExtractFileExt(nomArchivo) = '.reg' then
begin
  if  ShellExecute(Handle, 'open', 'HAND.CMD', PChar(GetShortName(Opendialog1.FileName)), nil, SW_NORMAL) 
then begin
if MessageDlg('Completado!', MtInformation, [mbOK],0) = mrok then
      Application.Terminate;
    end else if MessageDlg('Archivo invalido!', MtInformation, [mbOK],0) = mrok then
      Application.Terminate;
       end;
end;

gracias!!
Responder Con Cita
  #17  
Antiguo 12-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Si queres evaluar el resultado de ShellExecute podrías hacer algo como:
Código Delphi [-]
...
var
  HINSTANCE: Integer;
  ErrorMSG: string;
begin
  OpenDialog1.Filter:= 'Archivos de registro|*.REG';
  with OpenDialog1 do
    if Execute then
    begin
      HINSTANCE:= ShellExecute(Handle,  'open', 'C:\HAND.CMD', PChar(GetShortName(FileName)), nil, SW_NORMAL);
      if HINSTANCE < 32 then
      begin
        case HINSTANCE of
          0: ErrorMSG:= 'Memoria o recursos insuficientes';
          ERROR_FILE_NOT_FOUND: ErrorMSG:= 'Archivo no encontrado';
          ERROR_PATH_NOT_FOUND: ErrorMSG:= 'Ruta no encontrada';
          SE_ERR_ACCESSDENIED:  ErrorMSGr:= 'Acceso denegado';
          //...
        end;
        MessageBox(Handle, PChar(ErrorMSG), 'ERROR', MB_ICONERROR + MB_OK);
        Application.Terminate;
       end;
    end;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 12-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
muchas gracias me sirve el codigo pero solo quisiera saber si se ejecuto shellexecute
asi esta el codigo mas completo
en esta linea tengo si el archivo no corresponde todo funciona ok y quisiera hacer lo mismo si se ejecuta shellexecute un dialogo, aceptar y cierre...
Código Delphi [-]
      if MessageDlg('Archivo invalido!', MtInformation, [mbOK],0) = mrok then
      Application.Terminate;
Código Delphi [-]
 if ParamStr(1) > '' then
  begin
    OpenDialog1.FileName:= ParamStr(1);
    edit1.Text:=ParamStr(1);
    if ParamStr(1) > '' then
begin
 if ExtractFileExt(ParamStr(1)) = '.reg' then
    ShellExecute(Handle, 'open', 'HAND.CMD', PChar(GetShortName(Opendialog1.FileName)), nil, SW_NORMAL)
      else
      if MessageDlg('Archivo invalido!', MtInformation, [mbOK],0) = mrok then
      Application.Terminate;
       end;
   end;
muchas gracias
Responder Con Cita
  #19  
Antiguo 12-11-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jonydread Ver Mensaje
solo quisiera saber si se ejecuto shellexecute
Eso exáctamente hace el código que te puse anteriormente. Guarda en la variable HINSTANCE el resultado de la acción de ShellExecute y si hubo un error (el resultado es menor que 32) lo muestra.

Lo único que habría que hacer es agregarlo:
Código Delphi [-]
var
  HINSTANCE: Integer;
  ErrorMSG: string;
begin
  if ParamStr(1) > '' then
  begin
    OpenDialog1.FileName:= ParamStr(1);
    edit1.Text:=ParamStr(1);
    if ParamStr(1) > '' then
  begin
  if ExtractFileExt(ParamStr(1)) = '.reg' then
  begin
    HINSTANCE:= ShellExecute(Handle,  'open', 'C:\HAND.CMD', PChar(GetShortName(FileName)), nil, SW_NORMAL);
    if HINSTANCE < 32 then
    begin
      case HINSTANCE of
        0: ErrorMSG:= 'Memoria o recursos insuficientes';
        ERROR_FILE_NOT_FOUND: ErrorMSG:= 'Archivo no encontrado';
        ERROR_PATH_NOT_FOUND: ErrorMSG:= 'Ruta no encontrada';
        SE_ERR_ACCESSDENIED:  ErrorMSGr:= 'Acceso denegado';
        //...
     end;
     MessageDlg('Error: '+ErrorMSG, mtError, [mbOK],0);
     Application.Terminate;
  end
  ...

Pero no le encuentro sentido a estas líneas:
Código Delphi [-]
 
  if MessageDlg('Archivo invalido!', MtInformation, [mbOK],0) = mrok then
    Application.Terminate;
El usuario recibe el mensaje 'Archivo inválido', no tiene otra opción que aceptar con el botón OK y luego de eso se termina la aplicación. Es decir no tiene sentido evaluar una condición de la que ya sabemos la respuesta...

O directamente hacemos:
Código Delphi [-]
  MessageDlg('Archivo invalido!', mtError, [mbOK],0);
  Application.Terminate;

O si queremos la opinión del usuario:
Código Delphi [-]
 
  if MessageDlg('¿ Desea finalizar ?', mtConfirmation, [mbYes,mbNo],0) = mrYes then
    Application.Terminate;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 12-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Ok tienes razon gracias probare y comento como me fue...
Responder Con Cita
Respuesta



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
Error de parametros al intentar abrir un archivo Word ilichhernandez OOP 7 20-05-2007 21:31:02
Abrir cualquier tipo de archivo desde mi aplicación Albano Varios 3 06-10-2006 20:48:31
como abrir un archivo ? martita Varios 2 09-08-2005 00:38:34
Como abrir un archivo .EXE? Albano Varios 4 29-05-2005 14:37:43
abrir archivo web desde aplicacion vetustas Internet 5 16-12-2003 00:02:48


La franja horaria es GMT +2. Ahora son las 06:24:16.


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