PureBasic

Forums PureBasic
Nous sommes le Mer 23/Oct/2019 19:00

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: ScreenFocus() : Souris sur ou en dehors d'OpenWindowedScreen
MessagePosté: Lun 07/Sep/2015 13:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
[PB 4.31] Sans API. - Testé sous Windows 10

Lorsque vous codez une application 2D ou 3D utilisant un OpenWindowedScreen() et des gadgets conjointement avec un ExamineMouse(), le curseur de la souris est captif dans l'OpenWindowedScreen ce qui oblige l'utilisateur de votre application à utiliser la combinaison de touche Alt + Tab pour accéder aux gadgets ce qui, vous en conviendrez, n'est pas pratique du tout.

J'avais un bout de code que j'ai déja présenté sur ce forum mais qui finalement n'a pas bien fonctionné avec un de mes projets.

Après quelques heures de différents tests avec Gally et Crisot sur FreeChat, nous avons sortis une procédure qui permet de palier à ce que je viens de dire.

Il y a sur ce forum quelques codes qui font la même chose que notre code. Nous avons souhaités quand même vous présenter une solution au gout du jour et sans API. J’espère qu'il vous sera utile.
Code:
Procedure ScreenFocus(Window, Left, Top, RightOffset, BottomOffset)
  If IsScreenActive()
    Protected X = WindowMouseX(Window)
    Protected Y = WindowMouseY(Window)
    Protected Value.b = Bool(X>Left And Y>Top And X<WindowWidth(Window)-RightOffset-1 And Y<WindowHeight(Window)-BottomOffset-1)
 
    ReleaseMouse(1 - Value)
    MouseLocate(X-Left, Y-Top)
 
    ProcedureReturn Value
  EndIf
EndProcedure

je vous propose un code exemple récapitulatif que vous trouverez dans ce fichier compressé qui va vous permettre avec la souris de sélectionner un point 3D et de créer un cube avec la touche Espace qui se placera sur ce point. L'identification de l'entité sera affiché dans un gadget.

Si vous avez un souci d'éxécution sous windows 8 ou 10 (lié à DirectX), Selectionner le menu Compilateur - > Option du compilateur :Ligne Bibliothéque sous-Systéme : Tapez OpenGl

:arrow: http://s242132022.onlinehome.fr/Downloa ... nfocus.zip

Cette procédure fonctionne aussi dans un environnement 2D.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Dernière édition par falsam le Mer 09/Sep/2015 8:55, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Lun 07/Sep/2015 16:46 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
Bonjour Falsam,

voici un code en version 4.10 qui peut t'intéresser.
Il n'est pas multi-plateforme par contre.

ici


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Lun 07/Sep/2015 17:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
@Ollivier: Merci pour ton lien mais datant de 2008 il ne fonctionne plus avec la version 5.30 de PB et franchement je n'ai pas envie de parcourir 780 lignes de code pour chercher la façon dont tu gères la souris.

Je préfère la méthode code minimaliste et fonctionnel qui va à l'essentiel. Je connais ta réponse
Ollivier a écrit:
Franchement Falsam, tu couines un peu là...
Et même plus si affinité !! snippet est un de mes maître mots en dev. Aller droit à l'essentiel.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Lun 07/Sep/2015 18:11 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
@Falsam

J'ai dit "un peu" et "là". "Là", ce n'est pas ici. Et tout cela est loin d'être maintenant...

Je vais être sincère. C'est pour ton "bien".
Je m'explique. J'observe que tu creuses les versions. Ce qui est bien, car tu te retrouves avec des codes d'antan (j'exagère un peu, mais le temps passe incroyablement...).

Si c'est inutile, a priori, de déterrer mon vieux code, c'est très utile de trouver les détails qui le mettent à jour. Je ne suis pas méchant: il est "simplement" ajournable (déjà il y a un 16 à remplacer par #PB_Event_CloseWindow).

Ainsi, tu verras aussi les quelques codes de Kelebrindae de l'époque, qui n'ont rien à voir avec la souris mais qui, vraiment méritent le coup d'oeil (si tu ne l'as pas déjà fait).

Je dois avouer qu'il est vrai que Spock te chambre un peu sur le nombre d'heures. C'est vrai que c'est un peu injuste, parce que c'est une remarque humaine, pas une vantardise de performance.

Cependant, c'est ton sujet. Pense qu'avec le temps, tu peux faire la demande de suppression de tel ou tel message qui se désaccorde de la logique que tu souhaites exprimer et échanger. Si son code est un dupplicata, cela ne pose pas de problème.

Peut-être aussi qu'il souhaite te faire la remarque sur l'origine d'une info. Mais peut-être est-ce une coïncidence. En algorithmie, la logique est stricte par excellence, donc, en groupe, il est très impressionnant de constater que fréquemment, deux algos se ressemblent, alors que deux auteurs y ont travaillé en double aveugle, c'est-à-dire complètement indépendamment.

C'est au point tel que sans ta réponse à Spock, je n'avais même pas tilté qu'il pouvait sous-entendre quoique ce soit (vous auriez copié, etc...).

Je crois que pour la souris partagée, il n'y a qu'une à deux méthodes multi-plateforme, pas plus. C'est trop spécifique.

A]
Si j'utilise ReleaseMouse() dans le code, il faudra l'utiliser. ExamineMouse() coupe la souris et la prend pour soi, c'est l'effecteur principal: recenser l'état de la souris quand elle est sur l'écran fenêtré.

B]
Pour détecter une sortie hors d'écran, c'est qqch comme:
MouseX() + MouseDeltaX() qui n'est plus dans le domaine de la largeur de l'écran fenêtré.
Et pareil pour les 'y' à tester.

@Spock

C'est d'ailleurs aussi pour ça que je rechigne le ContainerGadget() alloué au screen : comment tu fais pour déterminer exactement les dimensions de l'écran en natif?

@Falsam

C]
Une fois sorti de l'écran fenêtré, il ne faut plus recenser avec ExamineMouse() sinon curseur invisible

D] Comment redétecter une venue à l'écran?
DesktopMouseX() (et Y) pour tester si elle est dans le rectangle à l'écran.

Comment calculer ce rectangle? Les largeurs/hauteurs sont connues. Reste le point 0;0 de l'écran, sa position au sein du bureau est inconnue donc
WindowX(numFenetre,#InnerCoord)
et le tour est joué!!!!

Le cycle [A][B][C][D] est réalisable, exécutable, stable et en natif!

Bonne discute à vous! Si questions, n'hésitez point.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 0:10 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
@Falsam

Ce sujet traite du problème. Je ne sais pas s'il faut l'ajourner.

How to manage WindowedScreen+GUI Gadgets together (NetMaestro)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 0:19 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Ollivier a écrit:
Ce sujet traite du problème.
Quel problème ? Je n'ai pas de souci avec le code que je propose dans mon premier message.

Je partage et ce n'est pas plus que ça. Merci pour ce lien qui me montre une façon de faire similaire au code que je montre :wink:

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 10:21 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
Tu dis quelquechose...
Falsam a écrit:
La solution est Alt + Tab pour en sortir ce qui vous en conviendrez n'est pas pratique du
tout.

... puis son contraire...
Falsam a écrit:
Quel problème ? Je n'ai pas de souci avec le code que je propose dans mon premier message.

Je me demande où se trouve cette foutue étiquette dans mon dos où il y a marqué 'jambon'...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 11:15 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Hello Ollivier. C'est parce que, je suis parti du constat que ce n'était pas pratique de sortir de ce screen que j'ai proposé ce code. Je n'avais aucune question à ce sujet.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 14:08 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
C'est le " Terminé le Alt-Tab. " qui me pose problème. Ça ne serait pas plutôt "terminé les problèmes avec Alt+Tab" ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 14:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Ollivier a écrit:
C'est le " Terminé le Alt-Tab. " qui me pose problème. Ça ne serait pas plutôt "terminé les problèmes avec Alt+Tab" ?
Ha ha ha, oui tu as raison et je vais effectuer les corrections nécessaires à une bonne compréhension du sujet. (Je vais t'éviter un smiley)

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 15:40 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
Intéressant, votre discussion. C'est un focus sur écran video fenêtré.

Si le WindowMouseX() ne parasite rien, c'est une bonne solution aussi.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mar 08/Sep/2015 15:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Ollivier a écrit:
Intéressant, votre discussion. C'est un focus sur écran video fenêtré.
Yeahhhhhh Olivier a vu LA différence. I'am very happy. :wink:

PS: Spock s'il ne plait ne répond pas, ça va gacher le plaisir.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mer 09/Sep/2015 0:02 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3507
@Falsam

Je te prie de m'excuser: je me suis fié au titre.
Je pensais que vous cherchiez une solution souple, pour basculer du fenêtré au plein écran et vice-versa.

Dans le plein écran, on se passe de la queue d'événement de la GUI de l'OS. C'est donc plus rapide, mais le mode fenêtré permet des traitements de données simultanés et conventionnels (bureau).

C'est donc bien de prévoir une fonction qui se passe d'être ou non apparentée à une fenêtre, à moins, bien sûr de rééditer une boucle principale propre à l'interface plein écran.

A part cela, je souhaite, si possible, que tu m'informes des causes de ce qui a été effacé à la place de ce message-ci (et plus loin, puisqu'il y avait plusieurs messages), parce que je n'ai pas bien suivi, et je n'ai pas compris du tout.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mer 09/Sep/2015 7:56 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6856
Localisation: IDF (Yvelines)
Ollivier a écrit:
Je te prie de m'excuser: je me suis fié au titre.
Tu n'as pas à t'excuser, le titre est trop vague ainsi que les explications d'ailleurs.
Ollivier a écrit:
le mode fenêtré permet des traitements de données simultanés et conventionnels (bureau)
Voila une bonne explication que je vais rajouter dans mon premier message. Il résume bien l'objectif de la procédure ScreenFocus() qui d'ailleurs aurait pu s'appeler IsScreenFocus().
Ollivier a écrit:
je souhaite, si possible, que tu m'informes des causes de ce qui a été effacé à la place de ce message-ci
Je vais être factuel :
- Tu as pu lire des messages d'élans affectifs entre Spock et moi-même.
- Ni moi ni Spock avons posté ces messages.
- Les comptes utilisateurs ne posent pas de problème de sécurité.
- Par contre l'équipe de modération peut poster des messages en ton nom. (Normal ? pas normal ?)

Tu l'auras compris: C'était une mauvaise blague d'un membre de l'équipe de modération que je n'ai pas appréciée !.

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.70 LTS
➽ Je papote aussi sur http://purebasic.chat

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne réponds pas aux MP techniques


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: ScreenFocus()
MessagePosté: Mer 09/Sep/2015 17:24 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3426
falsam a écrit:
Tu l'auras compris: C'était une mauvaise blague d'un membre de l'équipe de modération que je n'ai pas appréciée !.


Ca va... fait pas ta mijaurée , j'ai trouvé une fonction de modération & je l'ai testé sur toi :mrgreen: , d'ailleurs je n'ai toujours pas trouvé la fonction pour retiré les post-it inutile , je voulais faire un petit coup de propre ici. :)


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye