Page 1 sur 1

[v4 beta 5] - Utilisation des images [Résolu]

Publié : mer. 08/mars/2006 18:11
par Patrick88
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

Publié : mer. 08/mars/2006 19:33
par LeCyb
Si y'a quelque chose en rapport avec windev faut pas s'étonner looooooooooolllllllllllll

Publié : mer. 08/mars/2006 19:35
par wolfjeremy
Pourquoi windev c'est si nul que sa ? pourtant avec le coup de pub qui a eu :?

Publié : mer. 08/mars/2006 19:48
par Patrick88
nan, c'est très bien, comme tout les langages lorsqu'on les maitrises

là dans ce cas, l'exemple de windev m'a interessé et j'ai voulu l'adapter à purebasic... ça marche bien en pb 3.9? et pas top en pb 4.0, mais ça peut aussi venir de mon vieux tromblon...

pat

Publié : mer. 08/mars/2006 19:49
par LeCyb
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 :D.
- "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.

Publié : mer. 08/mars/2006 20:17
par nico
T'as choisi la solution de l'imagegadget pour mettre une image de fond, tu supprimes cette façon de faire et t'aura plus de problème.

Publié : jeu. 09/mars/2006 11:11
par Patrick88
.

Publié : jeu. 09/mars/2006 11:12
par Patrick88
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 8) , mais les petits navions clignotent...
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()  
²

Publié : jeu. 09/mars/2006 12:24
par nico

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()

Publié : jeu. 09/mars/2006 15:52
par Patrick88
euh ! 8O :?

bon d'accord, j'ai encore beaucoup à apprendre .... :lol:

merci

pat