Page 1 sur 1

Encore une fenetre mais.....

Publié : sam. 13/août/2005 0:35
par kelly
J'ai eu un apercu de ce qu'etait une fenetre graphique mais j'ai tout de suite remarqué quelque chose qui manquait : le pointeur de la souris.

Car voila ce que je veux faire : de vrai faux bouton delirants (style triangulaires ou autre) et que je pourrais cliquer et provoquant une vrai action comme sait le faire un bouton.

Alors, je cherche a savoir comment faire apparaitre le pointeur de la souris au dessus d'une fenetre graphique (c'est tout bete je parie) pour pouvoir l'utiliser en fonction de ses coordonnées.

Publié : sam. 13/août/2005 1:17
par Backup
pour le bouton tu utilise un sprite , pour le pointeur de souris aussi !

les derniers sprites affichés passent au dessus des autres ! :D

un peut comme ça !!

l'exemple qui suit me servais pour tester une collision , mais im te montrera comment utiliser les sprites en meme temps ! :D

ps: clique sur le bouton de droite de la souris pour quitter !

Code : Tout sélectionner

; prg realisé par Dobro

#dobro=1
#Police=1
#sprite=1


Enumeration
        #sprite_cible
        #sprite_souris
        #sprite_text
        #sprite_cible3D
        #sprite_souris3D
EndEnumeration







Structure sprite
        x.w
        y.w  
EndStructure
Dim sprite.sprite(1)

Structure balle
        x.w
        y.w  
EndStructure
Dim balle.balle(1)



Dim ecran(640,400)
For x = 0 To 640 ; un écran de couleurs aléatoires
        For y = 0 To 400
                r=Random(255)
                g=Random(255)
                b=Random(255)
                c=RGB(r,g,b)
                ecran(x,y)= c
        Next y
Next x
; ***********************************
Resultat = InitSprite()
InitSprite3D()
FontID = LoadFont(#Police, "arial", 18, #PB_Font_Bold )
EcranX = GetSystemMetrics_(#SM_CXSCREEN):;=largeur de l'ecran
EcranY = GetSystemMetrics_(#SM_CYSCREEN):;=hauteur de l'ecran
        WindowID = OpenWindow(1, 0, 0, 800, 600,  #PB_Window_SystemMenu|#PB_Window_BorderLess |#PB_Window_ScreenCentered , "hello") 
        
        WindowID = WindowID(1) 
        Result = OpenWindowedScreen(WindowID,0,0, 800, 600, 1, 0,0)
        
        
        CreateSprite( #sprite_cible, 64, 64,#PB_Sprite_Texture)  ; sprite exemple
        StartDrawing(SpriteOutput( #sprite_cible) ) ; on dessine dedans
        Box(0, 0, 64, 64, RGB($FF,$0,$80))
        StopDrawing() 
        CreateSprite3D(#sprite_cible3D,#sprite_cible)
        
        
        CreateSprite( #sprite_souris, 32, 32,#PB_Sprite_Texture)  ; sprite souris
        StartDrawing(SpriteOutput( #sprite_souris) ) ; on dessine dedans
        ;Box(0, 0, 64, 64,RGB($13,$F8,$7))
        Circle(16, 16, 16, RGB($13,$F8,$7)) 
        StopDrawing() 
        CreateSprite3D(#sprite_souris3D,#sprite_souris)
        
        CreateSprite(#sprite_text, 150,14)  ; le text
        StartDrawing(SpriteOutput(#sprite_text) ) ; on dessine dedans
        DrawText(bord$)
        StopDrawing() 
        
        
        balle(1)\x=WindowWidth()/2
        
        Resultat = InitMouse()  
        
        Repeat
                ExamineMouse() 
                Event=WindowEvent() 
                
                
                sprite(1)\x=WindowWidth()/2
                sprite(1)\y=WindowHeight()/2
                
               ;- ACTIVER CECI POUR VOIR LE BLEM !!
                ; ZoomSprite3D(#sprite_cible3D,200, 200) ; ACTIVER CECI POUR VOIRE LE PROBLEMME !!
                
                
                
                Start3D()
                DisplaySprite3D(#sprite_cible3D, sprite(1)\x, sprite(1)\y, 127)
                DisplaySprite3D(#sprite_souris3D, MouseX(),   MouseY(), 127) 
                Stop3D()
                
                
                DisplaySprite( #sprite_text,  10,  10)  
                If SpritePixelCollision(#sprite_cible, sprite(1)\x, sprite(1)\y, #sprite_souris, MouseX(),   MouseY())<>0 
                        bord$="touché !! "
                Else
                            bord$=" "
                EndIf
                
                        
                
                
                
                
                
                
                
                StartDrawing(SpriteOutput(#sprite_text) ) ; on dessine dedans
                DrawingMode(0)
                DrawText(bord$)
                DrawText("                              ")
                StopDrawing() 
                
                If MouseButton(2)
                        End 
                EndIf
                
                
                
                FlipBuffers():; affiche l'ecran
                ClearScreen(0, 0, 0) :;efface l'ecran
                
        Until Event=#PB_Event_CloseWindow 
        
        
        
        
        
        
        
        


Publié : sam. 13/août/2005 2:02
par kelly
Ha ouai, ca marche mais, pour un utilisateur windows, il aimerait avoir le pointeur de windows. Mon souhait est donc d'avoir le vrai pointeur windows pouvant agir dans une fenetre.
Cela est il possible ?

Publié : sam. 13/août/2005 2:06
par kelly
Ha bé tiens, exactement comme ca au niveau utilisation du pointeur de windows :

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu 
; Version de PB : 3.90 
; 
; Explication du programme : 
; Donner à une fenêtre une forme spécifique. Par exemple faire une fenêtre ronde ou triangulaire. 


Enumeration 
  #Quitter 
  #Forme1 
  #Forme2 
  #Forme3 
  #Forme4 
  #Forme5 
EndEnumeration 



Procedure Forme() 
  If GetGadgetState(#Forme1) ; si on a choisi la forme 1 
    
    Region = CreateRoundRectRgn_(0, 0, WindowWidth(), WindowHeight(), 40, 60) ; Création de la région pour faire une fenêtre avec les angles arrondis 
    ; CreateRoundRectRgn_(X1, Y1, X2, Y2, R1, R2) 
    ; X1, Y1 : coordonné du point haut gauche de la region 
    ; X1, Y1 : coordonné du point haut gauche de la region 
    ; R1, R2 : rayon de l'ellipse qui va servir à arrondir les angles de la region 
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région 
    DeleteObject_(Region) ; On supprime la région 
    
  ElseIf GetGadgetState(#Forme2) ; si on a choisi la forme 2 
    
    Region = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création de la région pour faire une fenêtre elliptique 
    ; CreateEllipticRgn_(X1, Y1, X2, Y2) 
    ; X1, Y1 : coordonné du point haut gauche de la region 
    ; X1, Y1 : coordonné du point haut gauche de la region 
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région 
    DeleteObject_(Region) ; On supprime la région 
    
  ElseIf GetGadgetState(#Forme3) ; si on a choisi la forme 3 
    
    Region = CreatePolygonRgn_(?Triangle, 4, #Alternate) ; Création de la région pour faire une fenêtre elliptique 
    ; CreateRoundRectRgn_(Array, NbPoints, Type) 
    ; Array : Adresse de la liste ou de la Data 
    ; NbPoints : Nombre de points du polygone + 1 (car on fait une boucle donc on a 2 fois le premier point) 
    ; Type : Voir msdn 
    SetWindowRgn_(WindowID(), Region, #True) ; On applique la région 
    DeleteObject_(Region) ; On supprime la région 
    
  ElseIf GetGadgetState(#Forme4) ; si on a choisi la forme 4 
    
    Region1 = CreateRectRgn_(0, 0, WindowWidth(), WindowHeight()) ; Création d'une région en rectangle 
    Region2 = CreateRectRgn_(10, 10, WindowWidth() - 10, 50) ; Création d'une région en rectangle 
    ; CreateRectRgn_(X1, Y1, X2, Y2) 
    ; X1, Y1 : coordonné du point haut gauche de la region 
    ; X1, Y1 : coordonné du point haut gauche de la region 
    CombineRgn_(Region1, Region1, Region2, #RGN_DIFF) ; On combine les 2 régions 
    ; Les modes suivants sont disponibles : 
    ; #RGN_AND : Intersection 
    ; #RGN_OR : Union 
    ; #RGN_DIFF : Différences 
    ; #RGN_XOR : Union moins les intersections 
    SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale 
    DeleteObject_(Region1) ; On supprime les régions 
    DeleteObject_(Region2) 
    
  ElseIf GetGadgetState(#Forme5) ; si on a choisi la forme 5 
    
    Region1 = CreatePolygonRgn_(?Triangle, 4, #Alternate) 
    Region2 = CreateEllipticRgn_(0, 0, WindowWidth(), WindowHeight()) 
    CombineRgn_(Region1, Region1, Region2, #RGN_OR) ; On combine les 2 régions 
    SetWindowRgn_(WindowID(), Region1, #True) ; On applique la région finale 
    DeleteObject_(Region1) ; On supprime les régions 
    DeleteObject_(Region2) 
    
  EndIf 
EndProcedure 




; Création de la fenêtre et dela GadgetList 
If OpenWindow(0, 0, 0, 400, 400, #PB_Window_Borderless | #PB_Window_ScreenCentered, "Test") = 0 Or CreateGadgetList(WindowID(0)) = 0 
  End 
EndIf 

; Création des boutons et de l'option d'affichage 
ButtonGadget(#Quitter, 100, 100, 200, 20, "Quitter") 
OptionGadget(#Forme1, 100, 125, 200, 15, "Angles arrondis") 
OptionGadget(#Forme2, 100, 140, 200, 15, "Ronde") 
OptionGadget(#Forme3, 100, 155, 200, 15, "Triangle") 
OptionGadget(#Forme4, 100, 170, 200, 15, "Trouée") 
OptionGadget(#Forme5, 100, 185, 200, 15, "Triangle + Rond") 


Repeat 
  Event = WaitWindowEvent() 
  
  If Event = #PB_EventGadget 
    Select EventGadgetID() ; boutons, zone de texte, ... 
      Case #Quitter 
        Event = #PB_EventCloseWindow ; On quitte 
      Default 
        Forme() ; sinon, on change la forme de la fenêtre 
    EndSelect 
  EndIf 
  
Until Event = #PB_EventCloseWindow 

End 



DataSection 
  Triangle : 
    Data.l 200, 400, 0, 0, 400, 0, 200, 400 ; Coordonnées des points du triangle en x, y (il faut faire une boucle donc on revient au premier point du triangle 
EndDataSection
Mais, cette fenetre est elle graphique ??

Publié : sam. 13/août/2005 2:11
par kelly
OULA, je viens de trouver mon bonheur je crois car dans l'exemple que je viens de coller, je reussi a faire des graphismes !!!!!!!

Publié : sam. 13/août/2005 10:13
par Backup
@ kelly :

tu deconne ou quoi ? 8O

ici: http://purebasic.hmt-forum.com/viewtopic.php?t=3278

je t'ai donné il n'y a pas longtemps , l'exemple du soldat inconnu
Modifié pour etre en fenetre Graphique avec un sprite qui se ballade dedans !

ça sert a quoi que je me decarcasse moi ? 8O :D

Publié : sam. 13/août/2005 10:22
par kelly
ha ouai tiens !
mais bon ca s'explique car je suis nulle. Pour moi, un sprite, c'est pas un plot, d'où ma confusion

='( sauras tu un jour me pardonner ?

Publié : sam. 13/août/2005 18:42
par Backup
:lol:

Publié : sam. 13/août/2005 18:49
par Backup
ha ouai tiens !
mais bon ca s'explique car je suis nulle. Pour moi, un sprite, c'est pas un plot, d'où ma confusion
c'est vrais !!
un sprite n'est pas un plot !!
mais il fonctionnent tout deux sur l'ecran graphique ! :D

un plot "allume" un pixel sur une surface graphique en purebasic ce peut etre
soit un ecran , soit un sprite, soit une image !!

alors q'un sprite est une cellule (un conteneur ) vide !!
il faut dessiner dedans (avec plot par exemple) ou box, circle , ect...
pour que l'on puisse le voir ! :D

ensuite ce conteneur (cellule) de dessin bref le sprite! , purebasic te
propose de le placer ou tu veux sur l'ecran graphique !
un sprite peut etre tout petit , ou etre de la taille de l'ecran graphique !
tu peut les superposer l'un sur l'autres
toutes les parties noire du sprite qui est dessus seront transparentes !
donc tu verra les sprites en dessous !!
tout les sprites peuvent avoir des parties noires transparentes !

et puis tu a la transparence tout court ! :D

Publié : dim. 14/août/2005 20:38
par Dr. Dri
pour l'histoire de souris, releasemouse ca marche pas ?

Dri

Publié : dim. 14/août/2005 23:21
par kelly
je ne sais pas Dr.Dri, mais je prefere bosser sur une openwindows.

Publié : dim. 14/août/2005 23:44
par Dr. Dri
bah peut etre qu'en regardant ds l'aide ou qu'en essayant la fonction tu auras la réponse... je peux pas t'aider plus (ou du moins essayer)

Dri