Calque sur Picturebox... [Résolu]

Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
- - Dernière réponse : jimy neutron
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
- 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 

8 réponses

Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
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
Messages postés
6345
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 novembre 2019
88
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
214
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
Messages postés
3251
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
16 octobre 2019
46
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
Messages postés
491
Date d'inscription
mercredi 1 février 2006
Statut
Membre
Dernière intervention
18 novembre 2016
1
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