OpenWindowedScreen()

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

OpenWindowedScreen()

Message par Backup »

il n'y a pas de moyen de bouger l'ecran en Fenetre !! ( WindowedScreen() )

on peut bouger les fenetres : ResizeWindow()
on peut bouger les Gadgets : ResizeGadget()

mais pour le OpenWindowedScreen() que dalle !! :roll: 8O 8O

alors meme qu'il est en principe prévu pour tourner avec des interfaces "Gadgeté"
que ces gadgets peuvent etre cachés , bougés, ajoutés, enlevés .....
pour le Screen ... rien ! 8O me trompais-je ?


j'ai des gadgets a gauche en colonne et le screen a droite ...
on peut modifier la taille de la fenetre , mais si on vire les gadgets a gauche... , le Screen lui ne se met pas a gauche sur la fenetre ...
il reste a la meme place que lorsqu'on l'a créé !du coup , il reste un vide a gauche .....
bref on ne peut pas bouger ce satané Screen APRES Creation !! :? c'est balot ...





ps:
en l'occurence, j'aimerai ne pas avoir a tout repasser sous CanvasGadget .. (il ne gere pas l'autostrech.. et j'en ai besoin ) :(
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: OpenWindowedScreen()

Message par graph100 »

Tiens, Dobro, j'ai la solution à ton problème :D
Mais je pense que cet usage de OpenWindowedScreen() devrait être documenté !

Code : Tout sélectionner

InitSprite()

OpenWindow(0, 0, 0, 800, 600, "Bouton Gauche pour déplacer, Bouton droit pour redimensionner ;)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

ContainerGadget(0, 50, 50, 100,100)

OpenWindowedScreen(GadgetID(0), 0, 0, 100, 100, #True, 0, 0)

balle.POINT\x = 25
balle\y = 50
vitesse.POINT\x = 2
vitesse\y = 1

Repeat
	event = WindowEvent()
	
	balle\x + vitesse\x
	balle\y + vitesse\y
	
	If balle\x < 5 Or balle\x > 95 : vitesse\x = -vitesse\x : EndIf
	If balle\y < 5 Or balle\y > 95 : vitesse\y = -vitesse\y : EndIf
	
	
	If event = #WM_LBUTTONUP
		ResizeGadget(0, WindowMouseX(0), WindowMouseY(0), #PB_Ignore, #PB_Ignore)
	EndIf
	
	If event = #WM_RBUTTONUP
		ResizeGadget(0, #PB_Ignore, #PB_Ignore, WindowMouseX(0) - GadgetX(0), WindowMouseY(0) - GadgetY(0))
	EndIf
	
	
	ClearScreen(0)
	
	If StartDrawing(ScreenOutput())
		
		Circle(balle\x, balle\y, 5, #Red)
		
		StopDrawing()
	EndIf
	
	FlipBuffers()
	
	
Until event = #PB_Event_CloseWindow
J'ai essayé rapidement, et ça marche chez moi, sans planter...
Au cas ou : clique sur la fenetre avec le bouton droit de la souris pour redimensionner le gadget, et le bouton gauche pour le déplacer !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: OpenWindowedScreen()

Message par Micoute »

Ça marche mieux comme ça avec PB 5.10b2 et bravo pour ton code

Code : Tout sélectionner

InitSprite()

OpenWindow(0, 0, 0, 800, 600, "Bouton Gauche pour déplacer, Bouton droit pour redimensionner ;)", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)

ContainerGadget(0, 50, 50, 100,100)

OpenWindowedScreen(GadgetID(0), 0, 0, 100, 100, #True, 0, 0)

balle.POINT\x = 25
balle\y = 50
vitesse.POINT\x = 2
vitesse\y = 1

Repeat
   event = WindowEvent()
   
   balle\x + vitesse\x
   balle\y + vitesse\y
   
   If balle\x < 5 Or balle\x > 95 : vitesse\x = -vitesse\x : EndIf
   If balle\y < 5 Or balle\y > 95 : vitesse\y = -vitesse\y : EndIf
   
   
   If event = #PB_Event_LeftClick ; #WM_LBUTTONUP
      ResizeGadget(0, WindowMouseX(0), WindowMouseY(0), #PB_Ignore, #PB_Ignore)
   EndIf
   
   If event = #PB_Event_RightClick ; #WM_RBUTTONUP
      ResizeGadget(0, #PB_Ignore, #PB_Ignore, WindowMouseX(0) - GadgetX(0), WindowMouseY(0) - GadgetY(0))
   EndIf
   
   
   ClearScreen(0)
   
   If StartDrawing(ScreenOutput())
      
      Circle(balle\x, balle\y, 5, #Red)
      
      StopDrawing()
   EndIf
   
   FlipBuffers()
   
   
Until event = #PB_Event_CloseWindow
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenWindowedScreen()

Message par Backup »

excellent ! :)

j'avais pourtant essayé le container ... 8O
j'avais surement du le poser au mauvais endroit :roll:

bon je te remercie, tu viens de donner un sacré coup de pouce a Pure_Anaglyphe :)

Merci a vous deux
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenWindowedScreen()

Message par Backup »

ha oui !! je viens de comprendre pourquoi pour moi ça ne marchait pas :)

je mettais entre
ContainerGadget(#container....)
OpenWindowedScreen(WindowID(#Window) , 1, 1, X_ecran, y_ecran, 1,50, 50)
et CloseGadgetList()

mais .. mon WindowedScreen() etait toujour asservi a la fenetre WindowID(#Window)

en fait il faut l'asservir au Container !!
OpenWindowedScreen(GadgetID(0), 0, 0, 100, 100, #True, 0, 0) ; ATTENTION , ici on assservi le Screen au Container
hum ! il faut ajouter ça dans la Doc !! ;) Merci Graph100
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: OpenWindowedScreen()

Message par graph100 »

:D

Par contre, ça m'étonnerais grandement que ça fonctionne sur les autre OS ! Il faudrait vérifier, mais à mon avis ça fonctionne à cause de la façon de window pour gérer les gadgets et les fenêtres

@Micoute : merci pour la pitite correction :) je n'ai pas installé les bêtas, (je ne le fait pas) donc, ton code ne fonctionne pas pour les gens qui n'ont pas la bêta !
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: OpenWindowedScreen()

Message par Micoute »

graph100 a écrit ::D

Par contre, ça m'étonnerais grandement que ça fonctionne sur les autre OS ! Il faudrait vérifier, mais à mon avis ça fonctionne à cause de la façon de window pour gérer les gadgets et les fenêtres

@Micoute : merci pour la pitite correction :) je n'ai pas installé les bêtas, (je ne le fait pas) donc, ton code ne fonctionne pas pour les gens qui n'ont pas la bêta !
C'est pour cela que j'ai commenté les arguments !
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenWindowedScreen()

Message par Backup »

Pour le coup j'ai renoncé a passer en mode Windowed / window
car apres avoir passé une partie de l'aprem a adapter le code
je me suis rendu compte que la gestion de la souris devenais du coup problematique !
les events n'etaient pas renvoyés de façon aussi net (x,y, boutons..)
meme en passant par l'Api ça devenais galere ...
car j'ai besoin de pouvoir dessiner dans le Screen , et/ ou povoir l'afficher en fenetre ou en Plein ecran ....

bref , apres moult Test , je reviens a la methode precedente : windowed dans fenetre , et plein ecran en vrais Screen :)

Merci quand meme l'Astuce est intéressante ..

je pense que ça devrai marcher sous Linux , car apres tout, il n'y a pas d'appel d'autres fonctions que celles de Purebasic :)
Avatar de l’utilisateur
Ar-S
Messages : 9477
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: OpenWindowedScreen()

Message par Ar-S »

Oui merci pour ce code.
Le canvas correspondrait pas à tes besoins ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenWindowedScreen()

Message par Backup »

non, car la fenetre de Pure_anaglyphe peut etre redimensionnée
pour adapter au proportion d'une image ... et le mode Auto-Redimensionnement du WindowedScreen est bien pratique :)

et en plein ecran , ça pourrai peut etre faire ( bien que je suis pas sur qu'on puisse faire afficher des Sprites
dans un Canvas ??? ! )
mais cela me force a revoir complétement les Event relatif au touches Clavier , et souris .. j'aime pas trop refaire..

bah , j'ai surtout voulu passer en Full Windowed Screen (plein ecran aussi)
pour le calldebugger !!
car en mode plein ecran, on ne peut plus utiliser le Debugger ... :roll:
il me semble pourtant me souvenir que dans les anciennes Version (3.8x..3.9x) ont pouvais debugger sous plein ecran...?!

je trouve qu'un Debugger qui fonctionnerai sous OPENSCREEN() serai quand meme pas mal :) (ou j'ai encore loupé un truc ... )
pour le moment, je fais des Beep(xx,xx) pour savoir si le code passe par un endroit
et je fait des sorties de contenu de variable en utilisant le Screen ... mais c'est lourd ...

le code ci dessus est deja bien pour faire des sorties en utilisant le Windowed Screen , mais je ne l'utiliserai pas pour mon prg :)
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: OpenWindowedScreen()

Message par Patrick88 »

sur le forum, recherche le code "WindowedScreen + GUI Eventhandling Demo - March 22, 2007",
il permet de faire tourner un openwindowscreen dans une fenêtre pb en séparant/filtrant les évenements du screen et de windows,
code pouvant être pour ogre afin de réaliser un modeleur par exemple.

Pat
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenWindowedScreen()

Message par Backup »

Patrick88 a écrit :sur le forum, recherche le code "WindowedScreen + GUI Eventhandling Demo - March 22, 2007",
il permet de faire tourner un openwindowscreen dans une fenêtre pb en séparant/filtrant les évenements du screen et de windows,
code pouvant être pour ogre afin de réaliser un modeleur par exemple.

Pat

oui je sais deja faire ça :lol: (et depuis longtemps )

Pure_anaglyphe utilise deja depuis le debut un windowed screen + gadget , et un mode plein ecran Screen (par appuis sur la barre d'espace )

je voulais juste avoir la possibilité de Debugger en mode Screen , alors j'ai fais une demande ici , a propos du mode WindowedScreen plein ecran/fenetre
(bref Relis le Topic , je vais pas te Reexpliquer ... )

Merci quand meme pour la Tentative d'info ;)
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Re: OpenWindowedScreen()

Message par Patrick88 »

m'oui, c'est aussi pour ça (pas de debugger en mode screen) que je passe par ce code...
sinon, tu peux utiliser la commande "trace" comme au (bon vieux) temps du gwbasic :P

et si tu utilises 2 écrans ? 1 pour le screen et 1 pour le code et le debugger ?

pat
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: OpenWindowedScreen()

Message par Backup »

merci :)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: OpenWindowedScreen()

Message par cederavic »

Et en utilisant un Canvas comme "WindowedScreen" auquel tu attache une image dans laquelle tu fais ton dessin et que tu redimensionne selon la taille de la fenetre ?
Biensur il faudra rajouter un coef pour les positions de la souris en fonction de la taille originale et actuelle de la fenetre, mais ça doit etre jouable...
Répondre