JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Afficher des icônes et des boutons personnalisés Jeu 22 Nov 2012 - 17:55 | |
| ICÔNES CLIQUABLES Une petite SUB sans prétention pour afficher des icônes, éventuellement cliquables, pour agrémenter l'interface des programmes. Ces icônes peuvent être des images de n'importe quel format et dimensions. - Code:
-
SUB Affico(f$,obj%,x%,y%) ' Affichage de l'icône f$ en x%,y% de l'objet parent obj% DIM_LOCAL ic_ifv$, ic_suf$, ic_tmp$, ic_ftm$, ic_dat$, ic_w%, ic_h%, ic_ob% ic_ifv$ = "C:\Progra~2\IrfanView\i_view32.exe ": ' ******* chemin d'IrfanView, à ajuster ******* ic_tmp$ = "C:\TEMP\ic_infos.txt" ic_ftm$ = "C:\TEMP\Ictmp.bmp" ic_suf$ = UPPER$(RIGHT$(f$,4)) ic_dat$ = ic_ifv$ + f$ + " /info=" + ic_tmp$ IF ic_suf$ = ".BMP" OR ic_suf$ = ".JPG" EXECUTE_WAIT ic_dat$ ELSE EXECUTE_WAIT ic_dat$ + " /convert=" + ic_ftm$ f$ = ic_ftm$ END_IF FILE_OPEN_READ 9, ic_tmp$ WHILE FILE_EOF(9) = 0 FILE_READLN 9, ic_dat$ IF LEFT$(ic_dat$,16) = "Image dimensions" ic_dat$ = MID$(ic_dat$, 20,20) ic_w% = VAL(LEFT$(ic_dat$,INSTR(ic_dat$," ")-1)) ic_dat$= MID$(ic_dat$,INSTR(ic_dat$,"x ")+2,20) ic_h% = VAL(LEFT$(ic_dat$,INSTR(ic_dat$," ")-1)) EXIT_WHILE END_IF END_WHILE FILE_CLOSE 9: FILE_DELETE ic_tmp$ ic_ob% = 1000 WHILE OBJECT_EXISTS(ic_ob%) = 1: ic_ob% = ic_ob%+1: END_WHILE PICTURE ic_ob%: IF obj% > 0 THEN PARENT ic_ob%,obj% TOP ic_ob%,y%: LEFT ic_ob%,x%: WIDTH ic_ob%,ic_w%: HEIGHT ic_ob%,ic_h% FILE_LOAD ic_ob%, f$: IF f$ = ic_ftm$ THEN FILE_DELETE ic_ftm$ i = ic_ob%: ' n° d'objet attribué END_SUB La routine utilise IrfanView pour le traitement de l'image (conversion éventuelle). L'appel comporte le chemin de l'image, le numéro de l'objet parent (si différent de 0) et les coordonnées haut à gauche du point d'insertion. On récupère à la sortie le numéro de l'objet icône créé, pour pouvoir le cliquer, éventuellement (la variable i doit être déclarée dans le programme principal). PS pour ce qui est d'images trop grandes que l'on voudrait "icôniser", il est très facile de les redimensionner avec IrfanView, on pourrait même intégrer ça facilement dans la Sub, mais ça fait des paramètres (les dimensions finales) supplémentaires à passer, peut-être sans grande nécessité ? BOUTONS SUR MESURE Boutons évidemment cliquables, dont le Caption peut comporter plusieurs lignes qui seront centrées dans le bouton: - Code:
-
SUB Affbut(obj%,x%,y%,w%,h%,tx$) ' Affichage du bouton de dimensions w%,h% en x%,y% de l'objet obj%, caption tx$ ' (plusieurs lignes éventuelles centrées, séparées par le caractère '<') ' Numéro de l'objet bouton rendu dans i DIM_LOCAL bt_ob%,bt_wtx%, bt_htx%, bt_k%, bt_tx$(10), bt_nt%, bt_y%,bt_i% bt_ob%=1000: WHILE OBJECT_EXISTS(bt_ob%) = 1: bt_ob% = bt_ob%+1: END_WHILE PICTURE bt_ob%: IF obj% > 0 THEN PARENT bt_ob%,obj% TOP bt_ob%,y%: LEFT bt_ob%,x%: WIDTH bt_ob%,w%: HEIGHT bt_ob%,h% 2D_TARGET_IS bt_ob%: 2D_PEN_COLOR 100,100,100: 2D_FILL_COLOR 255,255,255 2D_RECTANGLE 0,0,w%,h% 2D_LINE 0,h%-2,w%-2,h%-2: 2D_POLY_TO w%-2,0 2D_PEN_COLOR 160,160,160: 2D_LINE 2,h%-3,w%-3,h%-3: 2D_POLY_TO w%-3,2 PRINT_TARGET_IS bt_ob% bt_k% = INSTR(tx$,"<"): bt_nt% = 1: bt_tx$(bt_nt%) = tx$ WHILE bt_k% > 0 bt_tx$(bt_nt%) = LEFT$(tx$,bt_k%-1): tx$ = MID$(tx$,bt_k%+1,100) bt_nt%=bt_nt%+1: bt_tx$(bt_nt%) = tx$: bt_k% = INSTR(tx$,"<") END_WHILE bt_htx% = TEXT_HEIGHT(bt_tx$(1),bt_ob%) bt_y% = (h%-bt_nt%*bt_htx%)/2 FOR bt_i% = 1 TO bt_nt% bt_wtx% = TEXT_WIDTH(bt_tx$(bt_i%),bt_ob%) PRINT_LOCATE (w%-bt_wtx%)/2, bt_y%: PRINT bt_tx$(bt_i%) bt_y% = bt_y%+bt_htx% NEXT bt_i% i = bt_ob%: ' n° d'objet attribué END_SUB Je n'ai pas voulu compliquer les paramètres, mais on peut facilement imaginer des boutons de couleurs différentes pour le fond et pour le texte, et des polices différentes et enrichissements pour le texte. | |
|