JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Lanceur de tâches (bis) Dim 18 Aoû 2013 - 15:11 | |
| J'avais proposé dans 'Présentation et bavardages' un petit lanceur de tâches freeware que j'avais trouvé bien sympathique et pratique: exego. Ça m'a donné envie de faire la même chose, mais en Panoramic, de façon que chacun puisse adapter le programme à ses besoins et ses envies. Côté visuel j'ai copié sur le précédent, donc l'aspect est très semblable. Il n'y a peut-être pas toutes les fonctionnalités du précédent, mais il me semble que c'est déjà suffisant, et de plus rien n'empêche de rajouter ce qu'on veut, ayant le source à disposition. Ça donne ceci: Tous les paramètres (groupes de tâches, et tâches par groupe) sont contenus dans un seul fichier texte: Fictach.txt, le plus fastidieux étant le garnissage initial de ce fichier, voir l'Aide pour l'utilisation. Chaque tâche peut avoir sa propre icône (sinon un simple carré est affiché), l'affichage de cette icône étant un peu délicat, j'ai sous-traité la conversion à IrfanView en attendant de maîtriser les fonctions adéquates de KGF.dll. Voici donc: - Code:
-
' Lanceur de tâches LABEL Quit, Clicpic, Clicout, Aftach, Afcase, Surveil, Proprietes, Annul, Recfic LABEL Lirfic, Ecrfic, Valider, Valgrou, Micone, Copicol, Copicols, Extract, Edf LABEL Savrest, Help DIM f$, rta$, fta$, sta$, wl%, wc%, hl%, x%, y%, c%, r%, nc%, nr%, ntm%, ntg% DIM rico$, out$, a$, b$, scl$, i%, j%, k%, ru%, rup%, nt%, sru%, snt%, res%, kgf$ DIM w0%, h0%, hto%, iv$
' ========================= CHEMINS A AJUSTER ================================ rta$ = "C:\LANCEUR": ' Répertoire contenant les données du programme kgf$ = "C:\PANORAMIC\KLAUS\DLLs\KGF.dll": ' Chemin de KGF.dll iv$ = "C:\Progra~2\Irfanv~1\i_view32.exe ": ' Chemin de IrfanView ' ========================== CHEMINS RÉSULTANTS =============================== fta$ = rta$ + "\Fictach.txt": ' Fichier des tâches, groupées par rubriques sta$ = rta$ + "\Fictach.sav": ' Sauvegarde du fichier ci-dessus rico$ = rta$ + "\ICONES": ' répertoire de stockage des icônes spécifiques ' ============================================================================== nc% = 4: nr% = 5: ntm% = nc%*nr%: ' nb colonnes, nb rangées, nb maxi tâches wl% = 120: ' largeur colonne gauche (rubriques) wc% = 80: ' dimensions des cases tâches (carrées, WxH) hl% = 20: ' hauteur d'une case rubrique, à gauche hto% = nr%*wc%: ' hauteur totale zone des tâches ntg% = INT(hto%/hl%): ' nombre total de groupes (défini par la hauteur totale) DIM rub$(ntg%) DIM ta$(ntg%,ntm%), ic$(ntg%,ntm%), nm$(ntg%,ntm%), rp$(ntg%,ntm%),ico$,nom$,rep$
w0% = wl% + wc%*nc% + 16 h0% = ntg% * hl% + 54 WIDTH 0,w0%: HEIGHT 0,h0%: BORDER_SMALL 0: CAPTION 0," Lanceur de tâches" COLOR 0,160,190,220 PICTURE 1: FULL_SPACE 1: HEIGHT 1,HEIGHT(1)-20: ON_CLICK 1,Clicpic COLOR 1,240,240,240: PRINT_TARGET_IS 1 FONT_NAME 1,"Calibri": FONT_SIZE 1,10: FONT_BOLD 1 2D_TARGET_IS 1: 2D_PEN_COLOR 128,128,128
2D_LINE wl%,0,wl%,HEIGHT(1) FOR x% = wl%+wc% TO WIDTH(1)-10 STEP wc% 2D_LINE x%,0,x%,HEIGHT(1) NEXT x% FOR y% = wc% TO HEIGHT(1) STEP wc% 2D_LINE wl%,y%,WIDTH(1),y% NEXT y%
FOR y% = hl% TO HEIGHT(1) STEP hl% 2D_LINE 0,y%,wl%,y% NEXT y% GOSUB Lirfic: ' lire le fichier des tâches dans les tableaux rup% = -1 FORM 10: TOP 10,150: LEFT 10,0: WIDTH 10,WIDTH(0): HEIGHT 10,185: HIDE 10 BORDER_SMALL 10: CAPTION 10, "Propriétés du raccourci" : COLOR 10,128,255,255 ALPHA 11: PARENT 11,10: TOP 11,10: LEFT 11,5: CAPTION 11,"Application" EDIT 12: PARENT 12,10: TOP 12,TOP(11)-3: LEFT 12,100: WIDTH 12,330 ALPHA 13: PARENT 13,10: TOP 13,TOP(11)+25: LEFT 13,5: CAPTION 13,"Icône" EDIT 14: PARENT 14,10: TOP 14,TOP(13)-3: LEFT 14,LEFT(12): WIDTH 14,WIDTH(12)-20 ON_CLICK 14,Micone ALPHA 15: PARENT 15,10: TOP 15,TOP(13)+25: LEFT 15,5: CAPTION 15,"Démarrer en" EDIT 16: PARENT 16,10: TOP 16,TOP(15)-3: LEFT 16,LEFT(12): WIDTH 16,WIDTH(12) ALPHA 17: PARENT 17,10: TOP 17,TOP(15)+25: LEFT 17,5: CAPTION 17,"Nom du raccourci" EDIT 18: PARENT 18,10: TOP 18,TOP(17)-3: LEFT 18,LEFT(12): WIDTH 18,WIDTH(12) BUTTON 19: PARENT 19,10: TOP 19,TOP(18)+30: LEFT 19,350: CAPTION 19,"Annuler" ON_CLICK 19, Annul BUTTON 20: PARENT 20,10: TOP 20,TOP(19): LEFT 20,LEFT(19)-80: CAPTION 20,"Valider" BUTTON 21: PARENT 21,10: TOP 21,TOP(12)-2: WIDTH 21,25: LEFT 21,LEFT(12)-28 BUTTON 22: PARENT 22,10: TOP 22,TOP(14)-2: WIDTH 22,25: LEFT 22,LEFT(21) ON_CLICK 20, Valider FOR i% = 21 TO 22: FONT_BOLD i%: CAPTION i%,"...": ON_CLICK i%, Recfic: NEXT i% BUTTON 25: PARENT 25,10: TOP 25,TOP(22): WIDTH 25,27: LEFT 25,WIDTH(10)-44 CAPTION 25,"Extr.": ON_CLICK 25,Extract BUTTON 31: PARENT 31,10: TOP 31,TOP(19): LEFT 31,5: HEIGHT 31,18: CAPTION 31,"Copier" BUTTON 32: PARENT 32,10: TOP 32,TOP(31)+18: LEFT 32,LEFT(31): HEIGHT 32,18 CAPTION 32,"Coller" BUTTON 33: PARENT 33,10: TOP 33,TOP(31): LEFT 33,LEFT(31)+80: HEIGHT 33,18 CAPTION 33,"Insérer" BUTTON 34: PARENT 34,10: TOP 34,TOP(32): LEFT 34,LEFT(33): HEIGHT 34,18 CAPTION 34,"Supprimer" FOR i% = 31 TO 34: ON_CLICK i%, Copicol: NEXT i%
FORM 40: TOP 40,150: LEFT 40,0: WIDTH 40,WIDTH(0): HEIGHT 40,110: HIDE 40 BORDER_SMALL 40: CAPTION 40,"Propriétés du groupe": COLOR 40,128,255,255 ALPHA 41: PARENT 41,40: TOP 41,10: LEFT 41,5: CAPTION 41,"Nom du groupe" EDIT 42: PARENT 42,40: TOP 42,TOP(41)-3: LEFT 42,100: WIDTH 42,330 BUTTON 49: PARENT 49,40: TOP 49,45: LEFT 49,350: CAPTION 49,"Annuler" ON_CLICK 49, Annul BUTTON 50: PARENT 50,40: TOP 50,TOP(49): LEFT 50,LEFT(49)-80: CAPTION 50,"Valider" ON_CLICK 50, Valgrou BUTTON 51: PARENT 51,40: TOP 51,40: LEFT 51,5: HEIGHT 51,18: CAPTION 51,"Copier" BUTTON 52: PARENT 52,40: TOP 52,TOP(51)+18: LEFT 52,LEFT(51): HEIGHT 52,18 CAPTION 52,"Coller" BUTTON 53: PARENT 53,40: TOP 53,TOP(51): LEFT 53,LEFT(51)+80: HEIGHT 53,18 CAPTION 53,"Insérer" BUTTON 54: PARENT 54,40: TOP 54,TOP(52): LEFT 54,LEFT(53): HEIGHT 54,18 CAPTION 54,"Supprimer" FOR i% = 51 TO 54: ON_CLICK i%, Copicol: NEXT i%
BUTTON 60: HEIGHT 60,19: TOP 60,TOP(1)+HEIGHT(1): LEFT 60,2: CAPTION 60,"Edit fichier" WIDTH 60,60: ON_CLICK 60, Edf BUTTON 61: HEIGHT 61,19: TOP 61,TOP(60): LEFT 61,65: CAPTION 61,"Sauveg. fichier" WIDTH 61,80: ON_CLICK 61, Savrest BUTTON 62: HEIGHT 62,19: TOP 62,TOP(60): LEFT 62,150: CAPTION 62,"Restore fichier" WIDTH 62,80: ON_CLICK 62, Savrest BUTTON 63: HEIGHT 63,HEIGHT(60): TOP 63,TOP(60): LEFT 63,235: CAPTION 63,"Aide" WIDTH 63,50: ON_CLICK 63, Help BUTTON 64: HEIGHT 64,HEIGHT(60): TOP 64,TOP(60): WIDTH 64,50: LEFT 64,WIDTH(0)-68 CAPTION 64,"Quitter": ON_CLICK 64, Quit
MEMO 96: WIDTH 96,400: HIDE 96 IMAGE 97 OPEN_DIALOG 98
' ======================= CRÉATION DES STRUCTURES MANQUANTES =================== IF DIR_EXISTS(rta$) = 0 THEN DIR_MAKE rta$ IF DIR_EXISTS(rico$) = 0 THEN DIR_MAKE rico$ ' ===== Fichier texte des groupes de tâches/tâches IF FILE_EXISTS(fta$) = 0 ' fichier initial, vide FILE_OPEN_WRITE 1,fta$ FILE_WRITELN 1, "***** Fichier des tâches à lancer": ' en-tête FILE_WRITELN 1, "***** Lignes R: rubriques" FILE_WRITELN 1, "***** Lignes T: tâches, I: icônes, N: légendes, D: répertoire de travail" FOR j% = 1 TO ntg% FILE_WRITELN 1,"* "+STRING$(70,"=") FILE_WRITELN 1,"R: " + rub$(ru%) FILE_WRITELN 1, "* " + STRING$(70,"=") FOR i% = 1 TO ntm% FILE_WRITELN 1, "T: " FILE_WRITELN 1, "I: " FILE_WRITELN 1, "N: " FILE_WRITELN 1, "D: " FILE_WRITELN 1, "*" NEXT i% NEXT j% FILE_CLOSE 1 END_IF ' ==============================================================================
DLL_ON kgf$ TIMER 99: TIMER_INTERVAL 99,300: ON_TIMER 99,Surveil ' ============================================================================== END: ' E N D ' ============================================================================== Quit: TERMINATE ' ============================================================================== Clicpic: TIMER_OFF 99 HIDE 10 x% = MOUSE_X_LEFT_DOWN(1): y% = MOUSE_Y_LEFT_DOWN(1) IF x% < wl% ' clic à gauche (rubriques) ru% = 1 + INT(y%/hl%): ' rubrique cliquée FONT_SIZE 1,10 IF rup% <> -1 y% = 1+(rup%-1)*hl% 2D_FILL_COLOR 240,240,240: 2D_PEN_COLOR 240,240,240 2D_RECTANGLE 0,y%,wl%-1,y%+hl%-2 PRINT_LOCATE 2,y%+3: PRINT rub$(rup%) END_IF y% = 1+(ru%-1)*hl% 2D_FILL_COLOR 255,164,255: 2D_PEN_COLOR 255,164,255 2D_RECTANGLE 0,y%,wl%-1,y%+hl%-2: ' coloration rubrique cliquée PRINT_LOCATE 2,y%+3: PRINT rub$(ru%) GOSUB Aftach rup% = ru% ELSE ' clic gauche sur un module cases de droite: ' lancement de l'application c% = INT((x%-wl%)/wc%): r% = INT(y%/wc%): ' colonne et rangée cliqués nt% = 1 + nc%*r% + c%: ' n° de tâche a$ = ta$(ru%,nt%) IF a$ = "" THEN GOTO Proprietes: ' clic sur une case vide IF rp$(ru%,nt%) <> "" THEN DIR_CHANGE rp$(ru%,nt%): ' répertoire de travail EXECUTE a$: TERMINATE END_IF Clicout: TIMER_ON 99 RETURN ' ============================================================================== Aftach: ' Affichage des tâches de la rubrique ru% ' 1) nettoyage des cases 2D_PEN_COLOR 255,255,200: 2D_FILl_COLOR 240,240,240 2D_RECTANGLE wl%+1,0,WIDTH(1),HEIGHT(1) 2D_PEN_COLOR 128,128,128 FOR x% = wl%+wc% TO WIDTH(1)-10 STEP wc% 2D_LINE x%,0,x%,HEIGHT(1) NEXT x% FOR y% = wc% TO HEIGHT(1)-10 STEP wc% 2D_LINE wl%,y%,WIDTH(1),y% NEXT y% ' 2) affichage des tâches FONT_SIZE 1,8: 2D_FILL_COLOR 240,240,240 FOR nt% = 1 TO ntm% IF ta$(ru%,nt%) <> "" THEN GOSUB Afcase NEXT nt% RETURN ' ============================================================================== Afcase: ' affichage de la case correspondant à la tâche n° nt% de la rubrique ru% FONT_SIZE 1,8: 2D_FILL_COLOR 240,240,240 ico$ = ic$(ru%,nt%): nom$ = nm$(ru%,nt%) r% = INT((nt%-1)/nc%): c% = nt%-nc%*r%-1: ' rangée et colonne (0 à n) x% = wl%+wc%*c%: y% = wc%*r%: ' coordonnées de la case (haut gauche) 2D_PEN_COLOR 240,240,240: 2D_FILL_COLOR 240,240,240 2D_RECTANGLE x%+1,y%+1,x%+wc%-1,y%+wc%-1: ' nettoyage de la case j% = TEXT_WIDTH(nom$,1) IF j% > wc% a$ = "" FOR i% = LEN(nom$) TO 1 STEP -1 IF MID$(nom$, i%, 1)=" " THEN a$=MID$(nom$,i%+1,50): nom$=LEFT$(nom$,i%-1): EXIT_FOR NEXT i% j% = TEXT_WIDTH(nom$,1): PRINT_LOCATE x%+(wc%-j%)/2,y%+wc%-30: PRINT nom$ j% = TEXT_WIDTH(a$,1): PRINT_LOCATE x%+(wc%-j%)/2,y%+wc%-18: PRINT a$ ELSE PRINT_LOCATE x%+(wc%-j%)/2,y%+wc%-25: PRINT nom$: ' centré END_IF a$ = UPPER$(RIGHT$(ico$,3)) IF a$ = "ICO" OR a$ = "BMP" OR a$ = "JPG" OR a$ = "PNG" ' res% = DLL_CALL1("LoadAnyImageFile",ADR(ico$)): ' -> clipboard ' res% = DLL_CALL2("ResizePicture",32,32): ' resize en 32x32 EXECUTE_WAIT iv$ + ico$ + " /resize=(32,32) /clipcopy /killmesoftly" CLIPBOARD_PASTE 97: 2D_IMAGE_PASTE 97,x%+24,y%+10 ELSE 2d_Pen_Color 128,128,128 2d_Fill_Color 255,255,200: 2d_Rectangle x%+24,y%+10,x%+56,y%+42: ' icône 32x32 2d_Fill_Color 240,240,240 END_IF RETURN ' ============================================================================== Surveil: ' Surveillance du clic droit sur une case (propriétés ou ajout) IF MOUSE_RIGHT_DOWN(1) = 0 THEN RETURN HIDE 10 x% = MOUSE_X_RIGHT_DOWN(1): IF x% = 0 THEN RETURN: ' pas de clic droit y% = MOUSE_Y_RIGHT_DOWN(1) TIMER_OFF 99 IF x% < wl% ' clic droit dans la liste des rubriques ru% = 1 + INT(y%/hl%): ' rubrique cliquée FONT_SIZE 1,10 IF rup% <> -1 y% = 1+(rup%-1)*hl%: ' restore la rubrique précédente 2D_FILL_COLOR 240,240,240: 2D_PEN_COLOR 240,240,240 2D_RECTANGLE 0,y%,wl%-1,y%+hl%-2 PRINT_LOCATE 2,y%+3: PRINT rub$(rup%) END_IF y% = 1+(ru%-1)*hl% 2D_FILL_COLOR 255,164,255: 2D_PEN_COLOR 255,164,255 2D_RECTANGLE 0,y%,wl%-1,y%+hl%-2 TEXT 42, rub$(ru%) IF rub$(ru%) <> "" PRINT_LOCATE 2,y%+3: PRINT rub$(ru%) GOSUB Aftach END_IF rup% = ru% CAPTION 40,"Propriétés du groupe : " + rub$(ru%) SHOW 40 RETURN END_IF ' ici, clic droit dans les cases de tâches c% = INT((x%-wl%)/wc%): r% = INT(y%/wc%): ' colonne et rangée cliqués nt% = 1 + nc%*r% + c%: ' n° de tâche
Proprietes: ' affichage des caractéristiques de la case a$ = "Groupe: " + rub$(ru%)+", Raccourci Col= "+STR$(c%+1)+" Rang= "+STR$(r%+1) a$ = a$ + " Tâche n° " + STR$(nt%)+" '"+nm$(ru%,nt%)+"'" CAPTION 10, a$ a$ = ta$(ru%,nt%) IF a$ = "": ' case vide ico$ = "": nom$ = "": rep$ = "" ELSE ico$ = ic$(ru%,nt%) nom$ = nm$(ru%,nt%): rep$ = rp$(ru%,nt%) END_IF TEXT 12, a$: TEXT 14, ico$: TEXT 16, rep$: TEXT 18, nom$ HIDE 25: IF UPPER$(RIGHT$(ico$,4))<>".ICO" THEN SHOW 25 SHOW 10: TO_FOREGROUND 10 RETURN ' ============================================================================== Annul: HIDE 10: HIDE 40
TIMER_ON 99 RETURN ' ============================================================================== Recfic: i% = NUMBER_CLICK f$ = FILE_NAME$(98): IF LEN(f$) < 4 THEN RETURN IF i% = 21 TEXT 12, f$ ELSE TEXT 14, f$ END_IF RETURN ' ============================================================================== Lirfic: ' Lecture du fichier des tâches dans les tableaux ru% = 0 FILE_OPEN_READ 1, fta$ WHILE FILE_EOF(1) = 0 FILE_READLN 1, a$ IF a$ <> "" AND LEN(a$) > 1 AND LEFT$(a$, 1) <> "*" IF LEFT$(a$, 2) = "R:": ' c'est une rubrique a$ = TRIM$(MID$(a$,3,LEN(a$)-2)) ru% = ru% + 1: rub$(ru%) = a$ nt% = 0 ELSE IF LEFT$(a$,2) = "T:": ' c'est une tâche nt% = nt% + 1 ta$(ru%,nt%) = TRIM$(MID$(a$,3,LEN(a$)-2)) ELSE IF LEFT$(a$,2) = "I:": ' icône de la tâche ic$(ru%,nt%) = TRIM$(MID$(a$,3,LEN(a$)-2)) ELSE IF LEFT$(a$,2) = "N:": ' nom de la tâche nm$(ru%,nt%) = TRIM$(MID$(a$,3,LEN(a$)-2)) ELSE IF LEFT$(a$,2) = "D:": ' répertoire de lancement rp$(ru%,nt%) = TRIM$(MID$(a$,3,LEN(a$)-2)) END_IF END_IF END_IF END_IF END_IF END_IF END_WHILE FILE_CLOSE 1 ' affichage de la liste des groupes de tâches à gauche 2D_PEN_COLOR 240,240,240: 2D_FILL_COLOR 240,240,240 FOR y% = 0 TO HEIGHT(1) STEP hl%: ' nettoyage à gauche 2D_RECTANGLE 0,y%+1,wl%-1,y%+hl% NEXT y% FONT_NAME 1,"Calibri": FONT_SIZE 1,10: FONT_BOLD 1 y% = 3 FOR ru% = 1 TO ntg% PRINT_LOCATE 2,y%: PRINT rub$(ru%): y% = y% + hl% NEXT ru% RETURN ' ============================================================================== Ecrfic: ' Réécriture des tableaux dans le fichier des tâches sru% = ru%: snt% = nt% FILE_OPEN_WRITE 1, fta$ FILE_WRITELN 1, "***** Fichier des tâches à lancer": ' en-tête FILE_WRITELN 1, "***** Lignes R: rubriques" FILE_WRITELN 1, "***** Lignes T: tâches, I: icônes, N: légendes, D: répertoire de travail" FOR ru% = 1 TO ntg% FILE_WRITELN 1, "* " + STRING$(70,"=") FILE_WRITELN 1,"R: " + rub$(ru%) FILE_WRITELN 1, "* " + STRING$(70,"=") FOR nt% = 1 TO ntm% FILE_WRITELN 1, "T: "+ta$(ru%,nt%) FILE_WRITELN 1, "I: "+ic$(ru%,nt%) FILE_WRITELN 1, "N: "+nm$(ru%,nt%) FILE_WRITELN 1, "D: "+rp$(ru%,nt%) FILE_WRITELN 1, "*" NEXT nt% NEXT ru% FILE_CLOSE 1 GOSUB Lirfic: ' rafraîchissement de l'affichage (groupes de tâches) ru% = sru%: nt% = snt% y% = 1+(ru%-1)*hl% 2D_FILL_COLOR 255,164,255: 2D_PEN_COLOR 255,164,255 2D_RECTANGLE 0,y%,wl%-1,y%+hl%-2: ' coloration rubrique cliquée PRINT_LOCATE 2,y%+3: PRINT rub$(ru%) RETURN ' ============================================================================== Valider: ta$(ru%,nt%) = TEXT$(12) a$ = TEXT$(14): IF LEFT$(a$,13)="%SystemDrive%" THEN a$="C:"+MID$(a$,14,100) ic$(ru%,nt%) = a$ rp$(ru%,nt%) = TEXT$(16): nm$(ru%,nt%) = TEXT$(18) IF TEXT$(12) <> "" GOSUB Afcase END_IF GOSUB Ecrfic: ' réécriture de l'ensemble des tableaux dans le fichier HIDE 10 TIMER_ON 99 RETURN ' ============================================================================== Valgrou: rub$(ru%) = TEXT$(42) GOSUB Ecrfic: ' réécriture de l'ensemble des tableaux dans le fichier HIDE 40 TIMER_ON 99 RETURN ' ============================================================================== Micone: IF TEXT$(14) = "" AND TEXT$(12) <> "" THEN TEXT 14, TEXT$(12): SHOW 25 RETURN ' ============================================================================== Copicol: i% = NUMBER_CLICK IF i% > 34 ' Action sur un groupe de tâches donné SELECT i% CASE 51: ' copier l'ensemble du groupe dans le clipboard a$ = "R: "+rub$(ru%) FOR i% = 1 TO ntm% a$ = a$ + "T: " + ta$(ru%,i%) a$ = a$ + "I: " + ic$(ru%,i%) a$ = a$ + "N: " + nm$(ru%,i%) a$ = a$ + "D: " + rp$(ru%,i%) NEXT i% CLIPBOARD_STRING_COPY a$ GOTO Copicols CASE 52: ' coller le groupe qui est dans le clipboard scl$ = CLIPBOARD_STRING_PASTE$ IF LEFT$(scl$,3) <> "R: " MESSAGE "Impossible, chaîne en mémoire incorrecte, abandon !" RETURN END_IF a$ = rub$(ru%) IF a$ <> "" b$ = "Écraser entièrement le groupe existant " + a$ + " ?" i% = MESSAGE_CONFIRMATION_YES_NO(b$) IF i% <> 1 THEN RETURN END_IF k% = INSTR(scl$,"T: "): rub$(ru%) = MID$(scl$,4,k%-4) nt% = 0 WHILE k% > 0 nt% = nt% + 1 scl$ = MID$(scl$,k%,5000): k% = INSTR(scl$,"I: ") ta$(ru%,nt%) = MID$(scl$,4,k%-4) scl$ = MID$(scl$,k%,5000): k% = INSTR(scl$,"N: ") ic$(ru%,nt%) = MID$(scl$,4,k%-4) scl$ = MID$(scl$,k%,5000): k% = INSTR(scl$,"D: ") nm$(ru%,nt%) = MID$(scl$,4,k%-4) scl$ = MID$(scl$,k%,5000): k% = INSTR(scl$,"T: ") IF k% > 0 rp$(ru%,nt%) = MID$(scl%,4,k%-4) ELSE rp$(ru%,nt%) = MID$(scl$,4,5000) END_IF END_WHILE CASE 53: ' insertion: décaler les groupes vers le bas (créer une ligne vide) FOR i% = ntg% TO ru%+1 STEP -1 rub$(i%) = rub$(i%-1) FOR j% = 1 TO ntm% ta$(i%,j%) = ta$(i%-1,j%): ic$(i%,j%) = ic$(i%-1,j%) nm$(i%,j%) = nm$(i%-1,j%): rp$(i%,j%) = rp$(i%-1,j%) NEXT j% NEXT i% rub$(ru%) = "": ' vider la ligne (groupe de tâches décalé) FOR i% = 1 TO ntm% ta$(ru%,i%) = "": ic$(ru%,i%) = "" nm$(ru%,i%) = "": rp$(ru%,i%) = "" NEXT i% CASE 54: ' supprimer le groupe actuel (cliqué) a$ = rub$(ru%) IF a$ = "" THEN MESSAGE("Groupe vide !"): RETURN b$ = "Supprimer entièrement le groupe existant " + a$ + " ?" i% = MESSAGE_CONFIRMATION_YES_NO(b$) IF i% <> 1 THEN RETURN rub$(ru%) = "" FOR i% = 1 TO ntm% ta$(ru%,i%) = "": ic$(ru%,i%) = "" nm$(ru%,i%) = "": rp$(ru%,i%) = "" NEXT i% END_SELECT ELSE ' Action sur une tâche donnée SELECT i% CASE 31: ' copier la tâche dans le clipboard a$ = "T: " + ta$(ru%,nt%) a$ = a$ + "I: " + ic$(ru%,nt%) a$ = a$ + "N: " + nm$(ru%,nt%) a$ = a$ + "D: " + rp$(ru%,nt%) CLIPBOARD_STRING_COPY a$ GOTO Copicols CASE 32: ' coller la tâche en mémoire (clipboard) scl$ = CLIPBOARD_STRING_PASTE$ IF LEFT$(scl$,3) <> "T: " MESSAGE "Impossible, chaîne en mémoire incorrecte, abandon !" RETURN END_IF a$ = ta$(ru%, nt%) IF a$ <> "" b$ = "Écraser entièrement la tâche existante " + a$ + " ?" i% = MESSAGE_CONFIRMATION_YES_NO(b$) IF i% <> 1 THEN RETURN END_IF k% = INSTR(scl$,"I: "): ta$(ru%,nt%) = MID$(scl$,4,k%-4) scl$ = MID$(scl$,k%,5000): k% = INSTR(scl$,"N: ") ic$(ru%,nt%) = MID$(scl$,4,k%-4) scl$ = MID$(scl$,k%,5000): k% = INSTR(scl$,"D: ") nm$(ru%,nt%) = MID$(scl$,4,k%-4) rp$(ru%,nt%) = MID$(scl$, k%+3,5000) CASE 33: ' insertion: décaler les tâches d'une case (créer une case vide) FOR i% = ntm% TO nt%+1 STEP -1 ta$(ru%,i%) = ta$(ru%,i%-1): ic$(ru%,i%) = ic$(ru%,i%-1) nm$(ru%,i%) = nm$(ru%,i%-1): rp$(ru%,i%) = rp$(ru%,i%-1) NEXT i% ta$(ru%,nt%) = "": ic$(ru%,nt%) = "" nm$(ru%,nt%) = "": rp$(ru%,nt%) = "" CASE 34: ' supprimer la tâche cliquée a$ = ta$(ru%,nt%) IF a$ = "" THEN MESSAGE("Tâche vide !"): RETURN b$ = "Supprimer entièrement la tâche existante "+a$+" ?" i% = MESSAGE_CONFIRMATION_YES_NO(b$) IF i% <> 1 THEN RETURN ta$(ru%,nt%) = "": ic$(ru%,nt%) = "" nm$(ru%,nt%) = "": rp$(ru%,nt%) = "" END_SELECT END_IF ' Sauvegarde et mise à jour de l'affichage GOSUB Ecrfic snt% = nt%: GOSUB Aftach: nt% = snt%: ' réaffichage du groupe Copicols: HIDE 10: HIDE 40 TIMER_ON 99 RETURN ' ============================================================================== Extract: ' Extraction de l'icône de l'exécutable a$ = TEXT$(14): IF UPPER$(RIGHT$(a$,4)) <> ".EXE" THEN RETURN: ' ignoré IF DIR_EXISTS(rico$) = 0 THEN DIR_MAKE rico$ b$ = STRING$(255," ") out$ = rico$ + "\" +RIGHT$("0"+STR$(ru%),2)+"_"+RIGHT$("0"+STR$(nt%),2)+".ico" res% = DLL_CALL3("ExtractIconFromLNK",ADR(a$),ADR(out$),ADR(b$)) IF FILE_EXISTS(out$) = 1 THEN TEXT 14, out$ RETURN ' ============================================================================== Edf: Timer_Off 99: Execute_Wait "Notepad.exe " + fta$: Timer_On 99: ' edit fichier Return ' ============================================================================== Savrest: ' Sauvegarde/Restore du fichier des données IF NUMBER_CLICK = 61 ' sauvegarde IF FILE_EXISTS(sta$) = 1 THEN FILE_DELETE sta$ FILE_COPY fta$,sta$ ELSE ' restore IF FILE_EXISTS(sta$) = 0 THEN MESSAGE "Sauvegarde non trouvée !": RETURN FILE_DELETE fta$ FILE_COPY sta$,fta$ END_IF RETURN ' ============================================================================== Help: DATA "AIDE": ' repère de début DATA "LANCEUR DE TÂCHES : AIDE": ' caption général DATA "1_ GÉNÉRALITÉS","2_ AJOUT CATÉGORIE","3_ AJOUT TÂCHE": ' rubriques DATA "4_ DÉPLACER/SUPPRIMER","5_ MAINTENANCE","F"
DATA "1_ ","Clic gauche sur un groupe de tâches pour afficher à droite les" DATA "différentes tâches de ce groupe. Le clic droit affiche les" DATA "caractéristiques du groupe (son nom, qui est alors modifiable).","" DATA "Le clic gauche sur une case de tâche provoque le lancement de" DATA "l'application correspondante, et le programme lanceur quitte." DATA "Le clic droit affiche les caractéristiques de la tâche, que l'on peut" DATA "alors modifier et réenregistrer.","" DATA "Conditions initiales: le programme est défini pour 20 groupes de" DATA "tâches, de 20 tâches maximum chacun. Il vaut mieux prévoir la" DATA "capacité maximum dès le départ, en jouant sur le paramètre nr%" DATA "(nombre de rangées, fixé à 5), les autres dimensions seront ajustées" DATA "en conséquence (notamment le nombre maximum de groupes).","F"
DATA "2_ ","- Clic droit sur un emplacement libre de la colonne de gauche, puis" DATA " donner un nom à la catégorie, et valider.","F"
DATA "3_ ","- Sélectionner une catégorie à gauche, puis cliquer sur une case libre" DATA " à droite. Saisir (ou parcourir) un programme exécutable, l'icône" DATA " correspondante, puis donner un nom à ce racourci. Éventuellement," DATA " préciser le répertoire de travail de cette application. Valider.","" DATA " NB: le clic sur le champ icône provoque l'affichage dans ce champ" DATA " du chemin de l'exécutable au-dessus. En cliquant sur le bouton" DATA " 'Extr' à droite, le programme tentera d'extraire l'icône contenue" DATA " dans cet exécutable et affichera le résultat dans le champ (chemin" DATA " de l'icône créée).","F"
DATA "4_ "," Faire un clic droit sur l'élément concerné. Il est alors possible de:" DATA "- Modifier les paramètres de la tâche ou du groupe de tâches." DATA "- Copier entièrement l'élément dans le clipboard (pour collage" DATA " éventuel)." DATA "- Coller à l'emplacement cliqué l'élément qui a été précédemment." DATA " copié." DATA "- Insérer un emplacement vide avant l'élément cliqué (les éléments" DATA " qui suivent seront alors décalés vers le bas)." DATA "- Supprimer entièrement l'élément cliqué.","F"
DATA "5_ "," 1) - SAUVEGARDES :" DATA " Toutes les données concernant les groupes de tâches et les tâches" DATA " sont enregistrées dans un fichier de type texte: Fictach.txt. Il est" DATA " prévu une sauvegarde ponctuelle de ce fichier: bouton" DATA " 'Sauveg. fichier',dans le même répertoire, avec l'extension .sav." DATA " Le garnissage initial de ce fichier étant assez laborieux, il est" DATA " conseillé de faire cette sauvegarde avant toute opération un peu" DATA " risquée de suppression, déplacements etc. d'éléments." DATA " Le bouton 'Restore fichier' recopie le fichier sauvegardé dans le" DATA " fichier opérationnel."," " DATA " 2) - STRUCTURE DU FICHIER :" DATA " On peut éditer le fichier des tâches pour voir sa structure ou y" DATA " apporter des modifications mineures: bouton 'Edit fichier'.","F" TIMER_OFF 99 Aide("AIDE") TIMER_ON 99 RETURN ' ============================================================================== SUB Aide(a$) ' Affichage d'une aide à l'écran ' Les données sont sous forme de Datas dans le programme principal, le paramètre ' a$ donnant le libellé de la ligne à rechercher. Les Datas sont dans l'ordre: ' - le nom (paramètre a$) qui pointe le début des datas ' - le 'Caption' (titre) de la fenête d'aide ' - les noms des différents chapitres, numérotés de "1_ " à "n_ " ' exemple: DATA "1_ Premier chapitre","2_ Deuxième chapitre",etc., la série ' se terminant par "F" ' - les chapitres successifs, avec leur numéro correspondant ' exemple: DATA "1_ ","Premier chapitre","Texte du chapitre...","...","..." ' chaque chapitre se terminant par "F". DIM_LOCAL ar$, aru$, rubx%, fid%, ata%: ata% = 0 IF LABEL("Sortaid") = 0 THEN LABEL Sortaid IF LABEL("A_Rub") = 0 THEN LABEL A_Rub fid% = 1000: WHILE OBJECT_EXISTS(fid%) = 1: fid% = fid%+1000: END_WHILE FORM fid%: HEIGHT fid%,400: WIDTH fid%,600: BORDER_SMALL fid%: COLOR fid%,190,255,255 FONT_NAME fid%, "Comic Sans MS" LIST fid%+1: PARENT fid%+1,fid%: WIDTH fid%+1,150: HEIGHT fid%+1,HEIGHT(fid%)-35 COLOR fid%+1,255,255,128: ON_CLICK fid%+1,A_Rub: ' liste des rubriques, à gauche MEMO fid%+2: PARENT fid%+2,fid%: TOP fid%+2,20: LEFT fid%+2,WIDTH(fid%+1) WIDTH fid%+2,WIDTH(fid%)-WIDTH(fid%+1)-16: HEIGHT fid%+2,HEIGHT(fid%+1)-42 COLOR fid%+2,190,255,190: FONT_SIZE fid%+2,10: ' rubriques successives, à droite ALPHA fid%+3: PARENT fid%+3,fid%: LEFT fid%+3,LEFT(fid%+2)+10: ' titre BUTTON fid%+4: PARENT fid%+4,fid%: TOP fid%+4,HEIGHT(fid%)-59: LEFT fid%+4,330 CAPTION fid%+4,"OK": ON_CLICK fid%+4,Sortaid: ' sortie de l'aide RESTORE: READ ar$: WHILE ar$<>a$: READ ar$: END_WHILE READ ar$: CAPTION fid%,ar$ READ ar$: WHILE ar$<>"F": ITEM_add fid%+1,ar$: READ ar$: END_WHILE rubx% = 0: GOSUB A_Rub: ' affichage préalable de la 1ère rubrique WHILE ata% = 0: WAIT 300: END_WHILE: EXIT_SUB Sortaid: DELETE fid%: ' sortie, libération de la ressource ata% = 1: ' feu vert pour sortir RETURN A_Rub: ' affichage d'une rubrique rubx% = ITEM_INDEX(fid%+1): IF rubx% = 0 THEN rubx% = 1: ' initial aru$ = ITEM_READ$(fid%+1,rubx%) CAPTION fid%+3, aru$ aru$ = LEFT$(aru$,3) RESTORE: READ ar$: WHILE ar$<>aru$: READ ar$: END_WHILE CLEAR fid%+2 READ ar$: WHILE ar$<>"F": ITEM_ADD fid%+2,ar$: READ ar$: END_WHILE RETURN END_SUB ' ==============================================================================
Un regret: Que l'on n'ait pas l'équivalent du ON_CLICK pour intercepter le clic droit de la souris (du genre On_Click_Right), j'ai été obligé de créer un Timer pour le surveiller, ce que je n'aime pas beaucoup parce que ça pose plein de problèmes dans les traitements: il ne faut pas oublier de l'interrompre pour les traitements un peu longs, et... de le rétablir ensuite !
Dernière édition par JL35 le Dim 18 Aoû 2013 - 22:24, édité 1 fois | |
|