JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Regrouper les applications par genre (bureau Windows) Lun 23 Nov 2009 - 18:21 | |
| A la demande générale de cosmos70, voici un premier jet de l'adaptation de mon programme de menus sous Panoramic. BUT: réduire la multiplication des icônes sur le bureau de Windows, en regroupant les programmes par type d'application sous une seule icône: Pour la facilité, j'ai regroupé pour ma part les données sous un répertoire commun C:\Menus. Dans ce répertoire figurent: - le programme exécutable ProgMenu.exe, qui est appelé pour chaque menu. - les menus eux-mêmes, un par type d'application. Ce sont des fichiers .txt, qui contiennent pour chaque application le titre, le commentaire, le chemin de l'exécutable, et des infos optionnelles (doc...) Voici par exemple ce qui s'affiche si on clique sur le menu Photos: (la hauteur du Memo 0 est calculée en fonction du nombre d'articles, l'affichage se faisant sur 2 colonnes). Et voici le début du fichier MenuPhot.txt correspondant: - Code:
-
* - PROGRAMMES PHOTO - * ==================== * Par programme (séparés par une ligne vide): * T: Nom du programme * C: Commentaire * P: Adresse d'exécution du programme * R: Répertoire de travail (si différent) * H: Fichier de documentation éventuel
T: PhotoFiltre C: Retouche photo P: C:\Progra~1\PhotoFiltre\PhotoFiltre.exe
T: IrfanView C: Traitements photo P: C:\Progra~1\IrfanView\i_view32.exe H: C:\Textes\Irfanv.txt
T: Photoscape C: Traitements photo (planches ...) P: C:\Progra~1\PhotoScape\PhotoScape.exe
T: ImpPhot C: Impression de planches photos P: C:\LANGAGES\FreeBasic\SOURCES\Impphot.exe
etc... Remarque 1: les lignes vides et les lignes précédées d'un astérisque (commentaires) sont ignorées par le programme. Remarque 2: la commande EXECUTE de Panoramic ne supporte pas les espaces dans un chemin d'exécutable. Il faut donc remplacer les noms de dossier comportant des espaces par leur équivalent court (msdos) Par exemple: C:\Program Files\IrfanView\... doit être remplacé par C:\Progra~1\IrfanVierw\... (j'ai envisagé un sous-programme de conversion automatique, mais c'est un peu compliqué...) Remarque 3: le programme ne contient pas (encore) le choix du fichier source à charger au lancement dans le cas des langages de programmation. Sur le bureau windows il faut donc créer une application par type, avec son icône: - clic droit sur un endroit vide du bureau, puis 'Nouveau', 'Raccourci' - Emplacement de l'élément: donner le chemin de l'exécutable suivi du nom du fichier menu correspondant au type. Dans mon cas, pour le menu photos par exemple: 'C:\Menus\ProgMenu.exe MenuPhot' (suffixe .txt optionnel). - Nom: choisir un nom pour ce raccourci. - Après validation, clic droit sur cette nouvelle icône, 'Propriétés', bouton 'Changer d'icône', donner le chemin de l'icône désirée (on en trouve partout). Voici le source du programme, qu'il faut évidemment compiler, et mettre l'exécutable dans le dossier des menus. - Code:
-
' ProgMenu.bas DIM RepMenu$, fm$, ftmp$, tit$, a$, r$, ex$, arg$, p$ DIM nf, nl, nbprog, c, i, j, nobj, maxv, nmaxi, nbder DIM lobj, hobj, x, y, x1, x2, y1, na, be, bl, bn, jclic nmaxi = 20 DIM Titre$(20), Prog$(20), Comm$(20), Rept$(20), Doc$(20) DIM Info1$(20), Info2(20), Info3(20): ' lignes complémentaires éventuelles DIM lignf(20)
LABEL Rebouc, fcl, Rebc, Fin, Exec, Editm, DerProg, choix, retour
RepMenu$ = "C:\Menus\" ftmp$ = "C:\Temp\Dir.tmp"
IF PARAM_NUMBER = 0 THEN TERMINATE ELSE fm$ = PARAM_VALUE$(1) IF INSTR(fm$, "\") = 0 THEN fm$ = RepMenu$ + fm$ IF INSTR(fm$, ".") = 0 THEN fm$ = fm$ + ".txt" nf = 2*nmaxi + 10 FILE_OPEN_READ nf, fm$ nl = 0 FILE_READLN nf, tit$: nl = nl + 1 IF LEFT$(tit$, 1) = "*" THEN tit$ = LTRIM$(MID$(tit$, 2, LEN(tit$)-1)) nbprog = 0
Rebouc: IF FILE_EOF(nf) > 0 THEN GOTO fcl FILE_READLN nf, a$: a$ = TRIM$(a$): nl = nl + 1 IF a$ = "" OR LEFT$(a$, 1) = "*" THEN GOTO Rebouc c = ASC(UPPER$(LEFT$(a$, 1))): a$ = TRIM$(MID$(a$, 3, LEN(a$)-2)) SELECT c CASE 84: ' T Titre (case asc("T") ne marche pas... nbprog = nbprog + 1 lignf(nbprog) = nl Titre$(nbprog) = a$ CASE 67: ' C Commentaire Comm$(nbprog) = a$ CASE 80: ' P Programme exécutable Prog$(nbprog) = a$ IF Rept$(nbprog) = "" FOR i = LEN(Prog$(nbprog)) TO 1 STEP -1 IF MID$(Prog$(nbprog), i, 1) = "\" THEN EXIT_FOR NEXT i Rept$(nbprog) = LEFT$(Prog$(nbprog), i-1) END_IF CASE 82: ' R Répertoire de travail éventuel, ou répertoire des sources Rept$(nbprog) = a$ CASE 72: ' H Fichier d'aide éventuel Doc$(nbprog) = a$ END_SELECT GOTO Rebouc
fcl: FILE_CLOSE nf maxv = 1 + INT((nbprog+1)/2): IF FRAC((nbprog+1)/2) > 0 THEN maxv = maxv + 1
lobj = 180: hobj = 40: x1 = 5: x2 = x1 + lobj + 10 y1 = 5 x = x1: y = y1 WIDTH 0, lobj*2+40: HEIGHT 0, (maxv-1)*(hobj+5)+70 CAPTION 0, tit$ COLOR 0, 0, 255, 255: ' cyan clair Rebc: FOR j = 1 TO nbprog IF j = maxv THEN x = x2: y = y1 BUTTON j: TOP j, y: LEFT j, x: WIDTH j, lobj: HEIGHT j, hobj/2 FONT_BOLD j: CAPTION j, Titre$(j) ON_CLICK j, Exec na = j+nmaxi LIST na: TOP na, y+hobj/2: LEFT na,x: WIDTH na, lobj: HEIGHT na, hobj/2 ITEM_ADD na, Comm$(j): INACTIVE na y = y + hobj + 5 NEXT j be = j+1: BUTTON be: HEIGHT be, 20: WIDTH be, lobj/2 TOP be, (maxv-1)*(hobj+5)+10: LEFT be, x1+2*lobj/3+10 FONT_BOLD be: CAPTION be, "Edit Menu" ON_CLICK be, Editm END
Fin: TERMINATE
Exec: FOR jclic = 1 TO nbprog IF CLICKED(jclic) = 1 THEN EXIT_FOR NEXT jclic FOR i = 1 TO nbprog: INACTIVE i: NEXT i: INACTIVE be IF jclic<= nbprog FOR i = LEN(Prog$(jclic)) TO 1 STEP -1 IF MID$(Prog$(jclic), i, 1) = "\" THEN EXIT_FOR NEXT i r$ = LEFT$(Prog$(jclic), i - 1) ex$ = MID$(Prog$(jclic), i + 1, LEN(Prog$(jclic)) - i) arg$ = "" IF UPPER$(RIGHT$(fm$, 12)) = "MENUPROG.TXT" AND Rept$(jclic) <> "" GOSUB DerProg END_IF DIR_CHANGE r$ ex$ = r$ + "\" + ex$: ' programme cible IF arg$ <> "" THEN ex$ = ex$ + " " + arg$ EXECUTE ex$ TERMINATE END_IF RETURN
Editm: EXECUTE "Notepad.exe " + fm$ RETURN
DerProg: IF FILE_EXISTS(ftmp$) = 1 THEN FILE_DELETE ftmp$ nbder = 10: ' nombre de sources présentés EXECUTE "Command.com /c DIR " + Rept$(jclic) + " /O:-D /B >" + ftmp$ WHILE FILE_EXISTS(ftmp$) = 0: END_WHILE WAIT 500 arg$ = "" FILE_OPEN_READ nf, ftmp$ IF FILE_EOF(nf) = 0 bl = be+1 LIST bl: TOP bl, 10: LEFT bl, 50: WIDTH bl, 280: HEIGHT bl, 200 COLOR bl, 255, 255, 180 FONT_BOLD bl ' Affichage des (nbder) sources les plus récents (ordre chrono inverse) ITEM_ADD bl, "*** Derniers sources "+ Titre$(jclic) + " ***" ITEM_ADD bl, "": c = 1 WHILE FILE_EOF(nf) = 0 FILE_READLN nf, a$ ITEM_ADD bl, a$: c = c + 1: IF c > nbder THEN EXIT_WHILE END_WHILE ON_CLICK bl, choix bn = bl+1 BUTTON bn: TOP bn, 180: LEFT bn, 150: CAPTION bn, "Nouveau" ON_CLICK bn, retour END choix: IF ITEM_INDEX(bl) = 1 OR ITEM_INDEX(bl) = 2 THEN GOTO retour arg$ = ITEM_INDEX$(bl) FOR i = LEN(Rept$(jclic)) TO 1 STEP -1 IF MID$(Rept$(jclic), i, 1) = "\" THEN EXIT_FOR NEXT i arg$ = LEFT$(Rept$(jclic), i) + arg$ END_IF FILE_CLOSE nf FILE_DELETE ftmp$ retour: RETURN
Dernière édition par JL35 le Mar 24 Nov 2009 - 23:29, édité 2 fois | |
|
Invité Invité
| Sujet: Re: Regrouper les applications par genre (bureau Windows) Mar 24 Nov 2009 - 0:27 | |
| Je te remercie pour le code que tu fais pour moi. D'abord, c'est un peu présomptueux de croire qu'à moi tout seul, je suis une demande générale. J'avais trouvé ton programme pas mal, et je pensais qu'il pouvait intéresser quelqu'un. Pour ma part j'avais déjà codé quelques chose de similaire, mais en beaucoup moins bien en justbasic (c'était surtout pour essayer la fonction run de ce logiciel). Malheureusement je n'arrive pas à trouver du temps en ce moment. Mais dès que cela est possible, j'essaye ton programme, et je pense que je l'adopterais. Maintenant j'ai entendu: "JACK A DIT : AU LIT !!!" Bonne nuit |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Regrouper les applications par genre (bureau Windows) Mar 24 Nov 2009 - 13:35 | |
| A ta disposition pour les précisions éventuelles. Chez moi il est installé et fonctionnel depuis longtemps, dans sa version d'origine.
Je suis en train de rajouter quelques fonctionnalités, par exemple: - un bouton pour éditer le fichier Menu appelé (ça c'est fait et ça marche). - dans le cas du menu programmation, le choix entre les derniers sources en date correspondant au langage appelé. Mais j'ai quelques difficultés: les fonctions Panoramic ne permettent pas de connaître la date des fichiers, et j'ai quelques problèmes à utiliser le 'DIR /O:-D...' de msdos (tri par ordre chronologique inverse) avec la fonction EXECUTE. C'est à l'étude.
Bon, j'ai mis à jour le code ci-dessus. Principales modifs: - l'ajout du bouton pour éditer le fichier texte menu correspondant. - dans le cas du menu Programmation, sur clic d'un langage la présentation des 10 derniers sources enregistrés correspondants, pour choix du chargement d'un source avec le langage, ou 'Nouveau'. Le chemin des sources est indiqué à la rubrique R: du fichier menu. A savoir que ce chemin ne doit pas comporter d'espaces, ni de noms de répertoires supérieurs à 8 caractères. Il faut donc utiliser le chemin 'court' msdos, genre: C:\Progra~1\... à cause des contraintes du DIR. J'ai envisagé un sous-programme de conversion automatique, mais ça n'a pas l'air d'être simple... | |
|