Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con shortname (https://www.clubdelphi.com/foros/showthread.php?t=76552)

jonydread 09-11-2011 02:55:33

Problema con shortname
 
hola amigos tengo un problema con un shortname
lo que pasa que envio un archivo a un programa en cmd que no me acepta las rutas comunes
shortname me sirve pero si tengo un archivo en c:\mi archivo me da un error
este es mi codigo
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
  ShortName: array[0..255] of char;

begin
     GetShortPathName(PChar(opendialog1.FileName), @ShortName, Length(opendialog1.FileName));
       if FileExists(Opendialog1.FileName) then
        ShellExecute(Handle, 'open', 'arch.cmd', PChar(@ShortName), nil, SW_NORMAL)
        else ShowMessage('No se ha cargado Archivo');
    end;
si existe alguna otra forma de realizarlo agradeceria mucho su ayuda!
he buscado por google pero no encuentro como realizarlo
gracias!!

marcoszorrilla 09-11-2011 07:14:37

Prueba así a ver si te funciona.

Cita:

Empezado por jonydread (Mensaje 417960)
hola amigos tengo un problema con un shortname
lo que pasa que envio un archivo a un programa en cmd que no me acepta las rutas comunes
shortname me sirve pero si tengo un archivo en c:\mi archivo me da un error
este es mi codigo
Código Delphi [-]
Procedure TForm1.Button2Click(Sender: TObject);
 var   ShortName: array[0..255] of char;
 begin      GetShortPathName(PChar(opendialog1.FileName), @ShortName, Length(opendialog1.FileName));        
if FileExists(Opendialog1.FileName) then
         ShellExecute(Handle, 'open', 'arch.cmd', QuotedStr(PChar(@ShortName)), nil, SW_NORMAL)         
else
 ShowMessage('No se ha cargado Archivo');     
end;
si existe alguna otra forma de realizarlo agradeceria mucho su ayuda!
he buscado por google pero no encuentro como realizarlo
gracias!!


Un Saludo.

jonydread 09-11-2011 13:59:54

no entendi tu respuesta no existe forma de solucionar ese error??
pngo otro ejemplo
c:\doc\delphi\tmn.inf , dice no existe
c:\doc\delphi\copiadetmn.inf , lo convierte sin problemas

jonydread 09-11-2011 15:00:17

disculpa no puedo editar el mensaje de arriva
agrege
Código:

QuotedStr(PChar(@ShortName))
y dice Incompatible types: 'String' and 'PAnsiChar'
tambien trate de colocar una condicion para ejecutar shortname si hay un espacio en la ruta pero no logro concretarla
puse
Código Delphi [-]
begin
if edit1.text:=' ' then
GetShortPathName(PChar(opendialog1.FileName), @ShortName, Length(opendialog1.FileName));        
if FileExists(Opendialog1.FileName) then
         ShellExecute(Handle, 'open', 'arch.cmd', PChar(@ShortName), nil, SW_NORMAL)         
else
 ShowMessage('No se ha cargado Archivo');     
end;

muchisimas gracias por la ayuda!!

roman 09-11-2011 15:46:47

Cita:

Empezado por jonydread (Mensaje 417987)
agrege
Código:

QuotedStr(PChar(@ShortName))
y dice Incompatible types: 'String' and 'PAnsiChar'

Intenta así:

Código Delphi [-]
PChar(QuotedStr(ShortName)

// Saludos

jonydread 09-11-2011 16:14:16

ya no me sale error en el codigo pero igual no me toma el archivo
si esta
c:\doc\delphi\tmn.inf , dice no existe
c:\doc\delphi\copiadetmn.inf , lo toma sin problemas
existe algo para ejecutar shortname a partir de ciertos caracteres estoy muy complicado y no logro encontrar solucion
gracias!

roman 09-11-2011 17:28:06

Veo que, en efecto, hay algún problema cuando se usa la rutina con un nombre que de por sí es corto. Intenta con esta función:

Código Delphi [-]
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;

// Saludos

jonydread 09-11-2011 18:54:04

yap
tengo asi mi codigo
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var
    ShortName: PChar;
    Size: Cardinal;
begin
 Size := GetShortPathName(PChar(Opendialog1.FileName), nil, 0);
  if Size > 0 then
      begin
    GetMem(ShortName, Size);
    GetShortPathName(PChar(Opendialog1.FileName), ShortName, Size);
    Result := ShortName;
    FreeMem(ShortName);
  end
  else
    Result := Opendialog1.FileName;
       if FileExists(Opendialog1.FileName) then
        ShellExecute(Handle, 'open', 'D:\re2\delphi\HAND.CMD', PChar(@ShortName), nil, SW_NORMAL)
        else ShowMessage('No se ha cargado Archivo');
    end;

me da un error en esta linea
Código Delphi [-]
Result := ShortName;

roman 09-11-2011 19:32:07

Eso pasa porque estás mezclando código. La idea de la función que puse es aislar el problema de obtener el nombre corto. Prueba así:

Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
begin
  if FileExists(Opendialog1.FileName) then
    ShellExecute(Handle, 'open', 'D:\re2\delphi\HAND.CMD', PChar(GetShortName(Opendialog1.FileName)), nil, SW_NORMAL)
  else
    ShowMessage('No se ha cargado Archivo');
end;

// Saludos

jonydread 09-11-2011 19:50:32

amigo eres genial!!
funciona!!
ya tenia la cabeza quemada jajja
muchas gracias vuelvo a reiterar que es un gran foro con grandes personas!!!

jonydread 09-11-2011 20:43:23

puedo aprovechar tu ayuda
el archivo que tengo hand.cmd va a ir instalado en "archivo de programas\miproyecto"
Código Delphi [-]
D:\re2\delphi\HAND.CMD
como vinculo por ej si esta en vez de "D:\" en "C:\" o si se llama "program files" en vez de "archivo de programas"
existe la ubicacion unica de archivo de programas que es %16422% pero no me funciona

asi me funciono
Código Delphi [-]
../../reg2infconvert/HAND.CMD
gracias!


La franja horaria es GMT +2. Ahora son las 19:38:26.

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