Bonjour , j'aimerai savoir comment faire pour créer un OBJET tels que shape carré ou cercle , mais cette fois si , TRIANGLE ??
merci d'avance
amicalement lucas
Bonjour , j'aimerai savoir comment faire pour créer un OBJET tels que shape carré ou cercle , mais cette fois si , TRIANGLE ??
merci d'avance
amicalement lucas
et le post est plus vieux que celui-ci.
à-t'on affaire à un skysofrène, à une personne à la mémoire infonctionnelle ou plus simplement à un floodeur invétéré?![]()
mais lol , si je vous demande comment un OBJET triangle , c'est bien parcke le code que je vous avez presenté ne le faisait pas , il dessiné bien un TRIANGLE , mais ce n'était pas un OBJET , il n'avait aucune propriété tel que VISIBLE , BACKCOLOR ....
Je pense que tu finira bien par comprendre...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 Private Type COORD x As Long y As Long End Type Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As Any, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As Any, ByVal nCount 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 GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Const ALTERNATE = 1 Const WINDING = 2 Const BLACKBRUSH = 4 Private Sub Form_Paint() Dim poly(1 To 4) As COORD, NumCoords As Long, hBrush As Long, hRgn As Long Me.Cls vbPoly = "Diabolo" If vbPoly = "Triangle" Then NumCoords = 3 Me.ScaleMode = vbPixels poly(1).x = Form1.ScaleWidth / 2 poly(1).y = Form1.ScaleHeight / 2 poly(2).x = Form1.ScaleWidth / 4 poly(2).y = 3 * Form1.ScaleHeight / 4 poly(3).x = 3 * Form1.ScaleWidth / 4 poly(3).y = 3 * Form1.ScaleHeight / 4 End If If vbPoly = "Diabolo" Then NumCoords = 4 Me.ScaleMode = vbPixels poly(1).x = Form1.ScaleWidth / 4 poly(1).y = Form1.ScaleHeight / 4 poly(2).x = 3 * Form1.ScaleWidth / 4 poly(2).y = Form1.ScaleHeight / 4 poly(3).x = Form1.ScaleWidth / 4 poly(3).y = 3 * Form1.ScaleHeight / 4 poly(4).x = 3 * Form1.ScaleWidth / 4 poly(4).y = 3 * Form1.ScaleHeight / 4 End If hBrush = GetStockObject(BLACKBRUSH) hRgn = CreatePolygonRgn(poly(1), NumCoords, ALTERNATE) If hRgn Then FillRgn Me.hdc, hRgn, hBrush DeleteObject hRgn End Sub Private Sub Form_Resize() Form_Paint End Sub
Justement, tu doit mettre des variables par exemple dans ton code du genre VisibleDiabolo = True ce ne doit pas etre trop compliqué a mettre si? Et alors lors du visible=false tu fais un repaint et dans le repaint tu test la prop
pour ce qui est de la couleur.. Je sais pas mais bon...
Code : Sélectionner tout - Visualiser dans une fenêtre à part hBrush = GetStockObject(BLACKBRUSH)
A LUCAS !!!
VB n'a pas fait un tel contrôle car il ne servait à rien et qu'un triangle est, de surcroit une figure indéformable !!!!
J'interviens ici car trop c'est trop !
Tu as littéralement inondé ce forum pour une babiole :
200 messages à ce seul sujet rédigés par toi
plus du triple avec les réponses qui t'ont été faites !
cela fait beaucoup pour bien peu !!!!!
*Et que je te cherche sur le Web une "soluce".... et que je te la manipule.... et que ceci ... et que cela....
à coup de copier-collers dans tous les sens... et que je te reviens avec une api, un floodfill... et je ne sais quoi d'autre...
et que je te reviens en voulant faire clignoter... puis changer la couleur.... et que d'autres en rajoutent dans tous les sens ...
et en avant... et en arrière....
Alors : j'en ai personnellement assez de ce cirque à 2 sous espagnols et vais y mettre un terme, car cela m'apparaît nécessaire !
Qu'est un triangle dans un rectangle ? ce n'est jamais que 2 segments reliant chacun des 2 points de la base au milieu du côté opposé à la base.
Qu'est ton "sablier" dans un rectangle ? ce n'est jamais que la construction des deux diagonales de ce rectangle
comment construire ces segments ? par calcul arithmétique élémentaire (niveau primaire)
Qu'est un remplissage ? une succession de segments
Quelle est la couleur de remplissage ? celle donnée aux segments successifs .
Comment se traduit la "transparence" du contour ? en donnant simplement à ce contour la couleur du fond sur lequel est le rectangle (la picturebox)
Comment fait-on tout cela ? le plus bêtement du monde !
Alors :
Voilà un exemple paramétrable pour un triangle avec la pointe en haut.
Sont paramétrables les dimensions de la picturebox (donc du triangle) et la couleur du triangle
Sur une form :
un bouton de commande command1 et une picturebox picture1 (mets la au centre, pour éviter les débordements et fais une Form assez grande pour tes essais !
donne la couleur de fond que tu veux à ta Form (la picturebox s'y adaptera)
Change ensuite à ta guise les paramètres couleur et dimensions... et lance...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 Private Sub Command1_Click() Dim couleur As Long, largeur As Integer, hauteur As Integer, sens As String couleur = RGB(0, 255, 255) largeur = 1000 hauteur = 1000 triangle couleur, largeur, hauteur End Sub Sub triangle(couleur, largeur, hauteur) Dim CX, CY, F, F1, F2, I With Picture1 .Width = largeur .Height = hauteur .BackColor = Me.BackColor .BorderStyle = 0 End With DoEvents Picture1.ScaleMode = 3 CX = Picture1.ScaleWidth / 2 CY = Picture1.ScaleHeight Picture1.DrawWidth = 3 Picture1.ForeColor = couleur For I = 0 To 50 Step 2 F = I / 50 F1 = 1 - F F2 = 1 + F Picture1.Line (CX * F1, CY)-(CX, CY * F1) Picture1.Line -(CX * F2, CY) Picture1.Line -(CX, CY * F2) Next I DoEvents End Sub
Voilà ! C'était tout ! En lieu et place de tout ce déploiement que j'ai vu provoquer tous ces "posts"
Ne viens maintenant pas m'interroger sur comment en faire un avec la tête en bas ou directement un en forme de 2 triangles symétriques !
Tu fais comme moi : tu calcules (arithmétique élémentaire)... un point c'est tout !
Bon et bien , JMFMARQUE , je ne sais quoi dire , sauf Merci
Désolé si j'ai douté de tes compétences , mais faut me comprendre , mon patron me demande de lui fournir un activeX répondant à un cahier des charges bien particulier auquel je ne peut echapper ( à cause des normes ) donc oui j'ai poster 200 messages , mais ca ma bcp aidé .
Donc mon Projet proprement dit est terminer , maintenant , il ne me reste plus qu'à me pencher sur le probléme des pages de propriété , du moins rendre cette page presentable , grace à des TabStrips , mes tests de communications entre l'appli dvp en vb6 et l'automate marche trés bien .
Donc un grand merci![]()
Non, lucas, ne dis pas encore merci !
Je vais te faire une confession :
Afin d'être certain de ce que, pour la pointe en bas, tu ne contenterais pas d'un copier-coller facilement adaptable j'ai volontairement "compliqué" un peu !
Il y a 100 fois plus simple à faire !Hé oui !
Les indications que je t'ai données devraient te permettre, sans presqu'aucun calcul, de parvenir à tes fins, tant pour la tête en bas que pour le sablier, avec.... beaucoup plus simple encore!
A toi de me montrer que tu es "alerte" !
Montre-moi le code que tu est capable d'écrire (beaucoup plus simple, j'insiste) sur ces seules indications (lis et relis ce que j'ai écrit plus haut... c'est ultra simple)
bon voila , j'ai reussi à faire tracer mon sablier dans la picture box avec ta méthodeet j'ai pas trouver de lignes à supprimer vu que je vais utiliser en PROPRIETE , taille , background , mais il faut ke je rajoute la position de la picture box dans la form ^^
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub triangle(couleur, taille) Dim CX, CY, F, F1, F2, I With Picture1 .Width = taille / 2 .Height = taille .BackColor = Me.BackColor .BorderStyle = 0 .ScaleMode = 0 End With DoEvents CX = Picture1.Width CY = Picture1.Height Picture1.DrawWidth = 1 Picture1.ForeColor = couleur For I = 0 To 100 Step 1 F = I / 100 F1 = 0 + F F2 = 1 - F Picture1.Line (CX * F1, 0)-(CX * F2, CY) Next I DoEvents End Sub
merci encore
1) pour la suppression de lignes ? T'es pas astucieux ! au lieu de "balayer" de bas en haut, il suffit de "balayer" en segments latérauxet pfff... pratiquement plus de calculs ! (il ne s'agit pas de supprimer des lignes mais d'un changement radical d'approche !
je te laisse voir)
2) pour le reste ? des paramètres à rajouter en command1 et dans la procédure, c'est tout (je reviens avec çà dans 3 minutes !)
et tu "passes" les valeurs de gauche et de haut en appelant ta procédure !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub triangle(couleur, largeur, hauteur, gauche, haut) With Picture1 .Width = taille / 2 .Height = taille .BackColor = Me.BackColor .BorderStyle = 0 .ScaleMode = 0 .left = gauche .top = haut End With . . . end sub
Dis-moi : tu as une variable taille que je ne vois définie nulle part, par contre je continue à voir hauteur et largeur, dont tu ne te sers pas ! Etonnant !
mais je c po si tu as vu , mais il n'y a plus QU'UNE SEUL LIGNE DE TRACER , et NON PLUS COMME TU L'AVAIS FAIT ........
Code : Sélectionner tout - Visualiser dans une fenêtre à part Picture1.Line (CX * F1, 0)-(CX * F2, CY)
C'est vrai (n'avais pas vu) !
Mais ce 100, c'est quoi, la dedans ?
Allez : un indice :
4 points (les 4 coins) : X1,Y1 X2,Y2 X3,Y3 et X4,Y4
et 1 segment X1,Y1 à X3,Y3 qui "voyage avec ses abcisses se modifiant, en haut, de X1 à X3 et en bas, de X4 a X2
sans jamais modifier l'ordonnée haute ni l'ordonnée basse
les abcisses par incrémentation en haut et par décrémentation en bas (ou le contraire, à ta guise...)![]()
super fastoche !
Allez (je dois partir) !
Une seule ligne de calcul (pas 2)![]()
et j'ai intégré tes paramètres de positionnement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Private Sub Command1_Click() Dim couleur As Long, largeur As Integer, hauteur As Integer, sens As String couleur = RGB(0, 255, 255) largeur = 1000 hauteur = 1000 haut = 100 gauche = 200 triangle couleur, largeur, hauteur, haut, gauche End Sub Sub triangle(couleur, largeur, hauteur, haut, gauche) Dim i As Integer With Picture1 .Width = largeur .Height = hauteur .BackColor = Me.BackColor .BorderStyle = 0 .Top = haut .Left = gauche End With Picture1.ScaleMode = 3 Picture1.DrawWidth = 3 Picture1.ForeColor = couleur DoEvents For i = 0 To Picture1.ScaleWidth Picture1.Line (i, 0)-(Picture1.ScaleWidth - i, Picture1.ScaleHeight) '<<<=== tout est là Next i DoEvents End Sub![]()
T'as vu comme c'était simple ?
Google et le reste ? du pipeau la plupart du temps ! Ton cerveau ? du solide, normalement ! C'est tout !
et pas de ""100" plus que douteux ! et totalement paramétrable....
euh , et bien leest la simplement car la vanne atteint une certaine grandeur max , auquel cas si je metté 50 , comme tu avais mis au début , et bien mon sablier n'etait pas Colorier entierement , il y avait des lignes qui n'etait pas tracerFor I = 0 To 100 Step 1
merci encore , mais jsuis désolé![]()
j'ai encore une question à propos des TABSTRIPS , je post une new question
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager