Ouverture de plusieurs fichiers dans le même programme

Résolu
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 - 1 mars 2011 à 16:43
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 - 14 mars 2011 à 12:11
Bonjour,

je cherche à ouvrir plusieurs fichiers dans une même application avec la commande ShellExecute (à moins qu'il existe autre chose de mieux ?)
Je dois ouvrir entre 1 et 25 tables Mapinfo (extension .tab avec des fichiers associés), soit avec mapinfo, soit avec Quantum Gis qui appartient au monde libre. Cela dit, je pense que le problème doit être le même avec n'importe quel type de fichier ...

J'ai donc un code (provisoire pour l'instant) du type:

if ShellExecute(Handle,'Open',PChar(Programme),PChar(Table),Nil,SW_SHOWDEFAULT) <= 32 then
ShowMessage('erreur lors du chargement de la table !');

que je répète plusieurs fois. "Programme" et "Table" sont des variables qui désignent respectivement le logiciel et le fichier à ouvrir.

Le problème c'est que Windows ouvre autant de nouvelles instances du même programme qu'il y a de tables. Par exemple je ne veux pas 4 tables dans 4 Mapinfo différents mais 4 tables dans le même Mapinfo.

Si j'utilise le programme par défaut associé à l'extension, cela marche pour Mapinfo mais pas pour Quantum Gis, avec un code plus simple:

if ShellExecute(Handle,'Open',PChar(Table),Nil,Nil,SW_SHOWDEFAULT) <= 32 then
ShowMessage('erreur lors du chargement de la table !');

En plus cela ne m'arrange pas car j'aurais besoin de choisir l'application à utiliser.

J'ai également essayé de passer plusieurs noms de tables dans une même commande ShellExecute mais cela ne marche pas, même en mettant ou non des guillemets et en essayant différents séparateurs: espace, virgule, ...

Est-il possible de forcer l'ouverture de tous les fichiers dans une même instance de programme ?

merci

md21

5 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
1 mars 2011 à 17:18
Salut,

tu peux déjà ouvrir une fenêtre DOS en lançant CMD.exe puis tu tapes :
MapInfo.exe /?

MapInfo.exe /help

si le programme en est équipé tu auras une aide sur la ligne de commande ... et donc la manière de procéder pour ouvrir plusieurs map dans une instance.

sinon il y a aussi ce tutoriel (en PDF) pour piloter MapInfo depuis Delphi.


[hr]@+Cirec
[hr]
3
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
1 mars 2011 à 18:42
Salut,

les solutions (gratuites, j' accepte les dons ^^) sont ici :
Composants Cindy pour Delphi

Tu peux aussi trouver sur ce site les compos ainsi que la démo: regarde donc les derniers codes déposés.

Solution 1 - Avec Shellexecute:
Utilisation du Compo TcyAppInstanes: empêche plusieurs instances de ton prog tout en récupérant les paramêtres passés.

Solution 2 - Avec lec commandes DDE (lorsque tu double cliques sur le fichier que tu désires ouvrir sous Windows):
Utilisation du Compo TcyDDECmd: l' extension sera enregistrée avec l' information necessaire pour que les fichiers s' ouvre avec ton prog. Le compo possède un événement pour récupérer le nom de fichier à ouvrir.

A+



Composants Cindy pour Delphi
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
13 mars 2011 à 17:08
Salut md21,

merci de partager le résultat de ton moteur 3D ... et quel résultat !!! ça donne envie de voir la suite et même d'y jouer

même si ma contribution est quasi insignifiante comparé à l'ampleur du projet, je suis content d'avoir pu/su t'aider à augmenter les performances de ton moteur 3D.

J'attends avec patience impatience la suite

Mais si tu souhaites publier ton code (quand ce sera le moment) tu peux toujours prendre contacte avec moi et on essayera de trouver une solution


[hr]@+Cirec
[hr]
3
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 1
9 mars 2011 à 16:43
Bonjour,

merci à tous les deux pour vos réponses, j'ai été occupé par ailleurs qq jours c'est pourquoi je récris un peu tardivement. j'espère pouvoir m'en sortir maintenant. Je vais essayer les composents Cindy, ça a l'air bien. Je connaissais déjà le tuto sur le contrôle de Mapinfo depuis Delphi, j'avais même fait qq essais il y a un an ou deux ... le problème c'est que je dois aussi pouvoir faire la même chose avec Quantum Gis


@Cirec
merci pour ta précieuse aide l'année dernière concernant mon moteur 3D. Voici ce que je suis arrivé à faire en début d'année (pas de soucis il s'agit juste de captures d'écran sous dl.free.fr mais ça me fait plaisir de te les montrer d'autand que je ne peux pas publier la source car le projet fait déjà qq dizaines de Mo).
http://dl.free.fr/c3oLwocYx
http://dl.free.fr/pQ5UHeo6Q
http://dl.free.fr/avBJ2Woi3
En 1680 x 1050, le framerate est très très bas, mais cela s'arrange vite en diminuant la résolution, d'autand que pour l'instant je n'ai pas encore fait vraiment d'optimisation du code. Il reste encore beaucoup de travail mais je suis obstiné ...

md21
0

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

Posez votre question
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 1
14 mars 2011 à 12:11
merci Cirec,

ton post me fait vraiment très plaisir, il m'est arrivé de douter un peu ... tes encouragements me rassurent

Je suis tout à fait d'accord pour publier mon code (effectivement pour l'instant le projet n'est pas prêt), le but n'est pas de le garder pour moi mais au contraire de partager. Je compte utiliser ce moteur pour créer un jeu vidéo (freeware bien sûr), mais si d'autres personnes veulent créer leur jeu, voire même améliorer le moteur, c'est encore mieux.

La partie 3D est presque terminée, comme tu as vu, je peux intégrer des sprites avec même une gestion de la transparence qui utilise un plan alpha (cristal de quartz). Le tout est "vectorisé" et se calcule en mètres comme dans les moteurs modernes. Bien sûr ce ne sont pas de vrais modèles 3D, mais ils sont placés et calculés sur des supports vecteurs (et pas posés en vrac par dessus le décor comme les jeux de l'époque), ce qui fait que le rendu est bien meilleur.

Depuis plus d'un mois, je suis en train d'essayer de rajouter une dimension verticale, c'est à dire la possibilité d'escaliers montants ou descendants et des pièces à des niveaux et des hauteurs de plafond différentes ... beaucoup d'échecs mais je suis sur le point d'y arriver. C'est le dernier point à résoudre concernant la partie "graphique", si je n'y arrive pas, je resterai sur des niveaux "plats" mais cela vaut le coup d'essayer.

Il y aura ensuite une phase d'optimisation de cette partie 3D car je pense qu'il est possible de gagner du framerate, mon code est très certainement maladroit à bien des endroits (surtout que le but premier est déjà que tout fonctionne). J'aimerai savoir, si, dans qq mois probablement, je pouvais te contacter pour te fournir le code pour regarder comment l'optimiser, ce serait vraiment super ... dis moi sincèrement si tu serais d'accord, je ne veux pas abuser de ta gentillesse et de tes connaissances ? Mais dans tous les cas je prendrais contact avec toi pour voir comment publier le code.

Pour que le moteur soit complet et afin de pouvoir créer un jeu vidéo, il n'y a pas que la partie graphique. Je travaille également sur le tout le reste mais c'est beaucoup plus facile, donc je pense arriver à m'en sortir. L'application comporte notamment une partie "éditeur" (c'est un genre de petit autocad très simple) qui permet qui permet la création et la gestion des niveaux. Je travaille également sur l'IA des ennemis mais je n'en suis qu'à un stade de réflexion pour l'instant. Il y a aussi la partie "son" sur laquelle j'ai commencé à faire des essais ...

md21
0
Rejoignez-nous