JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Feux de signalisation Lun 21 Avr 2014 - 15:57 | |
| Tout d'abord, je vous présente mes meilleurs oeufs. Dans un programme, j'ai un execute_wait qui est très long (plusieurs minutes: il s'agit de la capture d'une page web), et l'utilisateur, moi-même en l'occurence, est bien embêté de ne pas savoir ce qui se pase, si c'est planté, etc. J'ai essayé de mettre un timer pour faire clignoter un truc pendant ce temps, histoire de faire patienter, mais le remède est pire que le mal: en effet le timer ne passe pas pendant l'execute_wait, les appels s'accumulent, et ça finit par un beau plantage ! Alors j'ai fait une petite sub qui permet d'afficher un feu tricolore: vert, orange ou rouge, dans mon esprit c'est rouge: opération interdite, vert: opération autorisée ou terminée, orange: travail en cours, mais on peut interpréter différemment. Avec un petit exemple: - Code:
-
DIM fct%,x%,y%,h% x%=50: y%=100: h%=150
fct% = 0 Feux(fct%,x%,y%,h%): ' init wait 1000 Feux(1,0,0,0): ' vert wait 2000 Feux(2,0,0,0): ' orange wait 2000 Feux(3,0,0,0): ' rouge wait 2000 Feux(4,0,0,0): ' suppression après usage wait 2000 TERMINATE ' ============================================================================== SUB Feux(fct%,x%,y%,h%) ' Feux de signalisation en x%,y%, hauteur h% (largeur automatique = 2*h%/5) ' ini% = 0: initialisation, ini% = 1: feu vert, ini% = 2: feu orange ' ini% = 3 feu rouge, ini% = 4: suppression de l'objet feux IF fct%>0 IF OBJECT_EXISTS(p_f%)=0 THEN EXIT_SUB: ' non initialisé ! n2d_f% = NUMBER_2D_TARGET: 2D_TARGET_IS p_f% END_IF SELECT fct% CASE 0: ' initialisation IF VARIABLE("p_f%") = 0 THEN DIM p_f% IF VARIABLE("h_f%") = 0 THEN DIM h_f% IF VARIABLE("w_f%") = 0 THEN DIM w_f% IF VARIABLE("r_f%") = 0 THEN DIM r_f% IF VARIABLE("n2d_f%") = 0 THEN DIM n2d_f% h_f%=h%: w_f%=2*h%/5: r_f%=w_f%/3 p_f%=8500: WHILE OBJECT_EXISTS(p_f%)=1: p_f%=p_f%+1: END_WHILE PICTURE p_f%: TOP p_f%,y%: LEFT p_f%,x%: WIDTH p_f%,w_f%: HEIGHT p_f%,h% COLOR p_f%,64,64,64 n2d_f% = NUMBER_2D_TARGET 2D_TARGET_IS p_f%: 2D_PEN_WIDTH 2: 2D_PEN_COLOR 128,128,128 2D_LINE 4,4,w_f%-4,4: 2D_POLY_TO w_f%-4,h_f%-4: 2D_POLY_TO 4,h_f%-4 2D_POLY_TO 4,4: 2D_FILL_COLOR 128,128,128: 2D_PEN_WIDTH 1 2D_CIRCLE w_f%/2,h_f%/5,r_f%: 2D_CIRCLE w_f%/2,h_f%/2,r_f% 2D_CIRCLE w_f%/2,4*h_f%/5,r_f% CASE 1: ' Feu vert 2D_FILL_COLOR 0,255,0: 2D_CIRCLE w_f%/2,4*h_f%/5,r_f%: ' feu vert 2D_FLOOD w_f%/2,h_f%/5,128,128,128: 2D_FLOOD w_f%/2,h_f%/2,128,128,128 CASE 2: ' Feu orange 2D_FILL_COLOR 255,153,0: 2D_CIRCLE w_f%/2,h_f%/2,r_f%: ' feu orange 2D_FLOOD w_f%/2,h_f%/5,128,128,128: 2D_FLOOD w_f%/2,4*h_f%/5,128,128,128 CASE 3: ' Feu rouge 2D_FILL_COLOR 255,0,0: 2D_CIRCLE w_f%/2,h_f%/5,r_f%: ' feu rouge 2D_FLOOD w_f%/2,h_f%/2,128,128,128: 2D_FLOOD w_f%/2,4*h_f%/5,128,128,128 CASE 4: ' Suppression de l'objet 2D_TARGET_IS n2d_f%: DELETE p_f% END_SELECT 2D_TARGET_IS n2d_f% END_SUB ' ============================================================================== | |
|
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Feux de signalisation Lun 21 Avr 2014 - 20:02 | |
| Mine de rien, c’est une bonne illustration des commandes 2D_ …. Merci JL35.
A propos : Faut-il inverser les couleurs sur la planète Mars ? | |
|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Feux de signalisation Lun 21 Avr 2014 - 20:09 | |
| Sous forme de SUB, facile à utiliser. C'est pas mal, ça me fait penser au jeu "milles bornes". Alors t'as plus de vacances, JL35, c'est pour ça que tu bosses... A+ | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Feux de signalisation Lun 21 Avr 2014 - 20:13 | |
| A priori je dirais que c'est fort probable, du fait qu'ils marchent sur la tête et que les autos glissent sur le toit.
Une petite remarque concernant la sub ci-dessus: il vaut mieux implanter le picture correspondant (x%,y%) dans un emplacement vierge, s'il y a déjà des objets le picture se glisse par-dessous contrairement à ce que je croyais (je me disais que le dernier objet créé se mettait par-dessus les autres, mais non, il se met dessous...), et le to_foreground ne s'applique pas à un picture. Une idée qui vient: finalement il vaudrait mieux créer un Form spécial, sans bordures, et ça on peut le mettre en avant.
PS salut Jean Claude, on s'est croisés, eh oui j'ai du boulot en retard ! tu vas voir quand tu y seras toi aussi (bientôt), c'est pas drôle !
PS2: ça marche très bien avec un Form sans bordure au lieu d'un Picture, il se met devant, mais l'inconvénient est que sa largeur minimum est de 132 pixels, quoi qu'on fasse (alors qu'on peut réduire la hauteur comme on veut), et c'est bien embêtant. Donc, fausse bonne idée. | |
|
Contenu sponsorisé
| Sujet: Re: Feux de signalisation | |
| |
|