Ver Mensaje Individual
  #8  
Antiguo 25-05-2023
RubenXE RubenXE is offline
Registrado
 
Registrado: may 2023
Posts: 5
Reputación: 0
RubenXE Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
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, '' {'open'},  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
    { Private declarations }
  public
    { Public declarations }
  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.

Última edición por Casimiro Notevi fecha: 25-05-2023 a las 09:46:56.
Responder Con Cita