[v4 beta 5] - Utilisation des images [Résolu]
[v4 beta 5] - Utilisation des images [Résolu]
http://patrick.claude.free.fr/DEV/glissement.zip
ces 2 codes sont identiques, un en pb v3.94 l'autre bidouillé en v4
en v4 le déplacement d'une image laisse une trace, alors que en v3 y'a rien...
bizarre
il s'agit d'un code adapté des exemples de windev...
patrick
ces 2 codes sont identiques, un en pb v3.94 l'autre bidouillé en v4
en v4 le déplacement d'une image laisse une trace, alors que en v3 y'a rien...
bizarre
il s'agit d'un code adapté des exemples de windev...
patrick
-
- Messages : 1202
- Inscription : sam. 31/déc./2005 23:52
Ah ouais la pub c'est fort chez eux genre:
- "Atelier de Génie Logiciel", pov Léonard.
- "Développez 10 fois plus vite !", plus vite que quoi ?
- "C'est le standard", si qqun peut prévenir Brian Kernighan ou Dennis Ritchie
.
- "Accès natif aux bases de données", faut juste débourser 4482 euros (hors taxes).
- "5 jours suffisent pour s'auto-former à Windev", mais à quoi servent les formations payantes qu'ils organisent ?
Des trucs du genre y'en a à la pelle sur leur site.
Je vais pas dériver dans la programmation elle-même sinon ça va tourner en débat stérile.
- "Atelier de Génie Logiciel", pov Léonard.
- "Développez 10 fois plus vite !", plus vite que quoi ?
- "C'est le standard", si qqun peut prévenir Brian Kernighan ou Dennis Ritchie

- "Accès natif aux bases de données", faut juste débourser 4482 euros (hors taxes).
- "5 jours suffisent pour s'auto-former à Windev", mais à quoi servent les formations payantes qu'ils organisent ?
Des trucs du genre y'en a à la pelle sur leur site.
Je vais pas dériver dans la programmation elle-même sinon ça va tourner en débat stérile.
Vive le thread-safe !
en supprimant le gadget image
et en dessinant directos sur la fenetre
et en redessinant l'image dans une callback
cela ne fait plus de trace
, mais les petits navions clignotent...
je suppose qu'il faudrait placer le redessin des pitits navion également dans la callback....
²
et en dessinant directos sur la fenetre
et en redessinant l'image dans une callback
cela ne fait plus de trace

je suppose qu'il faudrait placer le redessin des pitits navion également dans la callback....
Code : Tout sélectionner
;; Sujet:
;; ------
;; Glissement de champs.
;; Cet exemple présente comment gérer le Glissement d'icones sur une image
;; de fond.
;; Les événements souris sont gérés par la fonction Evenement.
;; Une procédure WLangage "Glisse" est utilisée pour contrôler Les champ à
;; glisser et la surface autorisée lors du Glissement.
;; pour intégrer Cet exemple dans votre fenêtre:
;; 1. Copiez la variable composée publique "Glisser" dans le code
;; d'initialisation de votre fenêtre
;; 2. Copiez Les trois lignes d'initialisation des événements.
;; 3. Modifiez la liste des champs "glissant" de la procédure Glisse.
;; Note: la surface de Glissement est délimitée par le champ image "FOND".
;; Ce champ peut contenir ou non un fichier image (.BMP ou autre).
Structure stru_glisser
InitX.w ;; position X souris initiale
InitY.w ;; position Y souris initiale
PosX.w ;; position cadre haut gauche
PosY.w ;; position cadre haut gauche
id.l
champ.s ;; Nom du champ déplacé
EndStructure
Enumeration
#window
#FOND
#AVION1
#AVION2
#AVION3
#Img_fond
#img_avion
EndEnumeration
;; Initialisation de la procédure de gestion d'événement
;Evénement("Glisse","",513) ;;513=WM_LBUTTONDOWN=bouton gauche enfoncé
;Evénement("Glisse","*.",512) ;;512=WM_MOUSEMOVE=déplacement souris
;Evénement("Glisse","*.",514) ;;514=WM_LBUTTONUP=bouton gauche relâché
Procedure WindowCallback(WindowID, Message, lParam, wParam)
If Message = #WM_PAINT
If StartDrawing(WindowOutput(#window))
DrawImage(ImageID(#Img_fond),0,0)
StopDrawing()
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure glisse()
NumEVE.w ;; Numéro de l'événement à traiter
PosX.w: PosY.w ;; Nouvelle position des champs
MemoEtat.w ;; Etat de l'objet
glisser.stru_glisser
If OpenWindow(#window,0,0,627,394,#PB_Window_SystemMenu,"Glissement d'objet")
If CreateGadgetList(WindowID(#window))
If LoadImage(#img_avion, "AVION.bmp")
ImageGadget(#AVION1,154,107,29,24,ImageID(#img_avion))
ImageGadget(#AVION2,353,76,29,24,ImageID(#img_avion))
ImageGadget(#AVION3,192,266,29,24,ImageID(#img_avion))
EndIf
; If LoadImage(#Img_fond, "carte.bmp")
; ImageGadget(#FOND,0,0,619,363,ImageID(#Img_fond))
; EndIf
LoadImage(#Img_fond, "carte.bmp")
EndIf
If StartDrawing(WindowOutput(#window))
DrawImage(ImageID(#Img_fond),0,0)
StopDrawing()
EndIf
SetWindowCallback(@WindowCallback())
Repeat
NumEVE=WaitWindowEvent() ;; récupère le n° de l'événement à traiter
Select NumEVE
Case #PB_Event_Gadget
Select EventGadget()
Case #AVION1
glisser\Champ ="Avion1"
;; Mémorise la position initiale de la souris
glisser\InitX = WindowMouseX(#window) ;; position X de la souris
glisser\InitY = WindowMouseY(#window) ;; position Y de la souris
glisser\PosX = glisser\InitX ;; Posit initiale X du champ
glisser\PosY = glisser\InitY ;; Posit initiale Y du champ
glisser\id = #AVION1
Case #AVION2
glisser\Champ ="Avion2"
;; Mémorise la position initiale de la souris
glisser\InitX = WindowMouseX(#window) ;; position X de la souris
glisser\InitY = WindowMouseY(#window) ;; position Y de la souris
glisser\PosX = glisser\InitX ;; Posit initiale X du champ
glisser\PosY = glisser\InitY ;; Posit initiale Y du champ
glisser\id = #AVION2
Case #AVION3
glisser\Champ ="Avion3"
;; Mémorise la position initiale de la souris
glisser\InitX = WindowMouseX(#window) ;; position X de la souris
glisser\InitY = WindowMouseY(#window) ;; position Y de la souris
glisser\PosX = glisser\InitX ;; Posit initiale X du champ
glisser\PosY = glisser\InitY ;; Posit initiale Y du champ
glisser\id = #AVION3
EndSelect
Case 512 ;; WM_MOUSEMOVE=déplacement souris
If glisser\Champ<>"" ;; vérifie SI un Glissement est en cours
;; Calcule Les nouvelles coordonnées de l'objet
PosX=glisser\PosX+(WindowMouseX(#window)-glisser\InitX)
PosY=glisser\PosY+(WindowMouseY(#window)-glisser\InitY)
;; vérifie si le champ est toujours sur l'image FOND
If PosX<0
PosX=0
Else
If PosX>WindowWidth(#window)
PosX=WindowWidth(#window)
EndIf
EndIf
If PosY<0
PosY=0
Else
If PosY>WindowHeight(#window)
PosY=WindowHeight(#window)
EndIf
EndIf
ResizeGadget(glisser\id,PosX,PosY,-1,-1)
EndIf
Case 514
If glisser\Champ<>""
ResizeGadget(glisser\id,PosX,PosY,-1,-1)
glisser\id=-1
glisser\Champ=""
EndIf
Case #WM_PAINT
SetGadgetState(#AVION1,ImageID(#img_avion))
SetGadgetState(#AVION2,ImageID(#img_avion))
SetGadgetState(#AVION3,ImageID(#img_avion))
EndSelect
Until NumEVE = #PB_Event_CloseWindow
EndIf
EndProcedure
glisse()
Code : Tout sélectionner
Structure stru_glisser
InitX.w ;; position X souris initiale
InitY.w ;; position Y souris initiale
PosX.w ;; position cadre haut gauche
PosY.w ;; position cadre haut gauche
ID.l
champ.s ;; Nom du champ déplacé
EndStructure
Enumeration
#window
#FOND
#AVION1
#AVION2
#AVION3
#Img_fond
#img_avion
EndEnumeration
;; Initialisation de la procédure de gestion d'événement
;Evénement("Glisse","",513) ;;513=WM_LBUTTONDOWN=bouton gauche enfoncé
;Evénement("Glisse","*.",512) ;;512=WM_MOUSEMOVE=déplacement souris
;Evénement("Glisse","*.",514) ;;514=WM_LBUTTONUP=bouton gauche relâché
Procedure Callback(WindowID, Message, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_PAINT
ps.PAINTSTRUCT
hdc=BeginPaint_(WindowID(#window),ps)
hdcMem=CreateCompatibleDC_(hdc)
SelectObject_(hdcMem,ImageID(#Img_fond))
BitBlt_(hdc,0,0,ImageWidth(#Img_fond),ImageHeight(#Img_fond),hdcMem,0,0,#SRCCOPY)
DeleteDC_(hdcMem)
EndPaint_(WindowID(#window),ps)
EndSelect
ProcedureReturn result
EndProcedure
Procedure glisse()
NumEVE.w ;; Numéro de l'événement à traiter
PosX.w: PosY.w ;; Nouvelle position des champs
MemoEtat.w ;; Etat de l'objet
glisser.stru_glisser
mem_x.l
mem_y.l
If OpenWindow(#window,0,0,627,394,#PB_Window_SystemMenu,"Glissement d'objet")
If CreateGadgetList(WindowID(#window))
If LoadImage(#img_avion, "AVION.bmp")
ImageGadget(#AVION1,154,107,29,24,ImageID(#img_avion))
ImageGadget(#AVION2,353,76,29,24,ImageID(#img_avion))
ImageGadget(#AVION3,192,266,29,24,ImageID(#img_avion))
EndIf
LoadImage(#Img_fond, "carte.bmp")
EndIf
SetWindowCallback(@Callback())
Repeat
NumEVE=WaitWindowEvent() ;; récupère le n° de l'événement à traiter
Select NumEVE
Case #PB_Event_Gadget
Select EventGadget()
Case #AVION1
glisser\champ ="Avion1"
;; Mémorise la position initiale de la souris
glisser\InitX = WindowMouseX(#window) ;; position X de la souris
glisser\InitY = WindowMouseY(#window) ;; position Y de la souris
glisser\PosX = glisser\InitX ;; Posit initiale X du champ
glisser\PosY = glisser\InitY ;; Posit initiale Y du champ
glisser\ID = #AVION1
Case #AVION2
glisser\champ ="Avion2"
;; Mémorise la position initiale de la souris
glisser\InitX = WindowMouseX(#window) ;; position X de la souris
glisser\InitY = WindowMouseY(#window) ;; position Y de la souris
glisser\PosX = glisser\InitX ;; Posit initiale X du champ
glisser\PosY = glisser\InitY ;; Posit initiale Y du champ
glisser\ID = #AVION2
Case #AVION3
glisser\champ ="Avion3"
;; Mémorise la position initiale de la souris
glisser\InitX = WindowMouseX(#window) ;; position X de la souris
glisser\InitY = WindowMouseY(#window) ;; position Y de la souris
glisser\PosX = glisser\InitX ;; Posit initiale X du champ
glisser\PosY = glisser\InitY ;; Posit initiale Y du champ
glisser\ID = #AVION3
EndSelect
Case 512 ;; WM_MOUSEMOVE=déplacement souris
If glisser\champ<>"" ;; vérifie SI un Glissement est en cours
;; Calcule Les nouvelles coordonnées de l'objet
PosX=glisser\PosX+(WindowMouseX(#window)-glisser\InitX)
PosY=glisser\PosY+(WindowMouseY(#window)-glisser\InitY)
;; vérifie si le champ est toujours sur l'image FOND
If PosX<0
PosX=0
Else
If PosX>WindowWidth(#window)
PosX=WindowWidth(#window)
EndIf
EndIf
If PosY<0
PosY=0
Else
If PosY>WindowHeight(#window)
PosY=WindowHeight(#window)
EndIf
EndIf
If mem_x<>PosX And mem_y<>PosY
ResizeGadget(glisser\ID,PosX,PosY,-1,-1)
mem_x=PosX : mem_y=PosY
SetGadgetState(#AVION1,ImageID(#img_avion))
SetGadgetState(#AVION2,ImageID(#img_avion))
SetGadgetState(#AVION3,ImageID(#img_avion))
EndIf
EndIf
Case 514
If glisser\champ<>""
;ResizeGadget(glisser\ID,PosX,PosY,-1,-1)
glisser\ID=-1
glisser\champ=""
EndIf
EndSelect
Until NumEVE = #PB_Event_CloseWindow
EndIf
EndProcedure
glisse()