[VB2005] problème sur les traits

Résolu
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010 - 29 sept. 2006 à 18:56
 Utilisateur anonyme - 30 sept. 2006 à 21:07
Salut à tous,

J'ai un problème:
j'ai une form sur laquelle je dispose d'un picture box
l'utilisateur peut créer des trait dont les coordonnées sont sauvegardées sur une base de donnée
il peut aussi créer des rectangles
Le problème est que le rectangle est placé au dessus du trait sachant que le trait est fait sur le picturebox.
N'existe t-il pas un moyen pour mettre le trait au dessus du rectangle aussi ?

Merci à vous

Swan94

16 réponses

Utilisateur anonyme
30 sept. 2006 à 11:53
Bon, ben au lieu d'utiliser des panels, on trace les rectangles à la main.




Private
Rects
As

New
System.Collections.Generic.List(
Of
System.Drawing.Rectangle)

Private
DrawRect
As

Boolean
=
False

Private
PtStart
As
System.Drawing.Point = System.Drawing.Point.Empty

Private
PtEnd
As
System.Drawing.Point = System.Drawing.Point.Empty

Private

Sub
PicFondOnMouseDown(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.MouseEventArgs)
Handles
PicFond.MouseDown

  
If
Args.Button = System.Windows.Forms.MouseButtons.Left
Then

    PtStart = Args.Location

    PtEnd = PtStart

    DrawRect =
True

  
End

If

End

Sub

Private

Sub
PicFondOnMouseMove(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.MouseEventArgs)
Handles
PicFond.MouseMove

  
If
DrawRect
Then

    
Dim
OffPStart
As
System.Drawing.Point = PtStart : OffPStart.Offset(PicFond.Location)

    
Dim
OffSize
As
System.Drawing.Size =
New
System.Drawing.Size(PtEnd.X - PtStart.X, PtEnd.Y - PtStart.Y)

    System.Windows.Forms.ControlPaint.DrawReversibleFrame(
MyBase
.RectangleToScreen(
New
Rectangle(OffPStart, OffSize)), Color.Black, FrameStyle.Dashed)
    PtEnd Args.Location : OffSize
New
System.Drawing.Size(PtEnd.X - PtStart.X, PtEnd.Y - PtStart.Y)

    System.Windows.Forms.ControlPaint.DrawReversibleFrame(
MyBase
.RectangleToScreen(
New
Rectangle(OffPStart, OffSize)), Color.Black, FrameStyle.Dashed)

  
End

If

End

Sub

Private

Sub
PicFond_MouseUp(
ByVal
sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.MouseEventArgs)
Handles
PicFond.MouseUp

  
If
Args.Button = System.Windows.Forms.MouseButtons.Left
Then

    DrawRect =
False

    
Dim
Rect
As

New
System.Drawing.Rectangle(PtStart,
New
System.Drawing.Size(PtEnd.X - PtStart.X, PtEnd.Y - PtStart.Y))

    
If
Rect.Width <> 0
And
Rect.Height <> 0
Then

      
If
Rect.Width < 0
Then
Rect.X += Rect.Width : Rect.Width *= -1

      
If
Rect.Height < 0
Then
Rect.Y += Rect.Height : Rect.Height *= -1

      Rects.Add(Rect)

      
Call
DrawRectangle(PicFond.CreateGraphics(), Rect)

    
End

If

  
End

If

End

Sub

Private

Sub
PicFondOnPaint(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.PaintEventArgs)
Handles
PicFond.Paint

  
For

Each
Rect
As
System.Drawing.Rectangle
In
Rects

    
Call
DrawRectangle(Args.Graphics, Rect)

  
Next

  
' ToDo: Tracer les lignes ici.

End

Sub

Private

Sub
DrawRectangle(
ByVal
Graphics
As
System.Drawing.Graphics,
ByVal
Rect
As
System.Drawing.Rectangle)

  Graphics.DrawRectangle(System.Drawing.Pens.Black, Rect)

End

Sub


Voili, voilou
3
Utilisateur anonyme
29 sept. 2006 à 19:02
Heu ...
Ben tu trace le rectangle et après le trait.
De quelle maniere trace tu tout ca ?



Kenji
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
29 sept. 2006 à 19:08
Le problème est que l'utilisateur peut indifférelent créer l'un ou l'autre en premier

et ma manière la plus simple de créer le tout est d'utiliser
Dim e As System.Drawing.Graphics = Me.picFond.CreateGraphics
puis e.DrawLine

et pour le rectangle une manière que tu m'avais donnée car en fait j'utilise un panel pour simuler le rectangle
avec controls.add(monPanel)

Swan94
0
Utilisateur anonyme
29 sept. 2006 à 19:51
A ben la c'est pas possible.
Ce que tu peux faire, c'est tracer des rectangle au lieu d'utilise des panels.
Ou alors tracer les parties cachées des traits sur les panels. (méthode un tatinet plus compliqué)

Kenji
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 20:07
heu, juste en passant, tu sauvegardes tes dessins de picturebox dans une base de données access ? et si oui, peux-tu me donner la procédure ?
merci
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
29 sept. 2006 à 20:18
Si tu as la solution Charles ça m'interresse.

Pour Vercomax :
j'utilise le système ado.net.
Dans ma base de données j'ai une table par exemple sur les traits où j'inscrit le point de départ et le point d'arrivée. Et quand je le souhaite, je peux redessiner les traits en redefinissants mes coordonnées avec celles contenues dans ma base.

Si tu as besoin de plus de renseignements je reste à ta disposition.

Swan94
0
Utilisateur anonyme
29 sept. 2006 à 20:25
Déjà, est-ce que ces panels on un but bien précis ? Doit t-on pouvoir les déplacées, les redimensionnées, y placer des contrôls dedans, des images ... ?



Kenji
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
29 sept. 2006 à 22:33
Oui ils vont servir de zone et n'oront pas besoin d'être redimmensionnés vu qu'ils seront créés comme tu créé un rectangle sur photoshop ou word. Et de dans il n'y aura rien vu que les images susceptible d'etre au dessus sont mises dans des picturebox.

Voila merci de m'aider.

Swan94
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
30 sept. 2006 à 16:51
Merci mais si je pouvais abuser encore un peu le code que tu mettrais pour les lignes se serait quoi ? (là où t'as mis ' ToDo: Tracer les lignes ici.)

Merci beaucoup

Swan94
0
Utilisateur anonyme
30 sept. 2006 à 17:02
Ben je sais pas justement. Ca dépend de comment tu fait.
Il faut qu tu boucle sur le nombre de lignes que t'as récupéré dans ta bdd et tracer avec les coordonnées.
Je pense que t'as fait une structure ligne non ? Et que t'as placer tout ca dans un tableau ?

Kenji
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
30 sept. 2006 à 17:19
J'te remercie c tout a fait vrai je fais rafraichir les lignes toute les secondes. Mais est-il possible de redimmensionner le rectangle dessinné ?

Au fait t'as planté ta tente sur le forum tu réponds tellement vite

Swan94
0
Utilisateur anonyme
30 sept. 2006 à 17:33
Ben tu m'as dis 3 poste plus haut que ce n'était pas néssesaire de les redimensionnées ?
Et pourquoi rafraichir les lignes toute les secondes ?


Kenji
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
30 sept. 2006 à 17:44
C'est vrai que je te l'ai dit mais bon ca aurai put être une option mais te tracasses pas si c'est plus compliqué laisses.

Le raffraichissement est dut au fait que, je ne sais pas pourquoi, si une autre form ou un message apparait au dessus de la ligne, même une fois qu'elle est partie, la ligne est effacée à l'endroit où est apparue la form. De plus ces lignes relient 2 objets qui sont déplacables en temps réel par l'utilisateur, donc le fait de raffraichir me permet de mettre à jour en direct les coordonnées de la droite.

Voilà

Swan94
0
Utilisateur anonyme
30 sept. 2006 à 17:48
Il faut que tu mette le tracage des ligne dans le paint. La ou j'ai mis le ToDo.



Kenji
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
30 sept. 2006 à 20:51
Encore une fois je te remercie énormément pour l'aide que tu m'apportes.

A la prochaine galère

Swan94
0
Utilisateur anonyme
30 sept. 2006 à 21:07
Kenji
0
Rejoignez-nous