Hola,
Siempre puedes utilizar variables:
Código Delphi
[-]
var
rutaArchivo: string;
begin
rutaArchivo := 'C:\unarchivo.txt';
ShellExecute(MiForm.Handle, 'open', PChar(rutaArchivo),nil,nil,SW_SHOWNORMAL);
end;
Ahora tienes que investigar sobre el uso de un "TOpenDialog", pero, en definitiva, ya sabes que puedes guardar la elección del usuario en la variable "rutaArchivo", por ponerte un ejemplo, de modo que luego puedas usarla en la función "ShellExecute".
Una posible forma de hacerlo:
Código Delphi
[-]
begin
with TOpenDialog.Create(Self) do
begin
if Execute then
begin
ShellExecute(Self.Handle, 'open', PChar(FileName), nil, nil, SW_SHOWNORMAL);
end;
Free;
end;
Otra posible forma:
Código Delphi
[-]
var
dlg: TOpenDialog;
begin
dlg := TOpenDialog.Create(Self);
try
if dlg.Execute then
ShellExecute(Self.Handle, 'open',
PChar(dlg.FileName), nil, nil, SW_SHOWNORMAL);
finally
dlg.Free;
end;
end;
Y aún otra más:
Código Delphi
[-]
begin
if OpenDialog1.Execute then
begin
ShellExecute(Self.Handle, 'open',
PChar(OpenDialog1.FileName), nil, nil, SW_SHOWNORMAL);
end;
end;