toutes les explications, et le code nécessaire.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionOption Explicit Private Type Lune X As Double y As Double Ad As Double Dec As Double Lat As Double Lon As Double Elongation As String Fraction As Double Nom As String End Type Private Lune As Lune 'Déclaration des APIs Windows pour l'utilisation des régions Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long Private Declare Function OffsetRgn Lib "gdi32" (ByVal hRgn As Long, ByVal X As Long, ByVal y As Long) As Long Private Declare Function PaintRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As Long 'CombineRgn nCombineMode flag constants Private Const RGN_AND = 1 Private Const RGN_OR = 2 Private Const RGN_XOR = 3 Private Const RGN_DIFF = 4 Private Const RGN_COPY = 5 Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Const Pi As Double = 3.141592653 Const Rad As Double = Pi / 180 Const Deg As Double = 180 / Pi Private Sub Form_Click() Dim X As Long, y As Long Dim Dec As Double, DR As Double AutoRedraw = True ScaleMode = vbPixels 'Scale (0, -90)-(360, 90) BackColor = &HC00000 'Aspect de la Lune Lune.Elongation = "Est" '"Est" ou "Ouest" Lune.Fraction = 0.75 'Valeur allant de 0 to 1 'Diametre de la lune Dim diam As Integer diam = 50 'Positionne la Lune au mileu de la Pic. X = 180 Dec = 0 DR = Dec * Rad 'Ordonnée pour affichage sur projection de Mercator y = Sin(DR) / (1 + Cos(DR)) * Deg 'calcul X , Y X = (ScaleWidth / 360) * X y = (ScaleHeight / 180) * (90 - y) Dim ShowDarkMoon As Boolean Dim lRgn1 As Long, lRgn2 As Long, lRgn3 As Long '_____________ 'Lune entiere lRgn1 = CreateEllipticRgn(0, 0, diam, diam) '__________________________ 'tracé de la partie sombre 'déplacement à l'endroit voulu OffsetRgn lRgn1, X - diam / 2, y - diam / 2 'brosse pour le tracé Dim lBrshDrk As Long If ShowDarkMoon Then lBrshDrk = CreateSolidBrush(&H404040) Else lBrshDrk = CreateSolidBrush(&H400000) End If 'tracé FillRgn hdc, lRgn1, lBrshDrk DeleteObject lBrshDrk 'retour en (0,0) pour la suite OffsetRgn lRgn1, -X + diam / 2, -y + diam / 2 '___________________________________ 'cache rectangulaire pour la moitié lRgn3 = CreateRectRgn(0, 0, diam / 2, diam) If Lune.Elongation = "Ouest" Then _ OffsetRgn lRgn3, diam / 2, 0 'repositionnement du cache CombineRgn lRgn1, lRgn1, lRgn3, RGN_DIFF 'on soustrait le cache à la lune '________________ 'région centrale lRgn2 = CreateEllipticRgn(diam * Lune.Fraction, 0, diam * (1 - Lune.Fraction), diam) If Lune.Fraction < 0.5 Then CombineRgn lRgn1, lRgn1, lRgn2, RGN_DIFF 'région centrale sombre Else CombineRgn lRgn1, lRgn1, lRgn2, RGN_OR 'région centrale éclairée End If '______________________________ 'déplacement à l'endroit voulu OffsetRgn lRgn1, X - diam / 2, y - diam / 2 '______ 'tracé Dim lBrsh As Long lBrsh = CreateSolidBrush(vbWhite) 'brosse pour le tracé FillRgn hdc, lRgn1, lBrsh '____________________________ 'Suppression des objets créé DeleteObject lBrsh DeleteObject lRgn1 DeleteObject lRgn2 DeleteObject lRgn3 Refresh End Sub
Option Explicit Private Type Lune X As Double y As Double Ad As Double Dec As Double Lat As Double Lon As Double Elongation As String Fraction As Double Nom As String End Type Private Lune As Lune 'Déclaration des APIs Windows pour l'utilisation des régions Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long Private Declare Function OffsetRgn Lib "gdi32" (ByVal hRgn As Long, ByVal X As Long, ByVal y As Long) As Long Private Declare Function PaintRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long) As Long 'CombineRgn nCombineMode flag constants Private Const RGN_AND = 1 Private Const RGN_OR = 2 Private Const RGN_XOR = 3 Private Const RGN_DIFF = 4 Private Const RGN_COPY = 5 Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Const Pi As Double = 3.141592653 Const Rad As Double = Pi / 180 Const Deg As Double = 180 / Pi Private Sub cmdAfficher_Click() Dim X As Long, y As Long Dim Dec As Double, DR As Double PicMoon.AutoRedraw = True PicMoon.ScaleMode = vbPixels ' PicMoon.Scale (0, -90)-(360, 90) PicMoon.BackColor = &HC00000 'Aspect de la Lune Lune.Elongation = "Est" '"Est" ou "Ouest" Lune.Fraction = 0.75 'Valeur allant de 0 to 1 'Diametre de la lune Dim diam As Integer diam = 50 'Positionne la Lune au mileu de la Pic. X = 180 Dec = 0 DR = Dec * Rad 'Ordonnée pour affichage sur projection de Mercator y = Sin(DR) / (1 + Cos(DR)) * Deg 'calcul X , Y X = (PicMoon.ScaleWidth / 360) * X y = (PicMoon.ScaleHeight / 180) * (90 - y) Dim ShowDarkMoon As Boolean Dim lRgn1 As Long, lRgn2 As Long, lRgn3 As Long '_____________ 'Lune entiere lRgn1 = CreateEllipticRgn(0, 0, diam, diam) '__________________________ 'tracé de la partie sombre 'déplacement à l'endroit voulu OffsetRgn lRgn1, X - diam / 2, y - diam / 2 'brosse pour le tracé Dim lBrshDrk As Long If ShowDarkMoon Then lBrshDrk = CreateSolidBrush(vbBlack) Else lBrshDrk = CreateSolidBrush(&H400000) End If 'tracé FillRgn PicMoon.hdc, lRgn1, lBrshDrk DeleteObject lBrshDrk 'retour en (0,0) pour la suite OffsetRgn lRgn1, -X + diam / 2, -y + diam / 2 '___________________________________ 'cache rectangulaire pour la moitié lRgn3 = CreateRectRgn(0, 0, diam / 2, diam) If Lune.Elongation = "Ouest" Then _ OffsetRgn lRgn3, diam / 2, 0 'repositionnement du cache CombineRgn lRgn1, lRgn1, lRgn3, RGN_DIFF 'on soustrait le cache à la lune '________________ 'région centrale lRgn2 = CreateEllipticRgn(diam * Lune.Fraction, 0, diam * (1 - Lune.Fraction), diam) If Lune.Fraction < 0.5 Then CombineRgn lRgn1, lRgn1, lRgn2, RGN_DIFF 'région centrale sombre Else CombineRgn lRgn1, lRgn1, lRgn2, RGN_OR 'région centrale éclairée End If '______________________________ 'déplacement à l'endroit voulu OffsetRgn lRgn1, X - diam / 2, y - diam / 2 '______ 'tracé Dim lBrsh As Long lBrsh = CreateSolidBrush(vbWhite) 'brosse pour le tracé FillRgn PicMoon.hdc, lRgn1, lBrsh '____________________________ 'Suppression des objets créé DeleteObject lBrsh DeleteObject lRgn1 DeleteObject lRgn2 DeleteObject lRgn3 PicMoon.Refresh End Sub
puis lui faire subir le mouvement dans le ciel avec la rotation en plus
Donc, je dois trouver un exemple qui va dans ce sens
assurer la rotation de la totalité de l'image de cette picturebox (tu as des exemples dans les codes déposés sur ce forum)
en utilisant le moteur de recherche de ce forum : mot clef : "rotation" - rechercher dans : codes
Je me rappelle avoir essayé de faire la rotation de la lune, mais c’était tout l’arrière plan de lune qui tournait avec
Je dois donc relancer une nouvelle discussion sur ce sujet
,- il ne trouvera pas une image par jourBien sûr que si ! et il y a pléthore de sites.
faire en sorte que le centre de la lune soit placé au centre de la pictureboxCe n'est pas un problème car cette police est à chasse fixe, sinon tu as raison.