PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → HORLOGE ANALOGIQUE en WDXI
HORLOGE ANALOGIQUE en WDXI
Iniciado por monney-peinture, 05,oct. 2007 10:21 - 13 respuestas
Publicado el 05,octubre 2007 - 10:21
Bonjour tous,

Je cherche le moyen d'afficher dans un cercle une aiguille des secondes.
Je fais ça facilement en Quick-Basic (on ne rit pas svp) mais je suis perdu en WD.

Une bonne âme pourait-il m'éguiller sur une piste ou éventuellement me fournir
un bout de code, surtout pour le déplacement de l'aiguille ?

Bonne journée et d'avance merci.
Sam
Publicado el 05,octubre 2007 - 10:52
Personnelement je te conseil de récuprerer un flash et l'integrer à windev.

Si tu tiens vraiment à le programmer toi meme, il faut le dessiner par programmation.
Pour ce faire, tu dois ajouter un champ "image".

pour le code :

//définit qu'on dessine sur cette image et pas sur une autre ^^
dDebutDessin(IMG_IMAGE1)
//pour le mode de dessin
dChangeMode(XORjesaisplusquoi)

//trace une ligne à midi
dLigne(50,50,0,50...)

Bon dev !
Publicado el 05,octubre 2007 - 11:57
Merci, mais ça je sais faire, le problème c'est le calcul des déplacements des aiguilles que
je cherche.
Ou éventuellement traduire le code Quick-basic ci-dessous en WD. (Trop ancien pour WD)

SCREEN 12
CLS
r = 180
X = 320
Y = 240
P = 3.141593 * 2 * r
PAINT (2, 2), 15
CIRCLE (X, Y), r, 0
FOR T = 2 * 3.141593 TO 0 STEP -3.141593 / 6
PSET (SIN(T) * r + X, COS(T) * r + Y), 0
PSET (SIN(T) * (r - 1) + X, COS(T) * (r - 1) + Y), 0
NEXT

timing = TIMER

H = VAL(MID$(TIME$, 1, 2))
M = VAL(MID$(TIME$, 4, 2))
S = VAL(MID$(TIME$, 7, 2))

HB = (2 * 3.141593 * (11 - H + (60 - M) / 60)) / 12
MB = (2 * 3.141593 * (59 - M + 1)) / 60
SB = (2 * 3.141593 * (59 - S + 1)) / 60

LINE (X, Y)-(-SIN(SB) * (r - 2) + X, -COS(SB) * (r - 2) + Y), 4
LINE (X, Y)-(-SIN(MB) * (r - 20) + X, -COS(MB) * (r - 20) + Y), 2
LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0

WHILE a$ <> CHR$(27)
a$ = INKEY$
DO
LOOP WHILE TIMER - timing >= 1
timing = TIMER
LOCATE 1, 1: PRINT TIME$
H = VAL(MID$(TIME$, 1, 2))
M = VAL(MID$(TIME$, 4, 2))
S = VAL(MID$(TIME$, 7, 2))

HB = (2 * 3.141593 * (11 - H + (60 - M) / 60)) / 12
exHB = (2 * 3.141593 * (11 - H + (60 - M + 1) / 60)) / 12
IF M = 0 THEN exHB = (2 * 3.141593 * (11 - H - 59 / 60)) / 12
MB = (2 * 3.141593 * (59 - M + 1)) / 60
exMB = (2 * 3.141593 * (59 - M + 2)) / 60
SB = (2 * 3.141593 * (59 - S + 1)) / 60
exSB = (2 * 3.141593 * (59 - S + 2)) / 60

LINE (X, Y)-(-SIN(exSB) * (r - 2) + X, -COS(exSB) * (r - 2) + Y), 15
LINE (X, Y)-(-SIN(SB) * (r - 2) + X, -COS(SB) * (r - 2) + Y), 4
IF S = 1 THEN
LINE (X, Y)-(-SIN(exMB) * (r - 20) + X, -COS(exMB) * (r - 20) + Y), 15
LINE (X, Y)-(-SIN(MB) * (r - 20) + X, -COS(MB) * (r - 20) + Y), 2
LINE (X, Y)-(-SIN(exHB) * (r - 100) + X, -COS(exHB) * (r - 100) + Y), 15
LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0
END IF
IF INT(exSB) = INT(MB) THEN LINE (X, Y)-(-SIN(MB) * (r - 20) + X, -COS(MB) * (r - 20) + Y), 2
IF INT(exSB) = INT(HB) THEN LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0
IF INT(exMB) = INT(HB) THEN LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0
WEND

Encore merci...
Publicado el 05,octubre 2007 - 12:12
Bonjour,

Donnez-moi votre email.
Je vous envoie une fenêtre qui fait cela

Bon Dev

GH
Publicado el 05,octubre 2007 - 12:21
Merci, mais ça je sais faire, le problème c'est le calcul des déplacements des aiguilles que
je cherche.

Ta question était "Je cherche le moyen d'afficher dans un cercle une
aiguille des secondes." et non "je cherche le moyen de calculer la
position d'une aiguille" -> soit précis... Saturnin n'aurait pas perdu
son temps...

> Ou éventuellement traduire le code Quick-basic ci-dessous en WD. (Trop ancien pour WD)
>
Quel est ton soucis dans la traduction de ce code ?
- tu dis connaitre les fonction de dessins, pas de soucis
- tu fais des calculs de base, pas de soucis
- un timer si j'ai bien suivi, voir l'aide
- récupérer l'heure du systeme en cherchant "heure" dans l'aide on
trouve ça facilement
- en dehors du fait que tu fais tes calculs en radians et que les
fonctions de trigo de WD sont en degrés je ne vois pas ton soucis au vu
de ce que tu donnes comme infos.

eric l.

SCREEN 12
CLS
r = 180
X = 320
Y = 240
P = 3.141593 * 2 * r
PAINT (2, 2), 15
CIRCLE (X, Y), r, 0
FOR T = 2 * 3.141593 TO 0 STEP -3.141593 / 6
PSET (SIN(T) * r + X, COS(T) * r + Y), 0
PSET (SIN(T) * (r - 1) + X, COS(T) * (r - 1) + Y), 0
NEXT

timing = TIMER

H = VAL(MID$(TIME$, 1, 2))
M = VAL(MID$(TIME$, 4, 2))
S = VAL(MID$(TIME$, 7, 2))

HB = (2 * 3.141593 * (11 - H + (60 - M) / 60)) / 12
MB = (2 * 3.141593 * (59 - M + 1)) / 60
SB = (2 * 3.141593 * (59 - S + 1)) / 60

LINE (X, Y)-(-SIN(SB) * (r - 2) + X, -COS(SB) * (r - 2) + Y), 4
LINE (X, Y)-(-SIN(MB) * (r - 20) + X, -COS(MB) * (r - 20) + Y), 2
LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0

WHILE a$ <> CHR$(27)
a$ = INKEY$
DO
LOOP WHILE TIMER - timing >= 1
timing = TIMER
LOCATE 1, 1: PRINT TIME$
H = VAL(MID$(TIME$, 1, 2))
M = VAL(MID$(TIME$, 4, 2))
S = VAL(MID$(TIME$, 7, 2))

HB = (2 * 3.141593 * (11 - H + (60 - M) / 60)) / 12
exHB = (2 * 3.141593 * (11 - H + (60 - M + 1) / 60)) / 12
IF M = 0 THEN exHB = (2 * 3.141593 * (11 - H - 59 / 60)) / 12
MB = (2 * 3.141593 * (59 - M + 1)) / 60
exMB = (2 * 3.141593 * (59 - M + 2)) / 60
SB = (2 * 3.141593 * (59 - S + 1)) / 60
exSB = (2 * 3.141593 * (59 - S + 2)) / 60

LINE (X, Y)-(-SIN(exSB) * (r - 2) + X, -COS(exSB) * (r - 2) + Y), 15
LINE (X, Y)-(-SIN(SB) * (r - 2) + X, -COS(SB) * (r - 2) + Y), 4
IF S = 1 THEN
LINE (X, Y)-(-SIN(exMB) * (r - 20) + X, -COS(exMB) * (r - 20) + Y), 15
LINE (X, Y)-(-SIN(MB) * (r - 20) + X, -COS(MB) * (r - 20) + Y), 2
LINE (X, Y)-(-SIN(exHB) * (r - 100) + X, -COS(exHB) * (r - 100) + Y), 15
LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0
END IF
IF INT(exSB) = INT(MB) THEN LINE (X, Y)-(-SIN(MB) * (r - 20) + X, -COS(MB) * (r - 20) + Y), 2
IF INT(exSB) = INT(HB) THEN LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0
IF INT(exMB) = INT(HB) THEN LINE (X, Y)-(-SIN(HB) * (r - 100) + X, -COS(HB) * (r - 100) + Y), 0
WEND

Encore merci...

Publicado el 05,octubre 2007 - 12:38
Salut,

Voici un code tiré d'un exemple LST qui utilisait une fenêtre interne pour dessiner l'heure dans différentes villes du monde :

Il faut : un champ image et une image d'horloge affichée dedans :
Appeler la procédure suivante dans un timer lancé toutes les secondes :


PROCEDURE AfficheHeure(sChampImage, bAfficheSecondes = Faux)

hHeure est une Heure
nHeure est un entier
nMinute est un entier
nSeconde est un entier
nAngleHeure est un entier
nAngleMinute est un entier
nAngleSeconde est un entier
nLargeur est un entier
nHauteur est un entier

// Récupère l'heure
hHeure = Maintenant()

// Récupère les heure et minute
nHeure = hHeure..Heure
nMinute = hHeure..Minute
nSeconde = hHeure..Seconde

// Récupère les dimensions du champ
nLargeur = {sChampImage, indChamp}..Largeur
nHauteur = {sChampImage, indChamp}..Hauteur

SI nLargeur < nHauteur ALORS nHauteur = nLargeur
SI nHauteur < nLargeur ALORS nLargeur = nHauteur

// Démarre le dessin
dFinDessin(sChampImage)
dDébutDessin(sChampImage, dEffacer)

nCouleur est un entier = RVB(14,47,118)

// L'heure doit être passée en format 12:00
SI nHeure > 12 ALORS nHeure -= 12

// Calcule l'angle
nAngleHeure = nHeure * (360 / 12) - 90
nAngleMinute = nMinute * (360 / 60) - 90
nAngleSeconde = nSeconde * (360 / 60) - 90

// Calcule le point central
nX est un entier = nLargeur / 2 + 5
nY est un entier = nHauteur / 2

// Calcule le point X,Y de l'heure
nHX est un entier = nX + 2 + (Cosinus(nAngleHeure) * (nX - (nLargeur/4)))
nHY est un entier = nY + 2 +(Sinus(nAngleHeure) * (nY - (nLargeur/4)))

// Calcule le point X,Y de la minute
nMX est un entier = nX + 2 +(Cosinus(nAngleMinute) * (nX - (nLargeur/5)))
nMY est un entier = nY + 2 +(Sinus(nAngleMinute) * (nY - (nLargeur/5)))

// Calcule le point X,Y de la seconde
nSX est un entier = nX + 2 +(Cosinus(nAngleSeconde) * (nX - (nLargeur/6)))
nSY est un entier = nY + 2 +(Sinus(nAngleSeconde) * (nY - (nLargeur/6)))

SI bAfficheSecondes ALORS
// Dessine l'aiguille des secondes
dLigne(nX, nY, nSX, nSY, iGrisFonce, (nLargeur/50)) FIN

// Dessine l'aiguille des minutes
dLigne(nX, nY, nMX, nMY, iGrisFonce, (nLargeur/30))
// Dessine l'aiguille de l'heure
dLigne(nX, nY, nHX, nHY, nCouleur, (nLargeur/40))

// Dessine le centre de l'horloge
dCercle(nX - 2, nY - 2, nX + 4, nY + 4, iNoir, nCouleur)


@+
Maax°(51)°
Publicado el 05,octubre 2007 - 12:55
Bonjour et merci d'avance pour la fenêtre...

monney-peinture@bluewin.ch

Je vous tiens au courant...
Salutations et bonne journée.
Sam
Publicado el 05,octubre 2007 - 13:49
Merci à tous pour vos réponses...
Particulièrement à Gérard et Maax°(51)°
Bon dev... et bonne journée.
Sam
Publicado el 27,noviembre 2007 - 15:09
Bonjour,

Je suis également intéressé par votre fenêtre.
Si vous pouvez me la faire passé a cette adresse :
seb2mars25@hotmail.com

Merçi
Publicado el 01,octubre 2008 - 16:08
Je suis aussi super intéressé.
Voilà mon adresse : jerome.langin@gmail.com
Merci d'avance !
Publicado el 24,abril 2010 - 00:07
bonsoir,
je cherche une horloge analogique pour l'inserer dans mon application windev, si vous pouvez m'aider ca sera gentil.
merci.
Publicado el 09,junio 2010 - 12:17
bonjour,
j'ai passé par ce forum en cherchant une solution pour insérer une horloge analogique dans mon application windev.
si vous pouvez m'aidez ca sera gentil,merci.
SALMA.
Publicado el 17,noviembre 2019 - 19:09
Avec Windev

20 lignes de code dans une procédure et 3 jauges aiguilles et le tour est joué
Plus simple tu meurs

Le rendu est tout simplement PARFAIT

N'hésitez pas à me recontacter
Publicado el 21,noviembre 2019 - 23:29
Horloge analogique

20 lignes de code (dans une procédure) et 3 jauges aiguilles (Heure / minutes et seconde) dans votre fenêtre

bernard.andre57@gmail.com

C'est cadeau