Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Horloge Ven 16 Mar 2012 - 1:42 | |
| Voici un petit exercice autour du du sujet de l'horloge. Rien de bien émouvant: une horloge analogique avec petite et grande aiguille, une trotteuse et l'affichage digital. Mais, il y a quelques petits plus: - on peut paramétrer l'horloge et cliquant sur la surface de l'horloge (ou sur le "?"). Un écran apparaît alors avec un menu et quelques boutons et zones faciles à comprendre. Cela permet en particulier d'afficher ou cacher la trotteuse, afficher ou cacher l'affichage digital, mais surtout de redimensionner l'horloge à l'aide d'une SCROLL_BAR. Cela m'a amusé de réaliser ce petit gadget. Et cerise sur le gateau: on ne peut PAS fermet l'horloge par la croix ! Elle réapparaît immédiatement ! Pour sortir du programme, il faut ouvrir la page de configuration en cliquant sur l'horloge, puis choisir le menu Fichiers/Sortir ! Comment c'est fait ? La page de configuration est la form 0, et l'horloge est une form secondaire avec une routine ON_CLOSE contenant un SHOW de la même form - c'est aussi simple que cela ! Voilà le moyen de faire une fenêtre "infermable" avec bordure ! - Code:
-
' horloge.bas
' Affichage d'une horloge paramétrable.
' *** routine principale label labels : gosub labels gosub variables gosub form0 gosub menu gosub GUI gosub initialisations end
' *** définition de tous les labels labels: label variables, form0, menu, GUI, initialisations label close_apropos label close_horloge, click_horloge, dessiner_horloge, tick label sortir, aide, apropos, cacher label changer_taille, modif_taille, fixer_taille, dim_horloge return
' *** définition de toutes les variables variables: dim no%, parent_1%, parent_2%, no_horloge%, no_timer% dim nom_fichier$, no_open%, no_save%, no_options% dim flag_present%, flag_modif%, no_val_options%, no_vide% dim no_modif%, no_numerique%, no_trotteuse% dim no_apropos%, no_aide% dim i%, j%, k%, s$ dim ang, hh%, mm%, ss%, flag%, centre%, rayon% dim nom_rep$, nom_ini$
dim nl$ : nl$ = chr$(13)+chr$(10) dim version$ : version$ = "V01.00" dim creation$ : creation$ = "11 Mars 2012" dim taille% : taille% = 100 dim pi : pi = 4*atn(1) return ' *** configuration de l'écran principal form0: hide 0 return
' *** création des menus menu: no% = no% + 1 : main_menu no% : parent_1% = no%
no% = no% + 1 : sub_menu no% : parent no%,parent_1% parent_2% = no% : caption no%,"Fichier" no% = no% + 1 : sub_menu no% : parent no%,parent_2% caption no%,"Sortir" : on_click no%,sortir
no% = no% + 1 : sub_menu no% : parent no%,parent_1% parent_2% = no% : caption no%,"Aide" no% = no% + 1 : sub_menu no% : parent no%,parent_2% caption no%,"Aide" : on_click no%, aide no% = no% + 1 : sub_menu no% : parent no%,parent_2% caption no%,"A-propos" : on_click no%, apropos
return création de tous les objets Panoramic GUI: ' *** d'abord les objets invisibles ' dialogues, list, timer, ... no% = no% + 1 : open_dialog no% : no_open% = no% filter no%,"Fichier texte|*.txt" no% = no% + 1 : save_dialog no% : no_save% = no% filter no%,"Fichier texte|*.txt" no% = no% + 1 : timer no% : timer_off no% : no_timer% = no% timer_interval no%,200 : on_timer no%,tick no% = no% + 1 : picture no% : hide no% : no_vide% = no% width no%,400 : height no%,400
' *** les objets de la form 0 * no% = no% + 1 : button no% : top no%,20 : left no%,20 : no_modif% = no% width no%,150 caption no%,"Modifier la taille" : on_click no%,modif_taille no% = no% + 1 : alpha no% : top no%,20 : left no%,20 : hide no% caption no%,"Dimension de l'horloge:" no% = no% + 1 : scroll_bar no% : top no%,40 : left no%,20 : hide no% width no%,200 : min no%,50 : max no%,400 : position no%,taille% on_change no%,changer_taille no% = no% + 1 : button no% : top no%,40 : left no%,250 : hide no% width no%,150 caption no%,"Valider la taille" : on_click no%,fixer_taille no% = no% + 1 : check no% : top no%,70 : left no%,20 : no_numerique% = no% caption no%,"Afficher en format numérique" : width no%,200 mark_on no% no% = no% + 1 : check no% : top no%,100 : left no%,20 : no_trotteuse% = no% caption no%,"Afficher la trotteuse" : width no%,200 mark_on no% no% = no% + 1 : button no% : top no%,130 : left no%,20 caption no%,"Cacher les options" : width no%,200 on_click no%,cacher
' *** page avec l'horloge no% = no% + 1 : form no% : hide no% : no_horloge% = no% : parent_1% = no% caption no%,"Horloge": border_small no% : gosub dim_horloge on_close no%,close_horloge no% = no% + 1 : picture no% : parent no%,parent_1% full_space no% : on_click no%,click_horloge no% = no% + 1 : image no% : parent no%,parent_1% no% = no% + 1 : image no% : parent no%,parent_1% : ' pour image vide 2d_target_is no_vide% : 2d_image_copy no%,0,0,399,399
' *** la fenêtre a-propos avec ses champs no% = no% + 1 : form no% : hide no% : no_apropos% = no% : parent_1% = no% caption no%,"A-propos" top no%, 200 : left no%,200 : height no%,150 : width no%,250 on_close no%,close_apropos no% = no% + 1 : alpha no% : parent no%,parent_1% top no%,20 : left no%,20 s$ = "Horloge"+nl$ s$ = s$ + "Version: "+version$+nl$ s$ = s$ + "Date: "+creation$+nl$ s$ = s$ + "Auteur: Klaus"+nl$ caption no%,s$
' *** la fenêtre d'aide avec ses champs no% = no% + 1 : form no% : hide no% : no_aide% = no% : parent_1% = no% caption no%,"Aide" top no%, 200 : left no%,200 : height no%,400 : width no%,400 on_close no%,close_apropos no% = no% + 1 : alpha no% : parent no%,parent_1% top no%,20 : left no%,20 s$ = "Mode d'emploi"+nl$+nl$ s$ = s$ + "Un clic dans l'horloge montre la page des options."+nl$ s$ = s$ + "Le bouton Modifier la taille donne accès au réglage"+nl$ s$ = s$ + "de la taille de l'horloge."+nl$ s$ = s$ + "Le bouton Valider la taille fixe la taille choisie."+nl$ s$ = s$ + "Une case à cocher pemet d'afficher ou non le format numérique."+nl$ s$ = s$ + "Une case à cocher permet d'afficher ou non la trotteuse."+nl$ s$ = s$ + "Les options sont automatiquement mémorisées à la sortie."+nl$+nl$ s$ = s$ + "On ne peut pas fermer l'horloge par la croix:"+nl$ s$ = s$ + "elle réapparaît automatiquement. Pour sortir du programme,"+nl$ s$ = s$ + "il faut utiliser la fonction Sortir du menu." caption no%,s$
return ' *** toutes les initialisations du programme initialisations: ' répertoire de l'application, nom du fichier ini s$ = param_value$(0) nom_rep$ = file_extract_path$(s$) if instr(lower$(s$),"\temp\")>0 then nom_rep$ = "C:\temp\" nom_ini$ = nom_rep$ + "horloge.ini" : ' adapter le nom du fichier ini dir_dialog no_open%,nom_rep$ dir_dialog no_save%,nom_rep$ if dir_exists(nom_rep$)=0 then dir_make nom_rep$ if file_exists(nom_ini$)=0 : ' créer le fichier ini vide s'il n'existe pas file_open_write 1,nom_ini$ file_writeln 1,"; créé le "+date$+" à "+time$+" heures" file_writeln 1,"taille="+str$(taille%) file_close 1 end_if ' traiter le fichier ini file_open_read 1,nom_ini$ file_readln 1,s$ while file_eof(1)=0 file_readln 1,s$ if left$(s$,7)="taille=" then taille% = val(mid$(s$,instr(s$,"=")+1,len(s$))) if s$="numerique=1" then mark_on no_numerique% if s$="numerique=0" then mark_off no_numerique% if s$="trotteuse=1" then mark_on no_trotteuse% if s$="trotteuse=0" then mark_off no_trotteuse% end_while file_close 1 print_target_is no_horloge%+1 gosub dim_horloge full_space no_horloge%+1 gosub dessiner_horloge show no_horloge% timer_on no_timer% return
' *** on a cliqué sur l'horloge click_horloge: show 0 return
' *** cacher la fenêtre des options cacher: hide 0 return ' *** l'horloge se ferme close_horloge: flag% = 1 return
' *** dessiner l'horloge - parties fixes dessiner_horloge: 2d_target_is no_horloge%+1 2d_image_paste no_horloge%+3,0,0 print_locate 5,5 : print "?" font_color no_horloge%+1,0,0,255 centre% = taille%/2 + 10 rayon% = taille%/2 - 10 2d_circle centre%,centre%,rayon% 2d_circle centre%,centre%,3 for ang=0 to 2*pi step pi/6 2d_circle centre%+rayon%*cos(ang),centre%+rayon%*sin(ang),3 next ang 2d_image_copy no_horloge%+2,0,0,width(no_horloge%+1)-1,height(no_horloge%+1)-1 return ' *** modifier la taille de l'horloge modif_taille: hide no_modif% show no_modif%+1 show no_modif%+2 show no_modif%+3 timer_off no_timer% return ' *** fixer la taille modifiée de l'horloge fixer_taille: hide no_modif%+1 hide no_modif%+2 hide no_modif%+3 show no_modif% timer_on no_timer% return
' *** changer la taille de l'horloge changer_taille: timer_off no_timer% taille% = position(no_modif%+2) gosub dim_horloge full_space no_horloge%+1 gosub dessiner_horloge timer_on no_timer% return ' *** dimensionner la fenêtre de l'horloge dim_horloge: height no_horloge%,taille%+50 : width no_horloge%,taille%+20 top no_horloge%, screen_y-taille%-50 left no_horloge%,screen_x-taille%-20 return
' *** tick de l'horloge tick: s$ = time$ hh% = val(left$(s$,2)) - 3 if hh%<0 then hh% = hh% + 12 mm% = val(mid$(s$,4,2)) - 15 if mm%<0 then mm% = mm% + 60 ss% = val(right$(s$,2)) - 15 if ss%<0 then ss% = ss% + 60 2d_image_paste no_horloge%+2,0,0 2d_pen_width 2 2d_line centre%,centre%,centre%+rayon%/2*cos(hh%*pi/6),centre%+rayon%/2*sin(hh%*pi/6) 2d_line centre%,centre%,centre%+rayon%*7/8*cos(mm%*pi/30),centre%+rayon%*7/8*sin(mm%*pi/30) 2d_pen_width 1 if checked(no_trotteuse%)=1 2d_pen_color 255,0,0 2d_line centre%,centre%,centre%+rayon%*4/5*cos(ss%*pi/30),centre%+rayon%*4/5*sin(ss%*pi/30) end_if if checked(no_numerique%)=1 if taille%<100 print_locate centre%-20,centre%+rayon%+5 : print s$ else print_locate centre%-20,centre%+10 : print s$ end_if end_if 2d_pen_color 0,0,0 if flag%=1 show no_horloge% flag% = 1 end_if return
' *** fonction "sortir dur programme" sortir: file_open_write 1,nom_ini$ file_writeln 1,"; créé le "+date$+" à "+time$+" heures" file_writeln 1,"taille="+str$(taille%) file_writeln 1,"numerique="+str$(checked(no_numerique%)) file_writeln 1,"trotteuse="+str$(checked(no_trotteuse%)) file_close 1 inactive no_val_options% terminate
' *** afficher la page d'aide en mode non-modal aide: show no_aide% to_foreground no_aide% return
' *** afficher la page à-propos en mode modal apropos: inactive 0 show no_apropos% return ' *** fermer la page a-propos close_apropos: hide no_apropos% active 0 to_foreground 0 return
' *** montrer la page de gestion des options en mode modal options: inactive 0 : show no_options% return
' *** fermer la page des options close_options: hide no_options% active 0 to_foreground 0 return
| |
|