Bonjour,
Il s’agit de modifier la position ou les dimension d’une figure dessine dans un canvas.
A partir d’une procdure je veux modifier x,y,width,Height du rectangle dessin dans le canvas.
J’aurais besoin d’un exemple sur ce sujet.
Paint(…)
g.DrawRect(x,y,width,Height)
return
Vous voulez faire bouger le rectangle tout en l’affichant ? C’est a ?
Je veux par exemple bouger et modifier une figure un rectangle par exemple.
Ce que je ne sais pas faire c’est appeler la figure de lextrieur de paint afin de modifier sa position ou sa dimension.
[quote=115184:@Djamel AIT AMRANE]Je veux par exemple bouger et modifier une figure un rectangle par exemple.
Ce que je ne sais pas faire c’est appeler la figure de lextérieur de paint afin de modifier sa position ou sa dimension.[/quote]
Il existe plusieurs techniques,mais ce que je fais afin de ne pas avoir trop de code dans Paint, c’est de travailler sur une picture property déclarée dans un module ou dans la fenêtre selon les besoins, que je peux modifier comme je veux hors de paint, puis dans Canvas.Paint
, je met ceci :
g.DrawPicture monimage, 0, 0
Ici, ‘monimage’ est la variable globale. Chaque fois que je change monimage, je fais Canvas.Invalidate
pour forcer la mise à jour dans Canvas.Paint
.
You will need to implement the “movement” of the images and implement the “editing” of the images. It is best to use a class and load this class with properties say called “pictureClass”. pictureClass may have properties like “image as picture”, left as integer, top as integer, width as integer, height as integer, isSelected as boolean, isMoved as Boolean, name as String, Index as Integer.
You would then instantiate this class in an “AddImage” method that you would call Michel’s drawpicture graphics method using your custom properties. The mouse movement is having code focused in MouseMove (change your mouse icon if you are over the image to move, mouse down (select the image), mousedrag, moving the image.
There are nice examples of this in the Xojo folder.
HTH!
Je n’ai pas bien compris,
je mets le code qui accomplie une tache dans le canvas:
Il s’agit dexécuter ce code avec comme argument R et PhaseAngle, je dois donc pouvoir agir sur ces deux variables a partir de la procédure principale où elle sont calculées pour enfin afficher le dessin exécuté par ce code.
Paint( g as Graphics, Areas() as RealBasic.Rect )
Dim Trigo as New Maths.Trigo
g.PenHeight=2
g.ForeColor = rgb(0,0,0)
' Angle de Phase, argument en degres
Dim PhaseAngle As Double
'Coordonnées du centre de l'objet dans la picture box.
Dim cX As Double
Dim cY As Double
Dim Lat As Double
Dim R As Double
Dim pX As Double
Dim pY As Double
' Coordonnées du terminateur
Dim qX As Double
Dim qY As Double
Dim Sgn As Integer
Dim ShadedSide As String
' Mode pixel.
'Plot.ScaleMode = 3
'Plot.DrawWidth = 2
' Rayon de l'objet dans la picture box.
R = 70
' coordonnées du centre de l'image dans la picture box.
cX = ((canvas1.width )/2)
cY = ((canvas1.height)/2)
'Lecture de la Phase de 0 a 360°.
PhaseAngle =210 'Abs(Val(Phase_Angle)
If PhaseAngle > 180 Then
ShadedSide = "R"
PhaseAngle = PhaseAngle - 180
Else
ShadedSide = "L"
End If
'
If ShadedSide = "L" Then Sgn = -1 Else Sgn = 1
' Boucle joignant les poles.
For Lat = -90 To 90
pX = cX + R * Cos(PhaseAngle * Trigo.rad) * Cos(Lat * Trigo.rad )
pY = cY - R * Sin(Lat * Trigo.rad)
qX = cX + R * Cos(Lat * Trigo.rad) * Sgn
qY = cY - R * Sin(Lat * Trigo.rad)
' dessine en gris la limite du terminateur .
g.DrawLine(pX, pY,qX, qY)
g.ForeColor = RGB(55,55,55)
Next
return
C’est très simple : actuellement, vous déclarez R et PhaseAngle dans Paint. Donc ces variables n’existent qu’à l’intérieur de l’event. Déclarez plutôt ces deux variables dans un module comme globales et vous pourrez les utiliser où vous voulez. Après en avoir changé la valeur, faites Canvas.Invalidate pour provoquer l’exécution de Paint.
Effectivement, cétait très simple, ça marche bien !
merci Michel.