OpenDialog, shellexecute et Word

Résolu
cs_jeffmo Messages postés 6 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 26 juillet 2007 - 28 mars 2006 à 22:14
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 - 31 mars 2006 à 20:05
Salut, je suis un peu nouveau en programmation Delphi et mon problème est le suivant:

un bouton ouvre une opendialog puis un shellexecute ouvre word qui doit
normalement ouvrir le fichier selectionné dans l'opendialog.

Seulement word me dit ne pas pouvoir ouvrir ce fichier (alors qu'il s'ouvre très bien depuis word lui-même)

voici le code que j'utilise :

ShellExecute(0,'open', 'winword.exe',
pchar(opendialog1.filename),nil, SW_normal);



est-ce un problème word ou delphi ( ou du programmeur !!) ??

merci d'avance
Jeff

6 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
30 mars 2006 à 01:17
Les guillemets sont la pour faire passer la "pilule"


Non trêve de plaisanteries si tu as un nom de fichier long (et il y a 9 chances sur 10 pour que ce soit le cas) Ex. : C:\Mon répertoire\Mes fichiers\Mon fichier texte.doc ShellExecute ne reconnaît pas les noms longs, il est resté sur le format 8.3 (Dos Win3.1 Win95) et donc deux solutions sont possibles, soit tu convertis le tout en format 8.3 ce qui donne un truc du genre : C:\Monrep~1\MesFic~1\MonFic~1.doc où tu mets le tout entre guillemets ce qui a mon avis, est plus simple et plus rapide.

Et désolé pour la bourde, effectivement il faut mettre les guillemets dans l'appel à PChar et non comme je l'avais écris avant, en dehors, ce qui est logique mais je vois que tu as corrigé cette erreur tout seul.

PS := au cas ou le format 8.3 ca veut dire 8 caractères maximum pour le nom et 3 caractères maximum pour l'éxtension.

Voilà tout est dit enfin je crois

@+
Cirec
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
31 mars 2006 à 20:05
Pourrais-tu juste cliquer sur Réponse Acceptée Stp.
Merci
@+
Cirec
3
cs_jeffmo Messages postés 6 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 26 juillet 2007
28 mars 2006 à 22:54
Ca y est !!

Je crois que j'ai trouvé ! Voilà le code que j'utilise :



ShellExecute(0,'open',pchar(opendialog1.FileName),nil ,nil, SW_normal);



et là, ça marche . ( je sais pas pourquoi, mais bon ! )

Désolé pour le dérangement et surement à très bientôt .

Jeff
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
29 mars 2006 à 03:46
Salut,
parce que l'extension est connue du système et donc Windows l'ouvre avec le logiciel approprié.

Si tu lui donne un fichier avec une extension .TXT il l'ouvrira avec le Bloc Notes.

Essaye voir comme ceci :

ShellExecute(0,'open', 'winword.exe', '"' + pchar(opendialog1.filename) + '"',nil, SW_normal);

@+
Cirec
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jeffmo Messages postés 6 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 26 juillet 2007
29 mars 2006 à 21:38
Salut,

j'ai eu une incompatibilité String et Pchar, alors j'ai modifié comme ça:

ShellExecute(0,'open', 'winword.exe', pchar('"' + opendialog1.filename + '"'),nil, SW_normal)

et la, ça marche impec !

Donc j'ai bien compris que la commande winword.exe force l'application à utiliser word, et c'est justement ce que je voulais, alors merci du coup de pouce.
Par contre, je ne vois pas à quoi servent les '"' + qui entourent l'opendialog1.filename, si je les met pas, ça marche pas !

Encore merci
A+
Jeff
0
cs_jeffmo Messages postés 6 Date d'inscription mardi 28 mars 2006 Statut Membre Dernière intervention 26 juillet 2007
30 mars 2006 à 21:48
Je vois que tu connais le sujet sur le bout des doigts.

Merci beaucoup de ces précieux renseignements, bien expliqués de manière très claire.



A+


Jeff
0
Rejoignez-nous