Cita:
Empezado por duilioisola
Prueba con esto:
ShellExecute(Application.Handle, '' {'open'}, PChar(Archivo), nil, PChar(ExtractFilePath(Archivo)), SW_SHOW);
Código Delphi [-]]procedure TDMMain.AbrirArchivo(Archivo: string); var Resultado : word; begin // Se utiliza cadena vacía en vez de 'open' porque algunas aplicaciones no tienen esta accion. Resultado := ShellExecute(Application.Handle, '' {'open'}, PChar(Archivo), nil, PChar(ExtractFilePath(Archivo)), SW_SHOW); case Resultado of 0: ShowMessage(_('El sistema operativo no tiene memoria o recursos suficiente.')); // The operating system is out of memory or resources ERROR_BAD_FORMAT {11}: ShowMessage(_('El archivo EXE es inválido.')); // The .EXE file is invalid (non-Win32 .EXE or error in .EXE image) SE_ERR_ACCESSDENIED{5}: ShowMessage(_('El sistema operativo denego el acceso al archivo especificado.')); // The operating system denied access to the specified file SE_ERR_ASSOCINCOMPLETE{27}: ShowMessage(_('El archivo asociado es incompatible o inválido.')); //The filename association is incomplete or invalid SE_ERR_DDEBUSY{30}: ShowMessage(_('La transacción DDE no pudo completarse porque otra transaccion DDE estaba siendo procesada.')); // The DDE transaction could not be completed because other DDE transactions were being processed SE_ERR_DDEFAIL{29}: ShowMessage(_('La transacción DDE falló.')); // The DDE transaction failed SE_ERR_DDETIMEOUT{28}: ShowMessage(_('La transacción DDE no pudo completarse porque ha expirado.')); // The DDE transaction could not be completed because the request timed out SE_ERR_DLLNOTFOUND{32}: ShowMessage(_('La librería dinamica especificada no se ha encontrado.')); // The specified dynamic-link library was not found SE_ERR_FNF{2}: ShowMessage(_('El archivo no ha sido encontrado.')); //The specified file was not found SE_ERR_NOASSOC{31}: ShowMessage(_('No hay ninguna aplicación asociada con la extensión del archivo dado.')); // There is no application associated with the given filename extension SE_ERR_OOM{8}: ShowMessage(_('No ha habido memoria suficiente para completar la operación.')); // There was not enough memory to complete the operation SE_ERR_PNF{3}: ShowMessage(_('No se ha encontrado la carpeta especificada.')); // The specified path was not found SE_ERR_SHARE{26}: ShowMessage(_('Error de permisos.')); // A sharing violation occurred end; end;
|
Honestamente, me rindo voy a volver al Delphi 7 a ver que onda,
Cambio el codigo una y mil veces, todo parece ok, guardo el projecto y al compilarlo errrror. y cuando pasa y lo compila, directamente no ejecuta nada.
El problema es que yo necesito la funcion esa del ShellExecute (la que vos me dijiste yo tengo la comun)
Dentro de un procedure
Código Delphi
[-]TForm1.Label1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Directorio1\ejecutable1.exe', nil, nil, SW_SHOWNORMAL)
end;
si pongo el PWideChar me dije que el ejecutable1.exe esta sin declarar, para que no me tire error lo hago de este modo :
Código Delphi
[-]
ShellExecute(Application.Handle, '' , PWideChar('ejecutable1.exe'), nil, PwideChar(ExtractFilePath('Directorio1\')), SW_SHOWNORMAL);
y no ejecuta nada, si le saco a PWideChar('ejecutable1.exe') y pongo PWideChar(ejecutable1.exe) ya se arma la decima guerra mundial de las alertas en Delphi jejeje (perdon pero es asi hay que afrontar la realidad)
Punto y aparte te paso parte del codigo para que me recomiendes que hacer, y ya no te molesto mas ya tiro el projecto a la basura y listo :
---------------------------------------------------------------------------------------------------------------------
Código Delphi
[-]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ShellApi, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Label1Click(Sender: TObject);
procedure Label1MouseEnter(Sender: TObject);
procedure Label1MouseLeave(Sender: TObject);
procedure Label2Click(Sender: TObject);
procedure Label2MouseEnter(Sender: TObject);
procedure Label2MouseLeave(Sender: TObject);
procedure Label3Click(Sender: TObject);
procedure Label3MouseEnter(Sender: TObject);
procedure Label3MouseLeave(Sender: TObject);
procedure Label4Click(Sender: TObject);
procedure Label4MouseEnter(Sender: TObject);
procedure Label4MouseLeave(Sender: TObject);
procedure Label5Click(Sender: TObject);
procedure Label5MouseEnter(Sender: TObject);
procedure Label5MouseLeave(Sender: TObject);
procedure Label6Click(Sender: TObject);
procedure Label6MouseEnter(Sender: TObject);
procedure Label6MouseLeave(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.Label1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Directorio1l\Archivo1.exe', nil, nil, SW_SHOWNORMAL)
end;
procedure TForm1.Label1MouseEnter(Sender: TObject);
begin
Label1.Font.Color:=clBlack;
end;
procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
Label1.Font.Color:=clWhite;
end;
procedure TForm1.Label2Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Directorio2l\Archivo2.exe', nil, nil, SW_SHOWNORMAL)
end;
procedure TForm1.Label2MouseEnter(Sender: TObject);
begin
Label2.Font.Color:=clBlack;
end;
procedure TForm1.Label2MouseLeave(Sender: TObject);
begin
Label2.Font.Color:=clWhite;
end;
procedure TForm1.Label3Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Directorio3l\Archivo3.exe', nil, nil, SW_SHOWNORMAL)
end;
procedure TForm1.Label3MouseEnter(Sender: TObject);
begin
Label3.Font.Color:=clBlack;
end;
procedure TForm1.Label3MouseLeave(Sender: TObject);
begin
label3.Font.Color:=clWhite;
end;
procedure TForm1.Label4Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Directorio4l\Archivo4.exe', nil, nil, SW_SHOWNORMAL)
end;
procedure TForm1.Label4MouseEnter(Sender: TObject);
begin
Label4.Font.Color:=clBlack;
end;
procedure TForm1.Label4MouseLeave(Sender: TObject);
begin
Label4.Font.Color:=clWhite;
end;
procedure TForm1.Label5Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'Directorio5\Archivo5.exe', nil, nil, SW_SHOWNORMAL)
end;
procedure TForm1.Label5MouseEnter(Sender: TObject);
begin
Label5.Font.Color:=clBlack;
end;
procedure TForm1.Label5MouseLeave(Sender: TObject);
begin
Label5.Font.Color:=clWhite;
end;
procedure TForm1.Label6Click(Sender: TObject);
begin
Label5.Font.Color:=clBlack;
end;
procedure TForm1.Label6MouseEnter(Sender: TObject);
begin
Label5.Font.Color:=clWhite;
end;
procedure TForm1.Label6MouseLeave(Sender: TObject);
begin
Application.Terminate;
end;
end.
El resto esta vinculado a un menu, con textos el cual al pasar, o presionar cambian de color y la funcion llamar que es la que me jode.
Tengo un amigo que es un genio, maneja varios lenguajes de programacion, incluido NET Framework, C++, y no se cuantos mas.
Y tengo otro amigo que directamente programa en Assembler... (si yo me complico la vida con una tonteria como esta imaginate ellos)
Logicamente trabajan para empresas en Europa y estan fulltime, ni modo.
Si me podes dar una ultima ayuda te agradeceria y si no, no me quedara mas remedio que instalar el viejo y querido Delphi 7.
Sea como sea muchisimas gracias.