Encore une fenetre mais.....
Encore une fenetre mais.....
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.
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.
pour le bouton tu utilise un sprite , pour le pointeur de souris aussi !
les derniers sprites affichés passent au dessus des autres !
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 !
ps: clique sur le bouton de droite de la souris pour quitter !
les derniers sprites affichés passent au dessus des autres !

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 !

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
Ha bé tiens, exactement comme ca au niveau utilisation du pointeur de windows :
Mais, cette fenetre est elle graphique ??
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
@ kelly :
tu deconne ou quoi ?
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 ?

tu deconne ou quoi ?

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 ?


c'est vrais !!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
un sprite n'est pas un plot !!
mais il fonctionnent tout deux sur l'ecran graphique !

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 !

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 !
