Mario .. quello che indichi tu come "voluto" è un comportamento di Explorer ... mica del "kernel" ...
Devi aprire anche tu la finestrella delle applicazioni associate.
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
ws := UTF8Decode(AURL);
Result := ShellExecuteW(0, 'open', PWideChar(ws), nil, nil, SW_SHOWNORMAL) > 32;
end
else
begin
ans := Utf8ToAnsi(AURL); // utf8 must be converted to Windows Ansi-codepage
Result := ShellExecute(0, 'open', PAnsiChar(ans), nil, nil, SW_SHOWNORMAL) > 32;
end;
Questo è il pezzo di codice che apre il documento tramite la shell.
Info sull'api di window.
http://msdn.microsoft.com/en-us/library/windows/desktop/bb762153%28v=vs.85%29.aspx
Stilgar
edit:
Sarebbe da indagare nella direzione:
SE_ERR_ASSOCINCOMPLETE
Ora ho capito.
Dunque se lavori sotto windows (e solo li) puoi usare una funzione tipo questa:
Procedure TForm1.Apri_File(Const Nome_File : String);
Var
Proc : TProcess;
begin
If Not OpenDocument(Nome_File) Then
Begin
Proc := TProcess.Create(nil);
Proc.CommandLine := 'cmd.exe /C start '+Nome_File;
Proc.Execute;
Proc.Free;
end;
end;
praticamente tenta di aprire il documento con l'applicativo standard, se non ci riesce richiama il dialogo "Apri Con...." di sistema utilizzzando la una chiamata a shell dos.
Ovviamente la dicitura "cmd.exe /C start" è valida solamente per windows e significa:
cmd.exe - richiama la shell DOS standard -
/C - il comando sarà un comando standard (come dir, echo, etc...)
start - è è il comando vero e proprio che richiama il sottoservizio di windows