JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Affichage de photos Mer 6 Aoû 2014 - 16:39 | |
| Il va y avoir plein de photos à afficher au retour des vacances, alors... L'écran est utilisé au maximum de sa capacité, tout le reste est masqué. Le programme affiche une planche de vignettes (de dimensions choisies), on clique sur une de ces vignettes pour démarrer l'affichage des images, puis on clique 'Suivant' à chaque fois (ou 'Précédent'), soit on passe en automatique (touche 'Auto', original...), genre diaporama, avec délai réglable. Bouton aide ('?') pour plus de détails, mais c'est tout simple. La seule ressource externe nécessaire est IrfanView (encore lui), dont il faut ajuster le chemin en tête du programme. Le programme n'est pas très long (moins de 300 lignes). - Code:
-
' Affichage de photos en grand format LABEL Quit, Quitv, Chr, Calcol, Chrs, Afvi, Suivi, Clicki, Clicks, Precede, Suivant LABEL Fclick, Auto, Rot90d, Aidsuc DIM w0,h0,wr,hr,wv,hv,ht,eh,nc,nr,x,y,i%,j%,k%,kv%,ik%,a$,f$,r$,ni%,iv$,wi,hi,rc$ DIM aut%,del%,pa%
iv$ = "C:\Progra~2\Irfanv~1\i_view32.exe ": ' <<<<<<<<<<<<<<<<< IrfanView <<<<<<
w0 = SCREEN_X: h0 = SCREEN_Y wr = w0-100: hr = 20 HIDE 0: WIDTH 0,w0: HEIGHT 0,h0: BORDER_HIDE 0: FONT_NAME 0,"Arial" BUTTON 1: TOP 1,0: LEFT 1,w0-90: HEIGHT 1,20: CAPTION 1,"Retour": FONT_BOLD 1 ON_CLICK 1,Quitv CONTAINER 2: TOP 2,0: LEFT 2,0: WIDTH 2,wr: HEIGHT 2,hr COLOR 2,255,255,190 ALPHA 3: PARENT 3,2: TOP 3,0: LEFT 3,5: FONT_SIZE 3,12: FONT_BOLD 3 ALPHA 4: PARENT 4,2: TOP 4,0: LEFT 4,(w0-300)/2: FONT_SIZE 4,12: FONT_BOLD 4: font_color 4,164,0,164 CAPTION 4,"Cliquez une vignette pour voir l'image"
MEMO 10: HIDE 10
IMAGE 19 ' Picture d'affichage des vignettes PICTURE 20: TOP 20,hr: WIDTH 20,w0: HEIGHT 20,h0-hr FONT_NAME 20,"Courier New": FONT_SIZE 20,7 ON_CLICK 20,Clicki BUTTON 21: TOP 21,TOP(20)+HEIGHT(20)-30: LEFT 21,w0-80: CAPTION 21,"Suite": HIDE 21 FONT_BOLD 21: FONT_SIZE 21,12: ON_CLICK 21,Suivi
FORM 50: TOP 50,200: LEFT 50,w0/2-150: WIDTH 50,300: HEIGHT 50,200: COLOR 50,255,164,90 BORDER_SMALL 50: FONT_NAME 50,"Arial": FONT_BOLD 50: ON_CLOSE 50,Quit CAPTION 50,"- VISUALISATION DE PHOTOS PLEIN ÉCRAN -" ALPHA 51: PARENT 51,50: LEFT 51,5: TOP 51,5: CAPTION 51," Répertoire des images (clic) : " COLOR 51,255,255,0 EDIT 52: PARENT 52,50: TOP 52,20: LEFT 52,5: WIDTH 52,WIDTH(50)-25: ON_CLICK 52,Chr BUTTON 53: PARENT 53,50: TOP 53,TOP(52)+95: LEFT 53,WIDTH(52)/2-70: WIDTH 53,140 CAPTION 53,"Voir les vignettes": ON_CLICK 53,Chrs ALPHA 62: PARENT 62,50: TOP 62,TOP(53)+25: LEFT 62,20 CAPTION 62,"(puis cliquer une vignette pour voir l'image)" BUTTON 54: PARENT 54,50: TOP 54,0: LEFT 54,WIDTH(50)-70: WIDTH 54,50: HEIGHT 54,19 CAPTION 54,"Quitter": ON_CLICK 54,Quit OPEN_DIALOG 55 BUTTON 61: PARENT 61,50: TOP 61,TOP(54): LEFT 61,LEFT(54)-25: WIDTH 61,25: HEIGHT 61,19 CAPTION 61,"?": ON_CLICK 61,Aidsuc ALPHA 60: PARENT 60,50: TOP 60,TOP(52)+23: LEFT 60,30: COLOR 60,255,190,164 ALPHA 56: PARENT 56,50: TOP 56,TOP(52)+48: LEFT 56,30 CAPTION 56,"Vignettes de x pixels." SPIN 57: PARENT 57,50: TOP 57,TOP(56)-3: LEFT 57,LEFT(56)+75: WIDTH 57,50 EDIT 58: PARENT 58,50: TOP 58,TOP(57): LEFT 58,LEFT(57)+WIDTH(57)+12: WIDTH 58,33 ALPHA 59: PARENT 59,50: TOP 59,TOP(56)+25: LEFT 59,20: COLOR 59,255,190,164 ' Affichage d'une image wi = 1280: hi = wi*3/4 hi = SCREEN_Y-80: wi = 4*hi/3 FORM 100: TOP 100,(SCREEN_Y-hi-60)/2: LEFT 100,(SCREEN_X-wi)/2: WIDTH 100,wi+16: HEIGHT 100,hi+60 BORDER_SMALL 100: HIDE 100: COLOR 100,255,0,0: FONT_BOLD 100: FONT_SIZE 100,10 ON_CLOSE 100,Fclick PICTURE 101: PARENT 101,100: WIDTH 101,wi: HEIGHT 101,hi: STRETCH_ON 101 ON_CLICK 101,Suivant BUTTON 102: PARENT 102,100: TOP 102,TOP(101)+HEIGHT(101): LEFT 102,wi-300 WIDTH 102,95: CAPTION 102,"Précédente": ON_CLICK 102,Precede BUTTON 103: PARENT 103,100: TOP 103,TOP(102): LEFT 103,LEFT(102)+100 WIDTH 103,95: CAPTION 103,"Suivante": ON_CLICK 103,Suivant BUTTON 104: PARENT 104,100: TOP 104,TOP(102): LEFT 104,LEFT(103)+100 WIDTH 104,95: CAPTION 104,"Quitter": ON_CLICK 104,Fclick EDIT 105: PARENT 105,100: TOP 105,TOP(102)+1: LEFT 105,10: WIDTH 105,420 BUTTON 106: PARENT 106,100: TOP 106,TOP(102): LEFT 106,wi/2-40: WIDTH 106,40 CAPTION 106,"Auto": ON_CLICK 106,Auto SPIN 107: PARENT 107,100: TOP 107,TOP(106): LEFT 107,wi/2: WIDTH 107,40 POSITION 107,2 ALPHA 108: PARENT 108,100: TOP 108,TOP(107)+3: LEFT 108,LEFT(107)+40 CAPTION 108,"sec.": COLOR 108,255,180,180 BUTTON 110: PARENT 110,100: TOP 110,TOP(102): LEFT 110,LEFT(102)-30: WIDTH 110,28 FONT_NAME 110,"Wingdings 3": FONT_SIZE 110,14: CAPTION 110,CHR$(80): ON_CLICK 110,Rot90d
del% = 2000: ' intervalle entre images en automatique (millisecondes) wv = 160: hv = wv*3/4: ' dimensions des vignettes, à ajuster, au choix POSITION 57,wv: TEXT 58,STR$(hv) ON_CHANGE 57,Calcol ht = 9: ' hauteur texte (légendes) eh = 1: ' espacement horizontal entre vignettes GOSUB Calcol TO_FOREGROUND 50 END ' ============================================================================== Quit: TERMINATE ' ============================================================================== Quitv: ' Retour à l'écran d'accueil HIDE 0: CLS: SHOW 50: TO_FOREGROUND 50 RETURN ' ============================================================================== Chr: ' Choix du répertoire des images CAPTION 60,"" a$ = FILE_NAME$(55): IF LEN(a$)<4 THEN RETURN r$ = FILE_EXTRACT_PATH$(a$) TEXT 52,r$ IF DIR_EXISTS(r$) = 0 THEN MESSAGE "Répertoire non trouvé !": RETURN Dir(r$+"*.jpg","/B"): CLEAR 10: CLIPBOARD_PASTE 10 ni% = COUNT(10) CAPTION 60," (= "+STR$(ni%)+" images) " pa% = 1: ' 1ère vignette à afficher RETURN ' ============================================================================== Calcol: ' Rangées/Colonnes en fonction de la dimension choisie des vignettes wv = POSITION(57): hv = INT(wv*3/4): ' dimensions des vignettes, à ajuster, au choix TEXT 58,STR$(hv) nc = INT(w0/(wv+eh)): ' -> nombre de colonnes calculé nr = INT((h0-hr)/(hv+ht)): ' -> nombre de rangées calculé CAPTION 59,"=> "+STR$(nr)+" rangées de "+STR$(nc)+" colonnes, soit "+STR$(nc*nr)+" images." RETURN ' ============================================================================== Chrs: ' Affichage des vignettes (dans la limite de la capacité de l'écran) r$ = TEXT$(52) IF DIR_EXISTS(r$) = 0 THEN MESSAGE "Répertoire non trouvé !": CAPTION 60,"": RETURN CAPTION 3,r$ + " ("+STR$(ni%)+" images)" SHOW 0 HIDE 50 pa% = 1: GOSUB Afvi RETURN ' ============================================================================== Afvi: 2D_TARGET_IS 20: PRINT_TARGET_IS 20: CLS: COLOR 20,200,200,200 HIDE 21 x = 0: y = 0 FOR kv% = pa% TO ni% a$ = ITEM_READ$(10,kv%): f$ = r$ + a$ EXECUTE_WAIT iv$+f$+" /resize=("+STR$(wv)+",0) /aspectratio /clipcopy /killmesoftly": ' redim CLIPBOARD_PASTE 19 2D_IMAGE_PASTE 19,x,y PRINT_LOCATE x,y+hv-1: PRINT STR$(kv%)+": "+a$ x = x+wv+eh IF x>(w0-wv) x = 0: y = y+hv+ht IF y>(HEIGHT(0)-hv-ht) IF kv% < ni% SHOW 21 END_IF EXIT_FOR END_IF END_IF NEXT kv% RETURN ' ============================================================================== Suivi: ' planche de vignettes suivante pa% = kv%+1 GOSUB Afvi RETURN ' ============================================================================== Clicki: ' Affichage d'une image (cliquée, ou en continu) x = MOUSE_X_LEFT_DOWN(20): y = MOUSE_Y_LEFT_DOWN(20) x = 1+INT(x/(wv+eh)): ' colonne cliquée y = 1+INT(y/(hv+ht)): ' rangée cliquée ik% = (y-1)*nc + x: ' rang de l'image cliquée dans la fenêtre d'affichage ik% = ik%+pa%-1: ' rang dans la liste globale Clicks: a$ = ITEM_READ$(10,ik%) f$ = r$ + a$ ImgInfos(f$) ' IF rsw%>rsh% ' WIDTH 101,wi: HEIGHT 101,hi ' ELSE ' HEIGHT 101,hi: WIDTH 101,hi*rsw%/rsh% ' END_IF WIDTH 101,wi: HEIGHT 101,hi: ' dimensions implicites FILE_LOAD 101,f$ SHOW 100: TO_FOREGROUND 100 CAPTION 100," - Répertoire : "+r$+" ( "+STR$(ni%)+" images )" TEXT 105," "+STR$(ik%)+"_ "+a$+" - "+rsd$+" - ("+STR$(rsw%)+" x "+STR$(rsh%)+")" RETURN ' ============================================================================== Precede: ik% = ik%-1 IF ik%<1 THEN ik% = 1: RETURN GOSUB Clicks RETURN ' ============================================================================== Suivant: ik% = ik%+1 IF ik% > ni% aut% = 0 ELSE GOSUB Clicks WHILE aut% = 1: ' défilement auto del% = 1000*POSITION(107) del% = del%-500: ' pour tenir compte du temps de traitement (approx.) FOR i% = 1 TO del% STEP 200 WAIT 200 IF CLICKED(106) = 1 THEN EXIT_WHILE NEXT i% ik% = ik%+1: IF ik% > ni% OR aut% = 0 THEN EXIT_WHILE GOSUB Clicks END_WHILE aut% = 0 CAPTION 106,"Auto" END_IF RETURN ' ============================================================================== Fclick: ' Retour à l'écran des vignettes HIDE 100 aut% = 0: CAPTION 106,"Auto" RETURN ' ============================================================================== Auto: IF aut% = 1 aut% = 0: ' touche Stop CAPTION 106,"Auto" ELSE ' touche Auto IF CLICKED(106) = 1: ' pour désarmorçer le dernier click END_IF aut% = 1 CAPTION 106,"Stop" GOSUB Suivant END_IF RETURN ' ============================================================================== Rot90d: ' Rotation à droite 90° de l'image affichée CLIPBOARD_COPY 101 i% = WIDTH(101): j% = HEIGHT(101) EXECUTE_WAIT iv$ + "/clippaste /rotate_r /clipcopy /killmesoftly" IF i% > hi HEIGHT 101,hi: WIDTH 101,hi*j%/i%: IF WIDTH(101)>wi THEN WIDTH 101,wi ELSE WIDTH 101,wi: HEIGHT 101,wi*i%/j%: IF HEIGHT(101)>hi THEN HEIGHT 101,hi END_IF CLIPBOARD_PASTE 101 RETURN ' ============================================================================== Aidsuc: rc$ = CHR$(13)+CHR$(10) a$ = " - VISUALISATION DE PHOTOS EN PLEIN ÉCRAN -"+rc$+rc$ a$=a$+"- Clic pour choisir le répertoire des images à visualiser."+rc$ a$=a$+"- Choisir la largeur des vignettes à afficher, ce qui conditionnera"+rc$ a$=a$+" le nombre total de miniatures affichées à l'écran."+rc$ a$=a$+"- Cliquer 'Voir les vignettes': elles s'affichent en plein écran, dans"+rc$ a$=a$+" la limite de la capacité de l'écran. Cliquer sur le bouton 'Suite'"+rc$ a$=a$+" éventuel en bas à droite pour voir la série suivante."+rc$ a$=a$+"- Cliquer sur une vignette pour voir l'image en grand format."+rc$+rc$ a$=a$+" On peut alors :"+rc$ a$=a$+" - cliquer 'Suivante', 'Précédente', ou bien 'Quitter' pour revenir"+rc$ a$=a$+" à l'affichage global."+rc$ a$=a$+" - cliquer 'Auto' pour un affichage en continu des images"+rc$ a$=a$+" successives à partir de l'image affichée, avec réglage du"+rc$ a$=a$+" délai en secondes."+rc$ a$=a$+" Cet affichage continu est interruptible par la touche 'Stop'"+rc$ a$=a$+" (retour à l'affichage image par image)."+rc$+rc$ a$=a$+" NB: on peut faire pivoter de 90° à droite une image affichée à"+rc$ a$=a$+" l'écran à l'aide du bouton flèche circulaire."+rc$+rc$ a$=a$+" Retour à l'écran d'origine : touche 'Retour' en haut à droite"+rc$ a$=a$+" de l'écran des vignettes."+rc$ a$=a$+" Fermer le programme: touche 'Quitter'" MESSAGE a$ RETURN ' ============================================================================== SUB Dir(rep$, arg$) ' Liste des fichiers du répertoire rep$, options arg$, résultat -> CLIPBOARD ' (à coller par exemple dans un Memo). Exécution sans fenêtre noire. ' Arguments optionnels: ' /A:D répertoires, /A:-D fichiers, /B format abrégé" ' /-C pas de séparateur de milliers, /-N fichiers à gauche (abrégés) ' /O: (tri) N tri alpha, E tri par extension, G répertoires en tête, ' S tri par taille, D tri par date croissante (-D date décroissante) ' /S y compris sous-répertoires, /X avec noms abrégés. DIM_LOCAL prg_a$, s_cr$, b_at$ prg_a$ = "CMD.exe /c DIR " + rep$ + " " + arg$ + " | clip" s_cr$ = "C:\TEMP\Vbscript.vbs": b_at$ = "C:\TEMP\Bat.bat" FILE_OPEN_WRITE 9, b_at$: FILE_WRITELN 9, prg_a$: FILE_CLOSE 9: ' Fichier .bat prg_a$ = "CreateObject(" + CHR$(34) + "Wscript.Shell" + CHR$(34) + ").Run " prg_a$ = prg_a$ + CHR$(34) + b_at$ + CHR$(34) + ",0,True" FILE_OPEN_WRITE 9, s_cr$: FILE_WRITELN 9, prg_a$: FILE_CLOSE 9: ' script vbs EXECUTE_WAIT "WSCRIPT.exe " + s_cr$: ' Exécution du script FILE_DELETE b_at$: FILE_DELETE s_cr$ END_SUB ' ============================================================================== SUB ImgInfos(f$) ' Image f$ -> rsw%, rsh%, rsd$ (dimensions, date/heure de prise de vue) DIM_LOCAL a$, fi$: ' variables locales IF VARIABLE("rsw%") = 0 THEN DIM rsw% IF VARIABLE("rsh%") = 0 THEN DIM rsh% IF VARIABLE("rsd$") = 0 THEN DIM rsd$ fi$ = "C:\TEMP\Ifxwz.txt" EXECUTE_WAIT iv$ + f$ + " /info=" + fi$ + " /fullinfo" FILE_OPEN_READ 9, fi$ WHILE FILE_EOF(9) = 0: FILE_READLN 9, a$ IF LEFT$(a$, 16) = "Image dimensions" a$ = MID$(a$, 20, 50) rsw% = VAL(LEFT$(a$, INSTR(a$, " ") - 1)) a$ = MID$(a$, INSTR(a$, " ") + 3, 50) rsh% = VAL(LEFT$(a$, INSTR(a$, " ") - 1)) ELSE IF LEFT$(a$, 16) = "DateTimeOriginal" a$ = MID$(a$, 20, 50) rsd$ = MID$(a$,9,2)+"/"+MID$(a$,6,2)+"/"+LEFT$(a$,4)+MID$(a$,11,6) EXIT_WHILE END_IF END_IF END_WHILE FILE_CLOSE 9: FILE_DELETE fi$ END_SUB ' ============================================================================== Je suis parti du principe que les dimensions des images étaient dans le rapport 4/3, ce qui est le cas dans la grande majorité des apn, il faudrait ajuster si ce n'était pas le cas (ce n'est pas automatisé). PS déjà une petite modif: on peut afficher successivement la totalité des imagettes, une série par écran. | |
|