Post by SpeedMaster » 26 Oct 2017, 14:56
ScottMeyer wrote:
J'ai pas trouvé comment on peut créer le " Canvas Surface " à partir de la position X, Y du Gui . On n'a actuellement que la hauteur et largeur. Une idée ?
Il est possible de contenir l'entièreté du "canvas" dans un " gui control " il faut pour cela spécifier un " hwnd name " pour le contrôle et utiliser la fonction
Viewport() avec le "nom hwnd" du contrôle.
joedf wrote:Il ya une fonction Canvas.Surface.Rotate(Angle)
Oui, il est aussi possible de faire tourner le canvas cela marche pour les dessins mais j'ai pas encore trouvé le moyen de faire tourner le texte.
La rotation s'effectue par rapport au coin supérieur gauche du canvas et non par rapport à son centre, il faut alors compenser en décalant le canvas avec la fonction
translate() pour qu'il reste visible.
Voici un nouvel exemple (canvas dans un " text control " et rotation du contenu)
Code: Select all
;https://github.com/Uberi/Canvas-AHK
#include canvas.ahk
gui, -dpiscale
gui, font, s18 bold
gui, add, text, x10 y10, Mon Titre
gui, font, s12 normal
gui, add, button, x50 y50 grotate, Rotate
gui, add, text, , Le canvas est maintenant contenu dans un " text control " de 400 x 400 `nCliquez sur le canvas pour faire tourner son contenu
gui, add, text, w400 h400 x100 y150 grotate hwndMon_cadre border, ;create a container control for ex. a text control and specify the hwnd name for ex. hwndMy_container_box
s := new Canvas.Surface(400,400) ;create a new drawing area
s.Clear(0xFFA0A0A0) ;change la couleur du fond en gris
s.Smooth := "Best" ;antialiasing (améliore la qualité de l'image) .Smooth := "None" "Good" or "Best"
Gui, +LastFound
v := new Canvas.Viewport(Mon_cadre).Attach(s) ; use viewport function with hwnd name of a control to enclose the canvas in it for ex. v := new Canvas.Viewport(My_container_box).Attach(s)
crayon_rouge := new Canvas.Pen(0xFFFF0000,1)
crayon_vert := new Canvas.Pen(0xFF00FF00,1)
crayon_jaune := new Canvas.Pen(0x80FFFF00,5)
b := new Canvas.Brush(0xAAFF00FF)
f := new Canvas.Font("arial",18)
s.Text(new Canvas.Brush(0xaaFFFFFF),f,"test `nde dessin",300,200) ;Text(Brush,Font,Value,X,Y,W = "",H = "")
gui, +resize
Gui, Show, x10 y10 w800 h600, Canvas Demo
gosub, space
Return
GuiClose:
ExitApp
space:
s.DrawRectangle(crayon_jaune,30,80,300,50) ;DrawRectangle(pen,posx,posy,Width,Height)
s.FillRectangle(b,50,50,50,50) ;FillRectangle(brush,posx,posy,Width,Height)
s.DrawEllipse(crayon_jaune,150,150,50,100) ;DrawEllipse(pen,posx,posy,Width,Height)
s.Line(crayon_vert,15,20,300,300) ;draw a line .Line(Pen,x1,y1,x2,y2)
PointArray:=[[30,200],[30,300],[100,300]] ;set an array of points for the polygon [[X1,Y1],[X2,Y2],[X3,Y3]]
s.DrawPolygon(crayon_rouge,PointArray) ;draw a polygon (triangle)
v.Refresh()
Return
rotate:
s.Clear(0xFFA0A0A0)
s.Translate(40,-30) ;decaler le contenu du canvas de 40 px vers la droite et 30 px vers le haut
s.rotate(10) ;effectuer une rotation de 10° ver la droite
s.DrawRectangle(crayon_jaune,30,80,300,50) ;DrawRectangle(pen,posx,posy,Width,Height)
s.FillRectangle(b,50,50,50,50) ;FillRectangle(brush,posx,posy,Width,Height)
s.DrawEllipse(crayon_jaune,150,150,50,100) ;DrawEllipse(pen,posx,posy,Width,Height)
s.Line(crayon_vert,15,20,300,300) ;draw a line .Line(Pen,x1,y1,x2,y2)
PointArray:=[[30,200],[30,300],[100,300]] ;set an array of points for the polygon [[X1,Y1],[X2,Y2],[X3,Y3]]
s.DrawPolygon(crayon_rouge,PointArray) ;draw a polygon (triangle)
v.Refresh()
return
Cette librairie n's pas encore fini de nous révéler tous ses secrets. Si vous avez d'autres exemples merci de nous le faire savoir.
[quote="ScottMeyer"]
J'ai pas trouvé comment on peut créer le " Canvas Surface " à partir de la position X, Y du Gui . On n'a actuellement que la hauteur et largeur. Une idée ? :wtf:
[/quote]
Il est possible de contenir l'entièreté du "canvas" dans un " gui control " il faut pour cela spécifier un " hwnd name " pour le contrôle et utiliser la fonction [c]Viewport()[/c] avec le "nom hwnd" du contrôle. 8-)
[quote="joedf"]Il ya une fonction Canvas.Surface.Rotate(Angle)[/quote]
Oui, il est aussi possible de faire tourner le canvas cela marche pour les dessins mais j'ai pas encore trouvé le moyen de faire tourner le texte.
La rotation s'effectue par rapport au coin supérieur gauche du canvas et non par rapport à son centre, il faut alors compenser en décalant le canvas avec la fonction [c]translate()[/c] pour qu'il reste visible.
Voici un nouvel exemple (canvas dans un " text control " et rotation du contenu) ;)
[code]
;https://github.com/Uberi/Canvas-AHK
#include canvas.ahk
gui, -dpiscale
gui, font, s18 bold
gui, add, text, x10 y10, Mon Titre
gui, font, s12 normal
gui, add, button, x50 y50 grotate, Rotate
gui, add, text, , Le canvas est maintenant contenu dans un " text control " de 400 x 400 `nCliquez sur le canvas pour faire tourner son contenu
gui, add, text, w400 h400 x100 y150 grotate hwndMon_cadre border, ;create a container control for ex. a text control and specify the hwnd name for ex. hwndMy_container_box
s := new Canvas.Surface(400,400) ;create a new drawing area
s.Clear(0xFFA0A0A0) ;change la couleur du fond en gris
s.Smooth := "Best" ;antialiasing (améliore la qualité de l'image) .Smooth := "None" "Good" or "Best"
Gui, +LastFound
v := new Canvas.Viewport(Mon_cadre).Attach(s) ; use viewport function with hwnd name of a control to enclose the canvas in it for ex. v := new Canvas.Viewport(My_container_box).Attach(s)
crayon_rouge := new Canvas.Pen(0xFFFF0000,1)
crayon_vert := new Canvas.Pen(0xFF00FF00,1)
crayon_jaune := new Canvas.Pen(0x80FFFF00,5)
b := new Canvas.Brush(0xAAFF00FF)
f := new Canvas.Font("arial",18)
s.Text(new Canvas.Brush(0xaaFFFFFF),f,"test `nde dessin",300,200) ;Text(Brush,Font,Value,X,Y,W = "",H = "")
gui, +resize
Gui, Show, x10 y10 w800 h600, Canvas Demo
gosub, space
Return
GuiClose:
ExitApp
space:
s.DrawRectangle(crayon_jaune,30,80,300,50) ;DrawRectangle(pen,posx,posy,Width,Height)
s.FillRectangle(b,50,50,50,50) ;FillRectangle(brush,posx,posy,Width,Height)
s.DrawEllipse(crayon_jaune,150,150,50,100) ;DrawEllipse(pen,posx,posy,Width,Height)
s.Line(crayon_vert,15,20,300,300) ;draw a line .Line(Pen,x1,y1,x2,y2)
PointArray:=[[30,200],[30,300],[100,300]] ;set an array of points for the polygon [[X1,Y1],[X2,Y2],[X3,Y3]]
s.DrawPolygon(crayon_rouge,PointArray) ;draw a polygon (triangle)
v.Refresh()
Return
rotate:
s.Clear(0xFFA0A0A0)
s.Translate(40,-30) ;decaler le contenu du canvas de 40 px vers la droite et 30 px vers le haut
s.rotate(10) ;effectuer une rotation de 10° ver la droite
s.DrawRectangle(crayon_jaune,30,80,300,50) ;DrawRectangle(pen,posx,posy,Width,Height)
s.FillRectangle(b,50,50,50,50) ;FillRectangle(brush,posx,posy,Width,Height)
s.DrawEllipse(crayon_jaune,150,150,50,100) ;DrawEllipse(pen,posx,posy,Width,Height)
s.Line(crayon_vert,15,20,300,300) ;draw a line .Line(Pen,x1,y1,x2,y2)
PointArray:=[[30,200],[30,300],[100,300]] ;set an array of points for the polygon [[X1,Y1],[X2,Y2],[X3,Y3]]
s.DrawPolygon(crayon_rouge,PointArray) ;draw a polygon (triangle)
v.Refresh()
return
[/code]
Cette librairie n's pas encore fini de nous révéler tous ses secrets. Si vous avez d'autres exemples merci de nous le faire savoir. :clap: