OVH Cloud OVH Cloud

Transparence d'un picturebox

3 réponses
Avatar
Thierry
J'utilise VB6
Je veux afficher des courbes avec des picturebox
chaque courbe sera sur une picturebox et chaque picturebox doit etre
transparente ceci dans le but de donner l'impression que toute les courbe
son sur la même picturebox et également pour éviter de redessiner toutes les
courbes si l'une d'entre elle change.
Et voila mon problème je n'arrive pas à rendre transparent une picturebox
!!!

Pouvez vous m'aidez ?
Merci

3 réponses

Avatar
Zoury
Salut Thierry ! :O)

Pouvez vous m'aidez ?



Combien de courbes aurais-tu à redessiner ? Est-ce que tu emplois l'API
graphique de Windows pour le dessin (GDI) ?
Donne plus de détails ... et peux-tu nous montrer ton code actuel s'il n'est
pas trop énorme ?

--
Cordialement
Yanick
MVP pour Visual Basic
Avatar
Thierry
Voila les trois modules principaux de mon logiciel affichant les graphes:
La procédure Rempliraxes dessine le papier semi log, des labels indiquent
l'échelle 10E0 à 10E6
La procédure Ecrirecourbe dessine la courbe dont le numéro est passé en
argument
La procédure HScroll2_Change déplace un curseur pour rechercher les valeurs
des courbes

Les courbes sont acquisent par un module de liaison série et stockées dans
le tableau tabval(4,1,1440) avec
5 courbes,2échelles par courbe, 1440 minutes par courbe soit un jour

Comme je n'arrive pas à utilser la transparence je suis obligé de tout
redessiner à chaque déplacement du curseur.
De plus je ne souhaite pas toujours afficher les 5 courbes en même temps.

Voila peut être qu'avec cesinfos il sera plus facile de comprendre mon
besoin.
Merci


Private Sub Remplireaxes() ' création des axes X et Y du quadrillage
For i = 0 To 6
zz = (Picture1(0).Height - 1500) / 6
tabaxe(0, i) = (Picture1(0).Height - 1000) - zz * i
Next
For i = 0 To 12
zz = (Picture1(0).Width - 1500) / 12
tabaxe(1, i) = (Picture1(0).Width - 750) - zz * i
Next
End Sub

Private Sub Ecrirecourbe(courbe As Integer)
EcretageCourbe 'les valeurs > 1 10E6 et < 1 10E0 ne sont pas affichées
echx = Picture1(0).Width - 1500 ' largeur de la zone quadrillée
echy = Picture1(0).Height - 1500 ' hauteur de la zone quadrillée
x0 = Picture1(0).Width - 750 ' origine x de la zone quadrillée
y0 = Picture1(0).Height - 1000 ' origine y de la zone quadrillée
For i = 0 To 1439
X = echx / 1440 * (1439 - i)
y = echy / 1440 * tabval(courbe, 1, i)
Picture1(0).PSet (x0 - X, y0 - y)
Next
End Sub

Private Sub HScroll2_Change() ' curseur de recherche de valeur
Picture1(0).Cls
Dessineaxes
Dessinheure
For i = 0 To 4
Command2_Click (i)
Next
Picture1(0).ForeColor = vbWhite
echx = Picture1(0).Width - 1500 ' largeur de la zone quadrillée
minix = 750
maxix = Picture1(0).Width - 750
HScroll2.Min = 1
HScroll2.Max = 1440
X = HScroll2.Value
Picture1(0).Line ((minix + X * echx / 1440), 500)-((minix + X * echx /
1440), Picture1(0).Height - 750)
For i = 0 To 4
Text3(i).Text = tabval(i, 0, X)
Next
End Sub

"Zoury" <yanick_lefebvre at hotmail dot com> a écrit dans le message de
news: e%
Salut Thierry ! :O)

Pouvez vous m'aidez ?



Combien de courbes aurais-tu à redessiner ? Est-ce que tu emplois l'API
graphique de Windows pour le dessin (GDI) ?
Donne plus de détails ... et peux-tu nous montrer ton code actuel s'il
n'est
pas trop énorme ?

--
Cordialement
Yanick
MVP pour Visual Basic




Avatar
Fred
Dans son message 42a1fe51$0$11704$
Thierry nous dit :

[...]

Bonsoir,
Cela fait un moment que je n'ai pas fait de graphique mais je crois me
souvenir de deux points :

1) on peut changer le "ScaleMode" en mode utilisateur de façon à adapter les
limites de la zone image au problème. Par exemple tu peux dire que la
largeur du picture box est de 24h30 (24,5) que le point le plus à gauche est
de -15min (-0.25) et le point le plus à droite 24h15 (24,25).
Cela rend le programme beaucoup plus facile à lire et à modifier.

2) Pour tracer, il y a un mode XOR qui permet d'effacer un point en
réécrivant dessus. Pratique pour gérer des déplacements de points sans
affecter le reste. J'ai cru comprendre que tu trace des lignes de projection
sur les axes en fonction du curseur (je ne suis pas rentré dans le détail).
Ce mode (XOR) est tout indiqué pour cela. A chaque changement, tu traces
l'ancienne position puis la nouvelle. Le premier tracé aura pour effet
d'effacer le tracé de la position précédente

Bonne soirée.

--
Fred