Déssiner un rectangle en vba [Résolu]

GrandLynx 16 Messages postés mardi 3 juillet 2007Date d'inscription 22 mai 2012 Dernière intervention - 5 déc. 2008 à 11:36 - Dernière réponse : GrandLynx 16 Messages postés mardi 3 juillet 2007Date d'inscription 22 mai 2012 Dernière intervention
- 9 janv. 2009 à 10:16
Bonjour,
est-ce que quelqu'un pourrait me dire comment on fait pour déssiner un rectangle "en dynamique" en vba!
j'ai essayé d'utiliser les apis donc g un code qui donne ça :

Dim monrectangle
Dim hd As Long
hd = apiGetDC(Me.Hwnd))
pen = apiCreatePen(0, 2, RGB(255, 0, 0))
brush = apiCreateSolidBrush(RGB(255, 0, 0))
hpen = apiSelectObject(hd, pen)
hbrush = apiSelectObject(hd, brush)
 apiRectangle hd, 500, 500, 500, 500

ça ne m'affiche aucune erreur mais ça ne m'affiche rien à l'écran.. ça devrait pas m'afficher un carré rouge?
merci beaucoup si ya qq1 qui se penche sur le pb!
       

El Grande Lynce
Afficher la suite 

8 réponses

Répondre au sujet
piloulac 21 Messages postés dimanche 10 juin 2007Date d'inscription 28 décembre 2008 Dernière intervention - 20 déc. 2008 à 16:26
+3
Utile
Ca y est, Je le tiens !!!!!

Sub Drawrectangle()


    Dim x, z, y, zz    As Single
    Dim Dwg     As Object
    Const X0 = 200          'x origin
    Const Y0 = 200         'y origin
   
    '' Règler les dimensions
    Hauteur = 80
    Largeur = 50
   
   
    DemiPerimetre = Hauteur + Largeur
    PeriMetre = 2 * DemiPerimetre
    TroisQuart = DemiPerimetre + Hauteur


With ActiveSheet
    For z = 0 To PeriMetre Step 0.2
     
        If z <= Hauteur Then   '''Premier Côté
        x = X0
        y = Y0 - z
                    If z = 0 Then
                    Set Dwg = .Drawings.Add(X0, Y0, X0, y, False)
                    Dwg.Interior.ColorIndex = xlNone
                    Dwg.Border.Weight = xlThin
                    Dwg.Border.ColorIndex = 11


                    Else
                    Dwg.AddVertex x, y
                    End If
        ElseIf z <= DemiPerimetre Then     ''' Côté Suivant

                zz = z - Hauteur
                y = Y0 - Hauteur
                x = X0 + zz
                Dwg.AddVertex x, y
             
        ElseIf z <= TroisQuart Then        ''' Côté Suivant

                zz = z - DemiPerimetre
                y = Y0 - Hauteur + zz
                x = X0 + Largeur
                Dwg.AddVertex x, y
                    
        ElseIf z <= PeriMetre Then       ''' Dernier Coté

                zz = z - TroisQuart
                y = Y0
                x = X0 + Largeur - zz
                Dwg.AddVertex x, y
        End If
    Next z
End With
End Sub
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de piloulac
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 5 déc. 2008 à 17:29
0
Utile
Bonjour

Je suppose qu'une de tes fonctions te renvoie une erreur, mais comme tu ne les testes pas...
Tu es dans quelle application ?

Cordialement
Commenter la réponse de cs_Orohena
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 7 déc. 2008 à 13:16
0
Utile
Salut,

MehWnd n'existe pas en vba. Il faut passer autrement :
http://www.codyx.org/snippet_determiner-handle-hwnd-userform-vba_256.aspx#825

__________
  Kenji
Commenter la réponse de Charles Racaud
GrandLynx 16 Messages postés mardi 3 juillet 2007Date d'inscription 22 mai 2012 Dernière intervention - 17 déc. 2008 à 13:48
0
Utile
comment ça je ne les teste pas orohena?

El Grande Lynce
Commenter la réponse de GrandLynx
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 17 déc. 2008 à 18:39
0
Utile
GrandLynx, quand une fonction de l'api échoue tu n'as pas de message d'erreur. Tu dois tester le code retour.


 
Commenter la réponse de cs_Orohena
piloulac 21 Messages postés dimanche 10 juin 2007Date d'inscription 28 décembre 2008 Dernière intervention - 20 déc. 2008 à 02:16
0
Utile
Cette sub dessine un triangle rectangle en "Dynamique"
Il suffit de modifier quelques paramètres, je pense.

Sub DrawTriangle()
    Dim x       As Integer
    Dim y       As Integer
    Dim z       As Single
    Dim Dwg     As Object
    Const A = 100
    Const B = 60
    Const X0 = 300          'x origin
    Const Y0 = 250          'y origin
   
    With ActiveSheet
    For z = 1 To 400        '
            x = 400 + z
            y = 200
            If z = 1 Then
                'First step, so use Add to start Drawing
                Set Dwg = .Drawings.Add(A + X0, Y0, x, y, True)
                Dwg.Interior.ColorIndex = xlNone
            Else
                'Add a vertex
                Dwg.AddVertex x, y
            End If
    Next z
    End With
    Dwg.Border.Weight = xlMedium
    Dwg.Border.ColorIndex = 11
    Dwg.Interior.ColorIndex = 20
End Sub
Commenter la réponse de piloulac
cs_Orohena 578 Messages postés vendredi 26 septembre 2008Date d'inscription 20 novembre 2010 Dernière intervention - 20 déc. 2008 à 03:28
0
Utile
Salut


C'est top, mais ce serait quand même mieux  si ça dessinait un rectangle

GrandLynx, tu travailles sur quoi, Excel, Access, Powerpoint ...

Amicalement
Commenter la réponse de cs_Orohena
GrandLynx 16 Messages postés mardi 3 juillet 2007Date d'inscription 22 mai 2012 Dernière intervention - 9 janv. 2009 à 10:16
0
Utile
hey merci beaucoup,
je sais que si je veux du dynamique je devrais pas travailler sous vbA mais comme c'est pas moi qui choisit....
en tout cas ça m'a été très utile et si je réponds que maintenant!

El Grande Lynce
Commenter la réponse de GrandLynx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.