2015-03-01
- correction cosmétique
   du modèle du Blog
  ° diaporama occupant
     tout l'écran
  ° message défilant
     démarrant du bord
     droit sous Chrome

Trognon le chaton

En lumière..

Des articles Lesbiens: Camellia Rose ,
Lipsticks [:* Fanny] , Lisa
et des Histoires signées MyLzz59: Mylène écrit (http://mylene-ecrit.blogspot.fr)

Des articles Trans-*: Ma Vie En Rose ,
Wawa's Smile , FtM ? , Thomas Beatie 2

Des Coups de Coeur: EXL ,
Kashimashi ~Girl meets Girl~ ,
Sa Majesté Freddie , Mon Côté Midinette
des Coups de Gueule: Karol relève-toi ,
BlondeBox , 1 pub 2 mR2 [bon courage :D]
et des Coups de Blues: Pile 1 an ,
Baisser de Rideau , Interlude

Du Visual Basic (VB6-VBA): Mlle Hanoï
Boules , Bombes , AnaClock , DigiClock ,
Tris (tetris) ,
et de la Bricologie: Real Barbie Girl

Pis pour les plus grand(e)s, des
S*X TOYS:
DildoBike , Tech To Nique

Et même parfois de la vraie vie:
Impressions de Voyage (Maroc) ,
Chez Mickey , La Tonnelle ,
Nous Nous Sommes Rencontrées

.

La vraie Taunie ..


... Tu me manques :'(


Notre Taz :*




Clock & Zik..

Idée Cadeau..


Attrape-Mouches

dyke goudou gouine homo homoaffectivité homoaffectivity homosexual homosexualité homosexuality homosexuel homosexuelle inverti invertie lesbian lesbianism lesbianisme lesbien lesbienne lez néovagin neovagina réassignation saphique saphisme sapphic sapphism trans transgender transgenre transidentité transidentity transsexalité transsexality transsexual transsexualism transsexualisme transsexuel transsexuelle tribade tribadisme vaginoplastie ...

Le combat continue..

MyLzz59..

.. @gmail.com

Blog français

Ca va encore mieux en le disant.. Important
## Comment "marche" ce Blog / Comment laisser un Commentaire ##

Et pour finir,
Mylène écrit (http://mylene-ecrit.blogspot.fr)N'oubliez pas de visiter aussi
mon blog d'histoires ====>



-MyLzz59-

mardi 23 juin 2009

AnaClock sous Word

.
Présentation

Jusqu'ici, nous avons joué sous Excel, à repeinturlurer les cellules d'une feuille. Histoire de varier les plaisirs, voici un p'tit programme VBA destiné à fonctionner sous Word. Il s'agit d'une horloge analogique, autrement dit "à aiguilles", entièrement créée par code.

Si vous êtes pressé(e)s de la voir à l'oeuvre, vous pouvez commencer par l'intégrer à un nouveau document, et vous préoccuper des explications ultérieurement. Sinon, elles figurent sous ce code..

Le Code

Démarrez Word (version 2000 ou supérieure), ouvrez un nouveau document (vierge), et lancez l'éditeur VBA via le menu Outils > Macros, ou les touches Alt-F11. Repérez (ou affichez) l'explorateur de projets, et double-cliquez sur "ThisDocument". Ceci ouvre une fenêtre de code "ThisDocument (Code)". Effacez les lignes qui s'y trouveraient éventuellement, et collez le code ci-dessous.

Enregistrez (l'icône disquette ou Ctrl-S) le document, refermez l'éditeur VBA, ainsi que le document sauvegardé. Vérifiez au besoin (menu Outils > Macros > Sécurité) que le niveau de sécurité des macros ne soit pas sur "haut". Rouvrez le document, le code devrait démarrer, moyennant peut-être de valider "Activer les macros"..

' -----------------
' Zone Déclarations
' -----------------
Dim TD As Document
Const Cte = 1.74532925194444E-02

' -----------------------
' SUB: Horloge Analogique
' -----------------------
Private Sub Document_Open()
Set TD = ThisDocument
TD.Content.Delete
' Création Décor
With TD.Shapes
.AddShape(msoShapeOval, 50, 50, 500, 500).Name = "TR"
.AddLine(300, 300, 400, 300).Name = "LH"
.AddLine(300, 300, 480, 300).Name = "LM"
.AddLine(300, 300, 500, 300).Name = "LS"
For T = 0 To 11
.AddLine(200, 200, 210, 200).Name = "S" + Chr$(65 + T)
Next T
End With
With TD.Shapes("TR").Line
.ForeColor = &HFF99CC: .Weight = 3
End With
With TD.Shapes("LH").Line
.ForeColor = &HA000&: .Weight = 15
End With
With TD.Shapes("LM").Line
.ForeColor = &HA00000: .Weight = 9
End With
With TD.Shapes("LS").Line
.ForeColor = &HA0: .Weight = 3
End With
For T = 0 To 11
Z$ = "S" + Chr$(65 + T): Aig Z$, 235, 30 * T
Aig Z$, IIf(T Mod 3, 225, 215), 30 * T, 1
With TD.Shapes(Z$).Line
.ForeColor = &H8000A0: .Weight = 7
End With
Next T
' Boucle infinie
Do
' Attendre nouvelle seconde
Do: K! = Int(Timer): DoEvents: Loop While K! = K0!: K0! = K!
' Décomposition
HH! = K! / 3600: MM! = K! / 60 - 60 * Int(HH!): SS! = K! Mod 60
' Aiguilles
Aig "LH", 100, 30 * HH!: Aig "LM", 180, 6 * MM!
Aig "LS", 200, 6 * SS!
Loop
End Sub

' ------------------------------------
' SUB: Déplacer une Extrémité de Ligne
' ------------------------------------
Sub Aig(Nom$, Lg, Ang, Optional No = 2)
TD.Shapes(Nom$).Nodes.SetPosition No, _
300 + Lg * Sin(Ang * Cte), 300 - Lg * Cos(Ang * Cte)
End Sub

Explications

Nous allons utiliser les objets de dessin dont dispose Word, un cercle (TR) pour le cadran, et une série de traits pour le reste, aiguilles et repères. Word regroupe ces objets dans une Collection nommée Shapes. Nous allons invoquer des méthodes de création ".AddKekchose()", lesquelles renvoient l'objet ainsi créé. Au passage, nous renommerons chaque objet, afin de nous y référer facilement ensuite, par exemple pour leur définir l'épaisseur ou la couleur.

Nous créons ainsi les trois aiguilles: heures (LH), minutes (LM), secondes (LS) dont nous positionnons d'entrée le point de départ au centre de notre horloge. De même une boucle génèrera les 12 segments horaires, de 0 heure à 11 heures. Les segments d'heures multiples de 3 (donc 0, 3, 6, et 9) seront plus longs. Ces segments de nomment de "SA" (0 heure) à "SL" (11 heures).

Pour des raisons de commodité, nous travaillerons avec des angles en degrés, auxquels nous appliquerons la constante de conversion en radians (PI/180), l'unité des fonctions COS() et SIN() de VB. En effet, une heure correspond à un angle de 30 degrés, une minute ou seconde (horaire) à 6 degrés.

Petit rappel de géométrie: imaginons les deux axes, se croisant au centre de l'horloge, celui des x en direction de 3h, celui des y en direction de 0h. L'angle en degrés correspond à la rotation de l'aiguille depuis 0h, donc le nombre d'heures, minutes, ou secondes, à leur coefficient près. La projection de l'aiguille sur l'axe des x est sa longueur multipliée par le Sinus de son angle de rotation, celle sur l'axe des y sa longueur multipliée par le cosinus.

C'est la Procédure "Aig" qui va assurer ces calculs. Les Paramètres communiqués à Aig sont:
- le nom de l'objet concerné,
- la longueur, ou distance entre le point à calculer et le centre de l'horloge,
- l'angle en degrés, comme expliqué ci-dessus,
- un paramètre optionnel, qui vaut 2 lorsqu'il est omis. Ce dernier représente le numéro de l'extrémité à recalculer, l'extrémité 1 des aiguilles étant, rappelez-vous, fixée au centre. Ce paramètre optionnel nous servira pour les repères horaires.

Reste à récupérer et convertir en angles les heure, minute et seconde courantes. Pour cela, deux variables, l'une (K!) mémorisant le Timer et l'autre (K0!) servant de point de comparaison, afin de ne réactualiser l'affichage des aiguilles que s'il a évolué.

Le Timer est une fonction numérique qui fournit le nombre de secondes écoulées depuis minuit, centièmes compris, mais nous allons les ignorer ici. Une boucle acquiert le Timer jusqu'à ce qu'il diffère (d'au moins une seconde) de la précédente valeur mémorisée. Contrairement à l'aiguille des secondes, celles des heures et des minutes ne sautent pas d'une unité à l'autre, mais bougent progressivement. Par exemple, lorsqu'il est la demie, l'aiguille des heures est à mi-chemin entre la graduation courante et la suivante.

Une heure vaut 60 minutes, donc 3600 secondes. Le nombre d'heures est le 1/3600ème du Timer. Le nombre de minutes est le 1/60ème du Timer, débarrassé du nombre d'heures entières. Le nombre de secondes est le reste dans le regroupement par 60.

-MyLzz59-

5 Commentaire(s):

Stéphane a dit…
j'y suis arrivé, j'y suis arrivé!!!!
:D
bon j ai pas tout compris des explications! (malgré des cours ..particuliers!) mais on progresse! (ouais , je sais, manquerait plus que je regresse!!! :D)

;-)
:*
MyLzz59 a dit…
Mais je n'en doutais pas, Taz :*
Dis, on s'y recolle quand ? :P
-MyLzz59-
Stéphane a dit…
tu veux un rendez-vous!!!
:D :D :D!
MyLzz59 a dit…
Rhôô, Taz, voyons..
Galopin, va :D :D :D
(je rigole ;))

-MyLzz59-
Stéphane a dit…
galopin...je rajeunis!
;-)