Calque sur Picturebox... [Résolu]

jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 12 nov. 2013 à 10:50 - Dernière réponse : jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention
- 19 nov. 2013 à 19:11
Bonjour,

Vous me direz, cette question a deja été posée, c'est vrai, mais je n'y trouve aucune réponse satsfaisante.

En gros, j'ai codé un petit oscillo, avec une mire, mais sur le même PictureBox.
De ce fait, si j'efface mes traces, j'efface la mire, etc...

L'idée serait donc de tracer "Définitivement" ma mire sur un PictureBox (PictBMire), qui se trouverait au dessus du PictureBox (PictBTrace), qui lui reçoit les traces.

Mais là, je cale, j'ai essayé

PictBTrace.controls.Add(PictBMire)
PictBMire.Size=PictBTrace.clientSize

Ca marche pas. Pas de transparence...

Quelqu'un aurait-il une idée?

Merci, Marc
Afficher la suite 

Votre réponse

8 réponses

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 12 nov. 2013 à 14:47
0
Merci
Salut

Possible que je n'ai pas bien saisi
pourquoi ne pas redessiner la mire à chaque fois ?

à propos de traduction
googletranslate traduit de français en français
En gros, j'ai codé un petit oscillo, avec une mire, mais sur le même PictureBox.
De ce fait, si j'efface mes traces, j'efface la mire, etc...

En gros, J'ai code UN petit oscillo, AVEC juin fange, Mais sur le same PictureBox.
De CE FAIT, SI j'efface mes traces, j'efface la boue, etc.
Commenter la réponse de cs_ShayW
cs_Le Pivert 5360 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 22 septembre 2018 Dernière intervention - 12 nov. 2013 à 15:44
0
Merci
Bonjour essaie ceci:

Public Class Form1
    Private PreviousPoint As Point ' Dernier point de la souris
    Private ThePen As New System.Drawing.Pen(Color.Black, 10) 'Un Pen pour dessiner.
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        PictureBox1.Location = New Point(20, 20)
        PictureBox1.Size = New Size(200, 200)
       PictureBox2.Location = New Point(50, 50)
        PictureBox2.Size = New Size(100, 100)
        PictureBox2.BackColor = Color.Transparent
        PictureBox2.BorderStyle = BorderStyle.FixedSingle
        PictureBox1.BackColor = Color.Ivory
        PictureBox1.Controls.Add(PictureBox2)
    End Sub
    'efface
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ThePen.Color = Color.Ivory
    End Sub
    'dessine
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        ThePen.Color = Color.Black
    End Sub
    Private Sub PictureBox1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        If PictureBox1.Capture Then
            Dim NewPoint As New Point(e.X, e.Y)
            Dim NewGraphic As Graphics = PictureBox1.CreateGraphics()
            NewGraphic.DrawLine(ThePen, PreviousPoint, NewPoint)
            NewGraphic.Dispose()
            PreviousPoint = NewPoint
        End If
    End Sub
    Private Sub PictureBox2_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox2.MouseMove
        If PictureBox2.Capture Then
            Dim NewPoint As New Point(e.X, e.Y)
            Dim NewGraphic As Graphics = PictureBox2.CreateGraphics()
            NewGraphic.DrawLine(ThePen, PreviousPoint, NewPoint)
            NewGraphic.Dispose()
            PreviousPoint = NewPoint
        End If
    End Sub
End Class

Commenter la réponse de cs_Le Pivert
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 12 nov. 2013 à 17:14
0
Merci
Merci pour cette traduction Fanco-Fraçaise Signaler cs_ShayW! Lol

Pour répondre à ta question, les traces se dessinnent de droite à gauche, pour se faire, à chaque nouvelle aquisition, je fais une copie de l'image du picturebox, je decale cette copie de X pixel que je decale vers la gauche, laissant un "blanc" tout à droite où viendra se dessinner les traces de cette dernière aquisition. Si la mire est dessinnée sur le même PictureB, je la copie aussi!!!

D'où mon besoin d'avoir la mire dans un autre PictureBox, par transparence sur le premier.

@cs_Le Pivert : J'ai déja essayé ces instructions, mais je n'arrive pas au résultat que je souhaite, je vais creuser encore!

Merci à tous, ;)
Commenter la réponse de jimy neutron
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 12 nov. 2013 à 17:50
0
Merci
Bonjour,
Existent des solutions utilisant des fonctions de l'Api de Windows pour faire ta mire "transparente"
Elles sont complexes.
Existent également des solutions/astuces simples. En voilà une :
au lieu d'une seule PictureB : une picturebox PictureB0 invisible et une autre PictureB visible ===>>
A chaque étape :
1) tu dessines sans mire sur la picturebox PictueB0
2) tu écrases l'image de PictureB par celle, sans mire donc, de PictureB0 (simple copie)
3) tu ajoutes à pictureB le dessin de ta mire

Commenter la réponse de ucfoutu
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 18 nov. 2013 à 11:39
0
Merci
Bonjour ucfoutu,

Désolé pour ce long silence.
J'ai essayé ta proposition, mais un point pose problème.

La largeur PictureBox qui reçoit les traces varie selon le nombre de points à dessiner. de ce fait, ce PBox est équipé d'un scroolbar pour pouvoir visualiser les traces sur l'ensemble de la mesure. J'ai donc tenté de redessiner la mire à chaque mouvement du scroolbar, mais cela donne un résultat "scintillant" et du coup, très peu esthétique.

Tu disais :
"Existent des solutions utilisant des fonctions de l'Api de Windows pour faire ta mire "transparente"
Elles sont complexes.
"

Peux-tu malgré tout me guider sur cette solution?

Encore merci
Commenter la réponse de jimy neutron
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 18/11/2013 à 12:44
0
Merci
Je veux bien te donner ces indications, mais TU devras savoir t'en servir.
Il me faudrait, sinon, tout écrire à ta place et je déteste les simples (copier/coller)
Les solutions complexes passent par l'utilisation de deux fonctions (entre autres) de l'Api de Windows :
La fonction CreateRectRgn et la fonction CombineRgn, toutes deux de la librairie gdi32
Voilà ! çà, c'est le principal. Le reste, c'est à toi, après les avoir étudiées et comprises, de t'en servir utilement.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 18 nov. 2013 à 14:09
0
Merci
Bonjour
tu peux trouver les memes fonctions dans la class

http://msdn.microsoft.com/en-us/library/system.drawing.region(v=vs.110).aspx
Commenter la réponse de cs_ShayW
jimy neutron 491 Messages postés mercredi 1 février 2006Date d'inscription 18 novembre 2016 Dernière intervention - 19 nov. 2013 à 19:11
0
Merci
Merci UcFoutu, mais je ne penses pas faire partie de gens qui attendent du "tout cuit", j'étudierais donc les instructions que tu me propose.

Merci à toi aussi cs_ShayW! ;)
Commenter la réponse de jimy neutron

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.