Hola ohcan!
He revisado tú código y encontré un problema.
Si utilizas la función ExtractFilePath() ésta te elimina de la ruta el último nivel del directorio, de tal forma que cuando concatenas con DisplayName la cadena queda incompleta.
Bueno mi sugerencia es la siguiente, sólo hice algunos cambios menores.
Código Delphi
[-]
procedure TForm1.ShellListViewClick(Sender: TObject);
var
Ruta:string;
Foto:TPicture;
begin
if ShellListView.SelectedFolder<>nil then
Ruta := IncludeTrailingPathDelimiter(ShellListView.RootFolder.PathName) +
ShellListView.SelectedFolder.DisplayName
else
Exit;
if(UpperCase(ExtractFileExt(Ruta))='.GIF') or
(UpperCase(ExtractFileExt(Ruta))='.BMP') or
(UpperCase(ExtractFileExt(Ruta))='.JPG')then
begin
Foto := TPicture.Create;
Foto.LoadFromFile(Ruta);
Imagen.Picture := Foto;
Foto.Free;
end
else
Imagen.Picture:=nil; end;
Seguimos en contacto, un saludo.