[autoit]Urgent! help me!

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

abdelwahed

Membre
Apr 27, 2013
6
0
901
Bonjour ;
bon voila mon problème j'espère que vous pouvez m'aider :

je veux créer un objet(dans un gui) , et quand on clique sur "left button"(dans le gui) je veux que l'objet se dérige vers la position cliqué, et le gros problème j'ai besoin d'une aiguille qui indique le chemin en se déplaçant .
désolé pour les fautes d'orthographes et Merci beaucoup vous êtes sympa :)
voila déjà mon éssaie :
Code:
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
 #include <Misc.au3>
Example()

Func Example()
	AutoItSetOption("GUIOnEventMode", 1)

	_GDIPlus_Startup() ;initialize GDI+
	Local Const $iWidth = 700, $iHeight = 700, $iBgColor = 0x303030 ;$iBGColor format RRGGBB

	$g_hGUI = GUICreate("GDI+ example", $iWidth, $iHeight) ;create a test GUI
	GUISetState(@SW_SHOW)

	;create buffered graphics frame set for smoother gfx object movements
	$g_hGfx = _GDIPlus_GraphicsCreateFromHWND($g_hGUI) ;create a graphics object from a window handle
	$g_hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $g_hGfx) ;create a Bitmap object based on a graphics object
	$g_hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($g_hBitmap) ;get the graphics context of the image / bitmap to draw on image / bitmap
	_GDIPlus_GraphicsSetSmoothingMode($g_hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;sets the graphics object rendering quality (antialiasing)

	$g_hBrush = _GDIPlus_BrushCreateSolid(0xFF8080FF) ;create a solid Brush object
	GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

	Local Const $iDeg = ACos(-1) / 180 ;ACos(-1) is nearly pi
	Local $iSize = 50, $iX_Center = ($iWidth - $iSize) / 2, $iY_Center = ($iHeight - $iSize) / 2, $iXPos, $iYPos, $iAngle = 0
	Local Const $iDots = 16, $iAngelDist = 360 / $iDots, $iRadius = 200

	Do

		If _IsPressed(01) Then
				_GDIPlus_GraphicsClear($g_hGfxCtxt, 0xFFFFFFFF ) ;clear bitmap with given color (AARRGGBB format)

			Local $aPos = MouseGetPos()
            _GDIPlus_GraphicsFillEllipse($g_hGfxCtxt, $aPos[0], $aPos[1], 20, 20, $g_hBrush) ;draw dots in a circle

		_GDIPlus_GraphicsDrawImageRect($g_hGfx, $g_hBitmap, 0, 0, $iWidth, $iHeight) ;copy drawn bitmap to GUI
			EndIf
	Until Not Sleep(20) ;Sleep() always returns 1 and Not 1 is 0
EndFunc   ;==>Example
Func _exit()
	Exit
EndFunc
 

Nociif

2b || !2b
V
Sep 23, 2011
2,607
4
944
push location
Discord
Nociif#5969
Salut !

Désolé de t'avoir fait attendre si longtemps.

Si j'ai bien compris, tu souhaiterais afficher un point et que celui-ci reste tant que l'on reste appuyé sur le clique gauche de la souris.

En reprenant ton code initial, voici ce que j'ai fait:
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <Misc.au3>
Example()

Func Example()
AutoItSetOption("GUIOnEventMode", 1)

_GDIPlus_Startup() ;initialize GDI+
Local Const $iWidth = 700, $iHeight = 700, $iBgColor = 0x303030 ;$iBGColor format RRGGBB

$g_hGUI = GUICreate("GDI+ example", $iWidth, $iHeight) ;create a test GUI
GUISetState(@SW_SHOW)

;create buffered graphics frame set for smoother gfx object movements
$g_hGfx = _GDIPlus_GraphicsCreateFromHWND($g_hGUI) ;create a graphics object from a window handle
$g_hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $g_hGfx) ;create a Bitmap object based on a graphics object
$g_hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($g_hBitmap) ;get the graphics context of the image / bitmap to draw on image / bitmap
_GDIPlus_GraphicsSetSmoothingMode($g_hGfxCtxt, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;sets the graphics object rendering quality (antialiasing)

$g_hBrush = _GDIPlus_BrushCreateSolid(0xFF8080FF) ;create a solid Brush object
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

Local Const $iDeg = ACos(-1) / 180 ;ACos(-1) is nearly pi
Local $iSize = 50, $iX_Center = ($iWidth - $iSize) / 2, $iY_Center = ($iHeight - $iSize) / 2, $iXPos, $iYPos, $iAngle = 0
Local Const $iDots = 16, $iAngelDist = 360 / $iDots, $iRadius = 200

Do

If _IsPressed(01) Then
;_GDIPlus_GraphicsClear($g_hGfxCtxt, 0xFFFFFFFF ) ;clear bitmap with given color (AARRGGBB format)

Local $aPos = MouseGetPos()
Local $aFormPos = WinGetPos($g_hGUI)
Local $aCalculPos[2] = [ $aPos[0]-$aFormPos[0]-12,$aPos[1]-$aFormPos[1]-32] ;On recalcul la position du point par rapport à la position de la souris, de la fenêtre et de ses bordures
_GDIPlus_GraphicsFillEllipse($g_hGfxCtxt, $aCalculPos[0], $aCalculPos[1], 20, 20, $g_hBrush) ;draw dots in a circle

_GDIPlus_GraphicsDrawImageRect($g_hGfx, $g_hBitmap, 0, 0, $iWidth, $iHeight) ;copy drawn bitmap to GUI
EndIf
Until Not Sleep(10) ;Sleep() always returns 1 and Not 1 is 0
EndFunc ;==>Example
Func _exit()
Exit
EndFunc

J'ai modifié les lignes suivantes:
;_GDIPlus_GraphicsClear($g_hGfxCtxt, 0xFFFFFFFF ) ;clear bitmap with given color (AARRGGBB format)
J'ai supprimé cette ligne qui enlevait le point à chaque fois que tu en ajoutais un
Local $aFormPos = WinGetPos($g_hGUI)
Local $aCalculPos[2] = [ $aPos[0]-$aFormPos[0]-12,$aPos[1]-$aFormPos[1]-32] ;On recalcul la position du point par rapport à la position de la souris, de la fenêtre et de ses bordures
et j'ai ajouté ces 2 lignes qui permettent de calculer avec plus de précision la position du point.
Voici le résultat obtenue:
9EHQrLC.png


En èsperant t'avoir aidé
 
Status
Not open for further replies.