Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
problema al ejecutar accion al soltar archivo sobre aplicacion

amigos he probado muchas formas y no le veo la falla a mi codigo
al soltar un archivo sobre la aplicacion esta se debe ejecutar obtener ruta y ejecuta una aplicacion
la aplicacion llama a:
Código Delphi [-]
procedure TReg2infConverter.LlamarReg2inf(Hnd: THandle; const App:string; const Origen: string; const Destino: string);
var
FileName,outfile : string;
begin
FileName := Extractfilename(Opendialog1.FileName);
FileName:= AnsiReplaceStr(FileName,' ','');
outfile :=ChangeFileExt(FileName, '.inf');
   ShellExecute(Hnd,
              'OPEN',
              PChar(ExtractFileName(App)),
              PChar(Origen+' '+Destino),
              PChar(ExtractFilePath(App)),
              SW_HIDE);
                if FileExists(Opendialog1.FileName) then
              label1.Caption:='Convertido con exito!! : '+outfile
              else
   label1.Caption:='Error! No se Encuentra Archivo'
       end;

y aqui el dilema lo suelto encima se abre aplicacion y tira el mensaje Convertido con exito!! pero no hace nada, al abrir la aplicación y arrastrar un archivo encima funciona ok y es casi el mismo código.
Código Delphi [-]
procedure TReg2infConverter.FormCreate(Sender: TObject);
var
  Origen, Destino ,Filename : string;
  begin
    DragAcceptFiles(handle, true);
    OpenDialog1.FileName:= ParamStr(1);
    edit1.Text:=ParamStr(1);
    if ParamStr(1) > '' then
 begin
Filename := Extractfilename(Opendialog1.FileName);
Origen := GetshortName(Opendialog1.FileName);
Filename:= AnsiReplaceStr(Filename,' ','');
Destino :=ChangeFileExt(Filename, '.inf');
 if ExtractFileExt(ParamStr(1)) = '.reg' then
LlamarReg2inf(Handle,'REG2INF.EXE',Origen,Destino )
else
    MessageDlg('Archivo no valido!!', mterror, [mbok],0);
   end;
   end;

gracias por su tiempo!!

Última edición por jonydread fecha: 16-11-2011 a las 23:06:04.
Responder Con Cita
  #2  
Antiguo 16-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.

Creo que estas tratando de implementar el código que te sugerí aquí y te has echo una ensalada.
Si te fijas bién en el post anterior, no es en OnCreate donde se captura el nombre de archivo sino en DragDropFileMSG.

Resumiendo:
Código Delphi [-]
....
implementation

uses ShellApi,StrUtils;

function GetShortName(const FileName: String): String;
var
  ShortName: PChar;
  Size: Cardinal;
begin
  Size := GetShortPathName(PChar(FileName), nil, 0);
  if Size > 0 then
  begin
    GetMem(ShortName, Size);
    GetShortPathName(PChar(FileName), ShortName, Size);
    Result := ShortName;
    FreeMem(ShortName);
  end
  else
    Result := FileName;
end;

procedure LlamarReg2inf(Hnd: THandle; const App:string; Origen: string; Destino: string);
begin
  // En Origen dejamos el nombre corto sin espacios
  Origen:= AnsiReplaceStr(GetShortName(Origen), ' ', ''); 
  // Cambiamos la extensión para Destino 
  Destino:= ChangeFileExt(Origen, '.inf');
  // Llamamos a 'REG2INF.EXE con Origen y Destino
  ShellExecute(Hnd,  
              'OPEN',
              PChar(ExtractFileName(App)),
              PChar(Origen+' '+Destino),
              PChar(ExtractFilePath(App)),
              SW_SHOW);
end;

procedure TForm1.DragDropFileMSG(var Msg: TMessage);
var
  DragDropFileName: array[0..255] of Char;
begin
  DragQueryFile(msg.WParam, 0, DragDropFileName, Length(DragDropFileName));
  DragFinish(Msg.WParam);
  LlamarReg2inf(Handle, 'REG2INF.EXE', DragDropFileName,'')
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;
...
A fin de simplificar la explicación recorté y modifiqué un poco el código del procedimiento LlamarReg2inf.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 17-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
me sale un error en
Código Delphi [-]
  Origen:= AnsiReplaceStr(GetShortName(Origen), ' ', '');
  Destino:= ChangeFileExt(Origen, '.inf');
Responder Con Cita
  #4  
Antiguo 17-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
me sale un error en
Código Delphi [-]
  Origen:= AnsiReplaceStr(GetShortName(Origen), ' ', '');
  Destino:= ChangeFileExt(Origen, '.inf');
Es extraño, no sé como lo estés implementando... A mi me funciona perfectamente.

Para que puedas estudiar el código con tranquilidad te adjunto los fuentes. Como no tengo el archivo reg2inf.exe realizé una aplicación de consola en Delphi con igual nombre que lo único que hace es mostrar ParamStr(1) y ParamStr(2).

Pero para no adjuntarte el ejecutable desactivé la llamada a ShellExecute reemplazándola por un simple ShowMessage que muestra Origen y Destino, al ser estos correctos (sólo diferenciarse en la extensión) , si existe un error es ajeno al código.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 17-11-2011 a las 17:00:28.
Responder Con Cita
  #5  
Antiguo 17-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
esta parte bien no he tenido problemas al arrastrar el archivo sobre la aplicacion
Código Delphi [-]
procedure TForm1.DragDropFileMSG(var Msg: TMessage);
var
  DragDropFileName: array[0..255] of Char;
begin
  DragQueryFile(msg.WParam, 0, DragDropFileName, Length(DragDropFileName));
  DragFinish(Msg.WParam);
  LlamarReg2inf(Handle, 'REG2INF.EXE', DragDropFileName,'')
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True);
end;

pero si tengo miaplicacion.exe y tomo un archivo lo tiro encima se abre la aplicacion solamente no hace nada, yo tenia implementado antes y funcionaba colocando en formcreate
Responder Con Cita
  #6  
Antiguo 17-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:
pero si tengo miaplicacion.exe y tomo un archivo lo tiro encima se abre la aplicacion solamente no hace nada, yo tenia implementado antes y funcionaba colocando en formcreate
Hola.

Lo lamento, no logro entender la situación.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 17-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Lo lamento, no logro entender la situación.

Saludos.
si tomo un archivo, click derecho,enviar a : mi aplicacion no realiza ninguna accion solo abre el programa
eso quiero realizar que se abra con el archivo que envie y lo procese. tenia un hilo aca funcionaba pero ahora que agrege la funcion de llamarreg2inf ya no
AHORA TENGO PROBLEMA CON LA OTRA FORMA AL ARRASTRAR EJECUTA PERO EL ARCHIVO DE SALIDA SE CREA EN LA CARPETA DE MI APLICACION, NO DE DONDE SE TOMO EL ARCHIVO
el codigo lo vi en otra pagina
Código Delphi [-]
procedure TReg2infConverter.FormCreate(Sender: TObject);
begin
  // Registrar la aplicación 
  DragAcceptFiles(handle, true);
end;
procedure TReg2infConverter.WMDropFiles(var Msg: TMessage);
var
  nomArchivo: array [0..MAX_PATH] of char;
  tamBuffer: Integer;
  numArchivos: Integer;
  f: Integer;
  Origen, Destino ,Filename : string;
begin
  // Cuando se arrastra un archivo sobre nuestra apliación,
  // se recibe este mensaje.
  hDrop := Msg.WParam;
  numArchivos := DragQueryFile(hDrop, $FFFFFFFF, Nil, 0);
  if (numArchivos > 0) then
  begin
    for f := 0 to numArchivos -1 do
    begin
      tamBuffer := DragQueryFile(hDrop, f, nil, 0)+1;
      DragQueryFile(hDrop, f, nomArchivo, tamBuffer);
      opendialog1.FileName:=(nomArchivo);
      edit1.Text:=(nomArchivo);
       if fileExists(opendialog1.FileName) then
      begin
    if ExtractFileExt(opendialog1.FileName) = '.reg' then
    begin
Filename := Extractfilename(opendialog1.FileName);
Origen := GetshortName(opendialog1.FileName);
Filename:= AnsiReplaceStr(Filename,' ','');
Destino :=ChangeFileExt(Filename, '.inf');
 LlamarReg2inf(Handle,'reg2inf.exe',Origen,Destino );
end else
    MessageDlg('Archivo no valido!!', mterror, [mbok],0);
   end;
   end;
  end;
  end;
procedure TReg2infConverter.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  // Eliminamos el registro de nuestra ventana en el sistema
  DragFinish(hDrop);
end;

Última edición por jonydread fecha: 17-11-2011 a las 15:52:29.
Responder Con Cita
  #8  
Antiguo 17-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:
si tomo un archivo, click derecho,enviar a : mi aplicacion no realiza ninguna accion solo abre el programa eso quiero realizar que se abra con el archivo que envie y lo procese.
Hola.

Es que el código que te sugerí y adjunté funciona para la acción Drag&Drop (arrastrar/soltar).

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 17-11-2011
jonydread jonydread is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 157
Poder: 13
jonydread Va por buen camino
Thumbs up

si lo que pasa que tenia un problema con el destino me creaba el archivo en la carpeta de mi proyecto al arrastrar y soltar
hise esta ensalada jaja que por el momento ha sido la unica forma que me ha funcionado
Arrastrar/soltar y ejecutar aplicación
Código Delphi [-]
procedure TReg2infConverter.WMDropFiles(var Msg: TMessage);
var
  nomArchivo: array [0..255] of char;
  tamBuffer: Integer;
  numArchivos: Integer;
  f: Integer;
  Origen, Destino ,Filename,path : string;
begin
  // Cuando se arrastra un archivo sobre nuestra apliación,
  // se recibe este mensaje.
  hDrop := Msg.WParam;
  numArchivos := DragQueryFile(hDrop, $FFFFFFFF, Nil, 0);
  if (numArchivos > 0) then
  begin
    for f := 0 to numArchivos -1 do
    begin
      tamBuffer := DragQueryFile(hDrop, f, nil, 0)+1;
      DragQueryFile(hDrop, f, nomArchivo, tamBuffer);
      opendialog1.FileName:=(nomArchivo);
      edit1.Text:=(nomArchivo);
       if fileExists(opendialog1.FileName) then
      begin
    if ExtractFileExt(opendialog1.FileName) = '.reg' then
    begin
path:=GetshortName(ExtractFilePath(Opendialog1.FileName));
Filename := Extractfilename(opendialog1.FileName);
Origen := GetshortName(opendialog1.FileName);
Filename:= AnsiReplaceStr(Filename,' ','');
Destino :=ChangeFileExt(Filename, '.inf');

LlamarReg2inf(Handle,'reg2inf.exe',Origen,path+Destino );
end else
    MessageDlg('Archivo no valido!!', mterror, [mbok],0);
   end;
   end;
  end;
  end;
Enviar archivo a Aplicación
Código Delphi [-]
procedure TReg2infConverter.FormCreate(Sender: TObject);
var Origen, Destino,FileName,Path: string;
begin
  // Registrar la aplicación
  DragAcceptFiles(handle, true);
  if ParamStr(1) > '' then
  begin
    OpenDialog1.FileName:= ParamStr(1);
    Edit1.Text:= ParamStr(1);
    if FileExists(OpenDialog1.FileName) then
    Path:=GetshortName(ExtractFilePath(Opendialog1.FileName));
    Filename := Extractfilename(opendialog1.FileName);
    Origen := GetshortName(opendialog1.FileName);
    Filename:= AnsiReplaceStr(Filename,' ','');
    Destino :=ChangeFileExt(Filename, '.inf');

    LlamarReg2inf(Handle,'reg2inf.exe',Origen,path+Destino );
end;
end;

Gracias! por el momento todo OK!!

Última edición por jonydread fecha: 17-11-2011 a las 16:31:36.
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
Ejecutar una accion al presionar un boton Vales08 Varios 4 31-05-2011 21:48:45
Arrastrar y soltar un archivo sobre la aplicación escafandra C++ Builder 7 05-04-2008 16:30:46
Ejecutar una accion sobre DBGrid seb@ OOP 4 01-11-2006 21:00:06
ejecutar accion en un cliente fartycl Varios 4 03-10-2005 03:20:12
Ejecutar un archivo.exe desde mi aplicacion CLX ctronx Varios 13 25-01-2005 09:21:16


La franja horaria es GMT +2. Ahora son las 21:52:59.


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