Un DesktopResolution fait maison qui marche partout

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Un DesktopResolution fait maison qui marche partout

Message par Ollivier »

Code : Tout sélectionner

Global.d resX, resY

Define temp.i = OpenWindow(#PB_Any, ExamineDesktops(), 0, 0, 0, "", #PB_Window_Maximize | #PB_Window_BorderLess | #PB_Window_Invisible)

resX = DesktopWidth(0) / WindowWidth(temp)
resY = DesktopHeight(0) / WindowHeight(temp)

CloseWindow(temp)
Voilà, comme ça, plus besoin de se soucier de quoique ce soit, selon la version d'un OS, selon des options de compilation, selon l'endroit sur disque dur, etc...

On multiplie tous les x par resX, tous les y par resY, et c'est toujours la même taille partout : un plein écran, c'est un plein écran partout, un quart d'écran, c'est un quart d'écran partout, etc...
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Un DesktopResolution fait maison qui marche partout

Message par SPH »

Heuuu... Tu n'as pas expliqué le but de ton code !

C'est sensé faire quoi ? Donne des exemples please 🤔

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: Un DesktopResolution fait maison qui marche partout

Message par case »

Code : Tout sélectionner

resX = DesktopWidth(0) / WindowWidth(temp)
resY = DesktopHeight(0) / WindowHeight(temp)
il faut pas faire l'inverse des fois ollivier ?

Code : Tout sélectionner

resX =WindowWidth(temp)/ DesktopWidth(0)
resY = WindowHeight(temp)/ DesktopHeight(0)
:mrgreen:
ton code renvoi 1.25 sur un desktop a 125% sous windows.
du coup une fenetre en 1920 * 1. 25 x 1080 * 1. 25 c'est encore plus grand. ca dépasse grandement
ImageImage
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Un DesktopResolution fait maison qui marche partout

Message par Ollivier »

Tiens, je te la mets sous forme de procédure. J'ai vu un format 1024 x 768 dans ton code. Si tu as envie de ne travailler que sur du 1024x768 et que ça donne toujours le même résultat, quelque soit l'ordinateur, les switch dpi, user, admin, etc... quelque soit l'OS, ça donnera toujours la même tronche à l'écran.

Dans l'exemple ci-dessous, j'ai fait une zone grise d'un quart de la surface de l'écran, qui est centrée.

Tu peux switcher les options que tu veux, changer de WINDOWS, voire changer d'OS, aller sur mac ou linux, ce programme donnera toujours le même résultat à l'écran.

Code : Tout sélectionner

Procedure ScreenFormat(x.d, y.d)
Global.d ww, wh
Define temp.i = OpenWindow(#PB_Any, 0, 0, 0, 0, "", #PB_Window_Maximize | #PB_Window_BorderLess | #PB_Window_Invisible)
ww = WindowWidth(temp) / x
wh = WindowHeight(temp) / y
CloseWindow(temp)
EndProcedure

; example

ScreenFormat(1024, 768) 
OpenWindow(0, ww * 256, wh * 192, ww * 512, wh * 384, "", #PB_Window_Borderless)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: Un DesktopResolution fait maison qui marche partout

Message par SPH »

Ton code n'est pas adapté à ce que je recherche (si toutefois ton code s'adressait à moi).

Mon problème est en gros le suivant : j'ai un polygone qui va de 0,0 à 1920,1080.
Ce polygone est en data dans le code.

Trouver une formule pour que ce polygone s'adapte a toutes les résolutions et à tous les DPI possible.

==

Mais bon, c'est si loin de ce que je recherche que je ne pense pas que ton code m'était adressé... :?

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Un DesktopResolution fait maison qui marche partout

Message par Ollivier »

Simple, si ton polygone occupe tout l'écran :

Code : Tout sélectionner

ScreenFormat(1920, 1080)
et tu multiplies
- tous tes x par ww
- tous tes y par wh

Je vais lire vite fait ton code...

[Rajouté] Après lecture, déjà la partie gl se fixe à ça :

Code : Tout sélectionner

glOrtho_(0,1920,1080,0,-1,1)
Si tu mets ça openGl considérera que sa "vue GL" mesure 1920 x 1080 dots. Après tu peux utiliser l'exemple ci-dessus et mettre en plein écran soit comme ça :

Code : Tout sélectionner

ScreenFormat(1920, 1080)
OpenWindow(pif, 0, 0, 1920 * ww, 1080 * wh, etc...)
soit comme ça :

Code : Tout sélectionner

ScreenFormat(1, 1)
OpenWindow(pif, 0, 0, 1 * ww, 1 * wh, etc...)
Soit d'une infinité d'autre manière, tant que ta "Window" a les mêmes valeurs que dans ScreenFormat() : mêmes valeurs = plein écran.

(ps : et le dpi qui change selon la météo, tu t'en tamponnes de façon royale, c'est mon humble conseil)

@case

Ah oui, j'ai encore mal démoulé quelque chose dans le tout 1er code. Ça doit être pathologique... :lol:
Répondre