Paint()

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 l’exté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 d’exé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.