Avec le code ci-dessous, essayer d'attraper le trait bleu entre la colonne A et B et déplacer le trait. Si on va trop vite, malheureusement le trait reste affiché pendant le déplacement.
Et puis, comment ont fait les programmeurs pour déplacer un trait sans détruire le quadrillage ?
Code : Tout sélectionner
Enumeration
#Fenetre_principale
#Canvas
EndEnumeration
#largeur_colonne=100
#hauteur_ligne=30
Global drag_entete=#False
;Font_entete = LoadFont(#PB_Any, "tahoma" , 8, #PB_Font_Bold)
Procedure grille()
;CLS
If StartDrawing(CanvasOutput(#Canvas))
Box(0, 0, 800, 590, RGB(255,255,255))
StopDrawing()
EndIf
;dessin colonne
For x=#hauteur_ligne To 800 Step #largeur_colonne
If StartDrawing(CanvasOutput(#Canvas))
LineXY(x, 0, x, 590, RGB(0,0,255))
StopDrawing()
EndIf
Next x
;dessin ligne
For x=#hauteur_ligne To 600 Step #hauteur_ligne
If StartDrawing(CanvasOutput(#Canvas))
LineXY(0, x, 800, x, RGB(0,0,255))
StopDrawing()
EndIf
Next x
EndProcedure
Procedure entete_colonne()
;fond gris
StartDrawing(CanvasOutput(#Canvas))
For i=0 To 7
FillArea(25+(i*100), 25, RGB(0,0,255) , RGB(208,208,208))
FillArea(15, 15+(i*30), RGB(0,0,255) , RGB(208,208,208))
Next i
For i=0 To 6;i=0
DrawText(70+(i*100),5,Chr(65+i),0,RGB(208,208,208))
Next i
StopDrawing()
EndProcedure
OpenWindow(#Fenetre_principale, 0, 0, 800, 600, "CanvasGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
;ScrollAreaGadget(0, 10, 10, 290,120, 375, 155, 30)
CanvasGadget(#Canvas, 0, 10, 800, 590,#PB_Canvas_Border|#PB_Canvas_ClipMouse|#PB_Canvas_Keyboard|#PB_Canvas_DrawFocus)
; #PB_Canvas_Border : Draws a border around the gadget.
; #PB_Canvas_ClipMouse: Automatically clips the mouse To the gadget area While a mouse button is down.
; #PB_Canvas_Keyboard : Allows the gadget To receive the keyboard focus And keyboard events.
; #PB_Canvas_DrawFocus: Draws a focus rectangle on the gadget If it has keyboard focus.
grille() ; dessin de la grille
entete_colonne() ;dessin des en-têtes de colonne
Repeat
Evenement=WaitWindowEvent()
Select Evenement
Case #PB_Event_Gadget
Select EventGadget()
Case #CANVAS ; Le canvasgadget
Select EventType()
Case #PB_EventType_MouseEnter
Case #PB_EventType_MouseLeave
Case #PB_EventType_MouseMove
cx=GetGadgetAttribute(#CANVAS,#PB_Canvas_MouseX)
; Debug cx
If drag_entete= #True
Debug "ok"
If StartDrawing(CanvasOutput(#Canvas))
LineXY(cx-1, 0, cx-1, 600, RGB(255,255,255))
LineXY(cx, 0, cx, 600, RGB(0,0,255))
StopDrawing()
EndIf
EndIf
; Case #PB_EventType_MouseWheel
; Case #PB_EventType_LeftButtonDown ;: The left mouse button was pressed
Case #PB_EventType_LeftButtonUp ; The left mouse button was released
drag_entete= #False
Case #PB_EventType_LeftClick ; A click With the left mouse button
cx=GetGadgetAttribute(#CANVAS,#PB_Canvas_MouseX)
If cx=30 Or cx=130
drag_entete= #True
Debug cx
EndIf
; Case #PB_EventType_LeftDoubleClick ; A double-click With the left mouse button
; Case #PB_EventType_RightButtonDown ; The right mouse button was pressed
; Case #PB_EventType_RightButtonUp ; The right mouse button was released
Case #PB_EventType_RightClick ; A click With the right mouse button
grille()
entete_colonne()
; Case #PB_EventType_RightDoubleClick; A double-click With the right mouse button
; Case #PB_EventType_MiddleButtonDown; The middle mouse button was pressed
; Case #PB_EventType_MiddleButtonUp ; The middle mouse button was released
; Case #PB_EventType_Focus ; The gadget gained keyboard focus
; Case #PB_EventType_LostFocus ; The gadget lost keyboard focus
Case #PB_EventType_KeyDown ; A key was pressed
;Case #PB_EventType_KeyUp ; A key was released
; Case #PB_EventType_Input ;: Text input was generated
Case #PB_EventType_KeyUp
quitte=GetGadgetAttribute(#CANVAS, #PB_Canvas_Key)
;Debug quitte
If quitte=27;27 = esc
quit=1
EndIf
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Fenetre_principale
CloseWindow(#Fenetre_principale)
Break
EndSelect
EndSelect
Until quit = 1