Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PictureBox layer(s)

13 réponses
Avatar
Jacquelin Hardy
Bonjour,

j'ai écrit un logiciel de cartes électroniques marines. Or cette carte
est regénérée très souvent, jusqu'à une fois par seconde.

Je voudrais que, par dessus la carte, soit dessiné un cercle d'azimuth
que la routine suivante (non optimisée) produit.

Ma question: est-ce que ce cercle d'azimuth pourrait rester sur la
PicttureBox en permanence, ie. sans avoir à le redessiner à chaque fois
que je regénère la carte ?

Merci

Jacquelin Hardy



Private Sub PicCarte_Click()

' une pictureBox carrée où le côté = hauteur de Form1
' une ShapeBox (circle)

Dim rayon, cpi

cpi = 0.01745329

picCarte.DrawWidth = 2
picCarte.FillStyle = vbSolid
picCarte.ScaleHeight = Form1.ScaleHeight
picCarte.ScaleWidth = picCarte.ScaleHeight

Shape1.Height = picCarte.ScaleHeight
Shape1.Width = picCarte.ScaleWidth
rayon = Shape1.Width / 2

For i = 0 To 350 Step 10
X1 = rayon + rayon * Cos(i * cpi)
Y1 = rayon - rayon * Sin(i * cpi)
X2 = rayon + (rayon + 20) * Cos(i * cpi)
Y2 = rayon - (rayon + 20) * Sin(i * cpi)
picCarte.Line (X1, Y1)-(X2, Y2)
Next i

For i = 5 To 355 Step 10
X1 = rayon + rayon * Cos(i * cpi)
Y1 = rayon - rayon * Sin(i * cpi)
X2 = rayon + (rayon + 10) * Cos(i * cpi)
Y2 = rayon - (rayon + 10) * Sin(i * cpi)
picCarte.Line (X1, Y1)-(X2, Y2)
Next i

For i = 0 To 359
X1 = rayon + rayon * Cos(i * cpi)
Y1 = rayon - rayon * Sin(i * cpi)
X2 = rayon + (rayon + 5) * Cos(i * cpi)
Y2 = rayon - (rayon + 5) * Sin(i * cpi)
picCarte.Line (X1, Y1)-(X2, Y2)
Next i
End Sub

3 réponses

1 2
Avatar
François Picalausa
On 4 mai, 11:58, "jean-marc" wrote:
"Driss HANIB" wrote in message

news:e%

> Bonjour Jean Marc,

> je découvre (mais je ne connait pas bien les API) les deux focntions que
> tu
> viens de décrire à Jaquelin.
> je crois comprendre qu'elles s'utilisent dans un DC , don , apriori sur
> différents "supports" : ecran (picture box), imprimante ?

> je voulais savoir quelles sont les unités prévues dans ces focntion s :
> pixels, points ..
> A-t-on le choix ?
> car j'utilise , dans un programme , par commodité, les mm
> je suis toujours en peine de convertir ces mm en pixels, points ou (uni té
> DC)

> As-tu un lien ou autre qui puisse m'éclairer la dessus.
> aujourd'hui, j'utilise les commandes line, print , circle.. des objets
> (pictureBox, printer)..
> je voudrai "gagner", en efficacité : rapidité, précision..

> merci de tes conseils

Salut Driss,

effectivement ces fonctions utilisent un DC, on peut donc
les utiliser pour de nombreuses applis.

ces fonctions utilisent comme unités les "logical Unit". Je
ne suis pas un expert du domaine, mais voici un lien
utile:http://msdn2.microsoft.com/en-us/library/ms534247.aspx



Hello,

En particulier la fonction permettant de mapper ces unités logiques en
unités métriques (ou autres) est SetMapMode:
http://msdn2.microsoft.com/en-us/library/ms532673.aspx
Ceci correspond plus ou moins à la propriété ScaleMode des objets
graphiques sous VB.

L'exemple suivant en illustre l'utilisation:
http://groups.google.com/group/microsoft.public.fr.vb/msg/d4a62103a4bce8af

François Picalausa
Avatar
jean-marc
"Driss HANIB" wrote in message
news:%
OK merci

je regarde tout cela. Pour l'instant je m'y perds un peu mais bon comme
dirait un "candidat pour 2 jours encore" : "ensemble tout est possible..en
VB ;o))



Tiens, pour le fun j'ai benchmarké toout ça vite fait.
Ces API sont environ 40% plus rapide que les fonctions
natives de VB.

Pour faire simple, dans le même intervalle de temps, on
peut tracer environ 2 fois plus de lignes (un peu moins).

Ou encore, pour tracer le même nombre de lignes, on met
plus ou moins 2 fois moins de temps (un peu plus).

Pour tracer 10.000 lignes, on passe
- Avec line : 60 ms
- Avec MovetoEx/Lineto : 35 ms

Je me rappelle avoir fait une jolie horloge (en fait
un genre de chronomètre ou la plus petite aiguille devait
avancer toutes les 10 millisecondes). Avec Line, ça
clignotait, c'était très laid. Avec ces 2 API, plus
de clignotement, une fluidité parfaite.

Bon week end



Vote le matin, BBQ à midi, Sieste l'après-midi ...

Bon We aussi !

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
Driss HANIB
Merci François pour ton aide comme merci à jean Marc
Avec vous, on avance..

Driss


"François Picalausa" a écrit dans le message de
news:
On 4 mai, 11:58, "jean-marc" wrote:
"Driss HANIB" wrote in message

news:e%

> Bonjour Jean Marc,

> je découvre (mais je ne connait pas bien les API) les deux focntions que
> tu
> viens de décrire à Jaquelin.
> je crois comprendre qu'elles s'utilisent dans un DC , don , apriori sur
> différents "supports" : ecran (picture box), imprimante ?

> je voulais savoir quelles sont les unités prévues dans ces focntions :
> pixels, points ..
> A-t-on le choix ?
> car j'utilise , dans un programme , par commodité, les mm
> je suis toujours en peine de convertir ces mm en pixels, points ou


(unité
> DC)

> As-tu un lien ou autre qui puisse m'éclairer la dessus.
> aujourd'hui, j'utilise les commandes line, print , circle.. des objets
> (pictureBox, printer)..
> je voudrai "gagner", en efficacité : rapidité, précision..

> merci de tes conseils

Salut Driss,

effectivement ces fonctions utilisent un DC, on peut donc
les utiliser pour de nombreuses applis.

ces fonctions utilisent comme unités les "logical Unit". Je
ne suis pas un expert du domaine, mais voici un lien
utile:http://msdn2.microsoft.com/en-us/library/ms534247.aspx



Hello,

En particulier la fonction permettant de mapper ces unités logiques en
unités métriques (ou autres) est SetMapMode:
http://msdn2.microsoft.com/en-us/library/ms532673.aspx
Ceci correspond plus ou moins à la propriété ScaleMode des objets
graphiques sous VB.

L'exemple suivant en illustre l'utilisation:
http://groups.google.com/group/microsoft.public.fr.vb/msg/d4a62103a4bce8af

François Picalausa
1 2