Dessiner des cercles, carrés, lignes avec la souris
Publié : ven. 19/sept./2008 0:54
bonsoir
Dessiner avec la souris, ce n'est pas aussi facile que ça,
j'ai toujours mon problème de clic gauche, je n'ai pas
beaucoup chercher, ce code utilise le clic droit pour dessiner
mais j'ai quand mémé fait quelques essais avec pas mal de commande,
ça ma pris la tête alors, je crois que je vais être obligé comme la dit Denis dans mon exemple de zoom
de passer par les Hooks, si quelqu'un a la solution a ce problème. car pour ce code de dessin,
j'ai rechercher un exemple de ce type sur les sites fr,de,en, et je n'en ai pas trouver un seul,
de dessin avec la souris, peut être que j'ai pas bien chercher, mais enfin voila!.
on trouve la souris qui fait des trainée sur l'écran, ça c'est sur lolll
mais du dessin a la souris avec de la géométrie que dalle. alors j'ai essayer de le faire un petit truc,
mais pour le moment j'ai rencontrer quelques difficultés avec ce code, surtout avec la souris, voila!!
code mis a jour avec l'aide du Soldat inconnu merci
[Modérateur] J'ai refais un titre de sujet propre
Dessiner avec la souris, ce n'est pas aussi facile que ça,
j'ai toujours mon problème de clic gauche, je n'ai pas
beaucoup chercher, ce code utilise le clic droit pour dessiner
mais j'ai quand mémé fait quelques essais avec pas mal de commande,
ça ma pris la tête alors, je crois que je vais être obligé comme la dit Denis dans mon exemple de zoom
de passer par les Hooks, si quelqu'un a la solution a ce problème. car pour ce code de dessin,
j'ai rechercher un exemple de ce type sur les sites fr,de,en, et je n'en ai pas trouver un seul,
de dessin avec la souris, peut être que j'ai pas bien chercher, mais enfin voila!.
on trouve la souris qui fait des trainée sur l'écran, ça c'est sur lolll
mais du dessin a la souris avec de la géométrie que dalle. alors j'ai essayer de le faire un petit truc,
mais pour le moment j'ai rencontrer quelques difficultés avec ce code, surtout avec la souris, voila!!
code mis a jour avec l'aide du Soldat inconnu merci
Code : Tout sélectionner
; ########################################################################
; dessiner c'est pas gagné? alors voila un modeste exemple de #
; dessin de cercles, carres, lignes, avec la mouse par Kernadec 09/2008 #
; ########################################################################
Global xM.l, yM.l, xm1.l, ym1.l, dessin.l, BState
Global wl.l, wh.l, Color.l, coul1.l, coul2.l, coul3.l
Procedure MakeWinScreenshot(ImageNr, hwnd, Width, Height)
StopDrawing()
hImage = CreateImage(ImageNr, Width, Height)
hdc = StartDrawing(ImageOutput(ImageNr))
BitBlt_(hdc, 0, 0, Width, Height, GetDC_(hwnd), 0, 0, #SRCCOPY)
StopDrawing()
ProcedureReturn hImage
EndProcedure
wl = 600
wh = 600
hwnd = OpenWindow(0, 0, 0, wl, wh, "Dessiner avec PureBasic ('£') Kernadec 09/2008", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #WS_OVERLAPPEDWINDOW)
If CreateGadgetList(WindowID(0))
CreateImage(0, WindowWidth(0), WindowHeight(0))
CreateImage(1, WindowWidth(0), WindowHeight(0))
If CreateMenu(2, WindowID(0))
MenuTitle("Outils")
MenuItem(3, "Ligne")
MenuItem(4, "Carre")
MenuItem(5, "Cercle")
MenuItem(6, "Point")
MenuItem(7, "Gomme")
MenuItem(8, "Couleur")
MenuItem(9, "Quitter")
EndIf
EndIf
hShotWindow = FindWindow_(0, "Dessiner avec PureBasic ('£') Kernadec 09/2008")
If hShotWindow
hWinBmp = MakeWinScreenshot(0, hShotWindow, WindowWidth(0), WindowHeight(0))
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), hWinBmp)
EndIf
dessin = 3
Repeat
event = WindowEvent()
Select event
Case #PB_Event_Gadget ;#### select event code du soldat Inconnu
Select EventGadget() ;#### pour contourner le probleme du clic gauche
Case 0 ; Evenement sur l'image #### que je remercie encore au passage pour tout
Select EventType() ;#### son travail interessant dans les codes qu'il post
Case #PB_EventType_LeftClick
MBState = #True
xm1 = WindowMouseX(0)
ym1 = WindowMouseY(0)
EndSelect ;###########################################
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 3
dessin = 3
Case 4
dessin = 4
Case 5
dessin = 5
Case 6
dessin = 6
Case 7
dessin = 7
Case 8
Color.l = ColorRequester()
If Color > - 1
co1 = Red(Color) : co2 = Green(Color) : co3 = Blue(Color)
EndIf
Case 9
event = #PB_Event_CloseWindow
EndSelect
Case #WM_LBUTTONUP
MBState = #False
StartDrawing (WindowOutput(0))
GrabImage(1, 0, 0, 0, WindowWidth(0), WindowHeight(0))
StopDrawing()
Case #WM_MOUSEMOVE
If MBState = #True
xM = WindowMouseX(0)
yM = WindowMouseY(0)
StartDrawing (WindowOutput(0))
DrawImage(ImageID(0), 0, 0, WindowWidth(0), WindowHeight(0))
DrawingMode(4)
X2 = Abs(Pow(xM - xm1, 2))
Y2 = Abs(Pow(yM - ym1, 2))
Radius = Sqr(X2 + Y2)
If dessin = 3
LineXY(xm1, ym1, xM, yM, RGB(co1, co2, co3))
EndIf
If dessin = 4
Box(xm1, ym1, xM - xm1, yM - ym1, RGB(co1, co2, co3))
EndIf
If dessin = 5
Ellipse(xm1, ym1, Radius, Radius, RGB(co1, co2, co3))
EndIf
StopDrawing()
If dessin = 6
StartDrawing (ImageOutput(0))
Repeat
xm2 = WindowMouseX(0)
ym2 = WindowMouseY(0)
Ellipse(xm2, ym2, 1, 1, RGB(co1, co2, co3))
Until #WM_LBUTTONUP
StopDrawing()
EndIf
If dessin = 7
StartDrawing (ImageOutput(0))
Repeat
xm2 = WindowMouseX(0)
ym2 = WindowMouseY(0)
Ellipse(xm2, ym2, 5, 5, Point(1, 1))
Until #WM_LBUTTONUP
StopDrawing()
EndIf
StartDrawing (WindowOutput(0))
hShotWindow = FindWindow_(0, "Dessiner avec PureBasic ('£') Kernadec 09/2008")
If hShotWindow
hWinBmp = MakeWinScreenshot(1, hShotWindow, WindowWidth(0), WindowHeight(0))
SetGadgetState(0, hWinBmp)
EndIf
EndIf
Case #PB_Event_CloseWindow
CloseWindow(0)
Break
EndSelect
Until event = #PB_Event_CloseWindow