votre écran mesure Ht x mm larg y mm
Re: votre écran mesure Ht x mm larg y mm
Je croyais qu'un écran se mesurait en diagonale, ce qui donne sa résolution, donc selon le théorème de Pythagore, la somme des carrés des côtés de l'angle droit est égal au carré de l’hypoténuse et réciproquement ! Le mien fait 17 pouces.
Veuillez m'excuser de m’immiscer dans votre sujet !
Veuillez m'excuser de m’immiscer dans votre sujet !
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: votre écran mesure Ht x mm larg y mm
@ Mesa, Dobro
Le code de Mesa, j'avais déja fait, mais encore une fois ceci ne fonctionne qu'avec le réglage natif.
Forcer la résolution est une possibilité, mais tu ne sais pas si l'écran de l'utilisateur final accepte cette résolution.
@ falsam
Que vient faire Poshu ici
@ Micoute
Si ton logiciel est distribué comment fais tu pour connaitre la diagonale de l'écran d'un client lamda
Bon je jette l'éponge. (Mais je n'aime pas resté sur un échec, et cette idée va me suivre un moment.)
Pour une application j'ai besoin d'une interface graphique qui, quelque soit les dimensions d'un écran ou sa résolution, ou le nombre de DPI
Présente visuellement la même chose. (en plus ou mois réduit bien sur,mais toujours dans les mêmes proportions par rapport a la surface de l'écran)
Pour les fenetres pas de problème, certains gadgets sont faciles, mais d'autres comme les gadgetLists sont plus que ardus.
Par exemple une ListIconGadget qui contient 10 lignes visibles et qu'il faut que les 10 lignes soient visible quelque soit la config
Certain logiciels ont une interface par résolution entre 800x600, et le dernier cris des écrans du moment. Seul les différences de DPI sont pris en compte. Si les écrans évoluent une nouvelle version du logiciel est proposé. C'est pour cela que des logiciels qui paraissent assez banal sont trés gros en nombre d'octets.
Le code de Mesa, j'avais déja fait, mais encore une fois ceci ne fonctionne qu'avec le réglage natif.
Forcer la résolution est une possibilité, mais tu ne sais pas si l'écran de l'utilisateur final accepte cette résolution.
@ falsam
Que vient faire Poshu ici



@ Micoute
Si ton logiciel est distribué comment fais tu pour connaitre la diagonale de l'écran d'un client lamda


Bon je jette l'éponge. (Mais je n'aime pas resté sur un échec, et cette idée va me suivre un moment.)
Pour une application j'ai besoin d'une interface graphique qui, quelque soit les dimensions d'un écran ou sa résolution, ou le nombre de DPI
Présente visuellement la même chose. (en plus ou mois réduit bien sur,mais toujours dans les mêmes proportions par rapport a la surface de l'écran)
Pour les fenetres pas de problème, certains gadgets sont faciles, mais d'autres comme les gadgetLists sont plus que ardus.
Par exemple une ListIconGadget qui contient 10 lignes visibles et qu'il faut que les 10 lignes soient visible quelque soit la config
Certain logiciels ont une interface par résolution entre 800x600, et le dernier cris des écrans du moment. Seul les différences de DPI sont pris en compte. Si les écrans évoluent une nouvelle version du logiciel est proposé. C'est pour cela que des logiciels qui paraissent assez banal sont trés gros en nombre d'octets.
Re: votre écran mesure Ht x mm larg y mm
Bonjour MLD, je me servirais des fonctions PB pour connaître la largeur et la hauteur de l'écran, ce qui permettrait de calculer toutes les dimensions voulues pour pouvoir extrapoler.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: votre écran mesure Ht x mm larg y mm
Mon code fonctionne bien avec Xp mais je n'avais pas vu que la fonction "GetDeviceCaps" ne fonctionnait plus (ou plus ou moins bien) depuis vista :
Voir ici :
http://ofekshilon.com/2011/11/13/readin ... right-way/
C'est un "faux-ami" ( problème apparemment simple mais en fait impossible à résoudre).
A éviter.
[edit] voir ici aussi, un code plus facile à traduire
http://stackoverflow.com/questions/5777 ... he-monitor
Il semble qu'il existe une fonction spécial sous vista
GetMonitorDisplayAreaSize()
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
M.
Un programmeur propose un code en C++ mais il prévient qu'il ne fonctionne pas à tous les coups et que c'est le genre de code qui est recherché par beaucoup mais que personne n'a réellement réussi à créer.Microsoft : Note GetDeviceCaps reports info that the display driver provides. If the display driver declines to report any info, GetDeviceCaps calculates the info based on fixed calculations. If the display driver reports invalid info, GetDeviceCaps returns the invalid info. Also, if the display driver declines to report info, GetDeviceCaps might calculate incorrect info because it assumes either fixed DPI (96 DPI) or a fixed size (depending on the info that the display driver did and didn’t provide). Unfortunately, a display driver that is implemented to the Windows Display Driver Model (WDDM) (introduced in Windows Vista) causes GDI to not get the info, so GetDeviceCaps must always calculate the info.
Voir ici :
http://ofekshilon.com/2011/11/13/readin ... right-way/
C'est un "faux-ami" ( problème apparemment simple mais en fait impossible à résoudre).
A éviter.
[edit] voir ici aussi, un code plus facile à traduire
http://stackoverflow.com/questions/5777 ... he-monitor
Il semble qu'il existe une fonction spécial sous vista
GetMonitorDisplayAreaSize()
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
M.
Re: votre écran mesure Ht x mm larg y mm
ben siMLD a écrit : Forcer la résolution est une possibilité, mais tu ne sais pas si l'écran de l'utilisateur final accepte cette résolution.

Code : Tout sélectionner
InitSprite()
If ExamineScreenModes()
While NextScreenMode()
Debug Str(ScreenModeWidth())+"x"+Str(ScreenModeHeight())+"x"+Str(ScreenModeDepth())+"@"+Str(ScreenModeRefreshRate())+"Hz"
Wend
EndIf
il te suffit de tester si une résolution particuliere qui t’intéresse est présente dans la liste
si c'est le cas , tu "Forces" la résolution ...
apres c'est sur que, tout le monde ne peut pas faire du 1920X1080
mais il te suffit de prendre une résolution courante (1024x768) pour deja avoir la majorité des PC ...
et si tu veux mieux comme résolution , tu peux éventuellement tester si c'est possible, avant de Forcer la Résolution
si c'est pas possible (résolution non présente dans la liste )
tu affiche un message , ou tu dis que le gars a une Bouze infame, et qu'il faut vite courir acheter une carte Graphique
digne de 2014 , car son model est As-Been

c'est ce que font sans vergogne les éditeurs de Jeux, qui mettent une config minimum indiquée pour jouer a leur jeux...
tu peux aussi essayer d'adapter ton interface a la résolution courante de l'utilisateur ...
vu que tu peux récuperer facilement la Résolution en cours,... tu adaptes ton interface a cette résolution
tu peux aussi , préparer plusieurs interface , pour des résolutions Clef ..
une pour le 1024x768
une pour le 1600x1024x16@60Hz
une pour le 1920x1080x32@60Hz
et en fonction de la liste possible tu choisis l'interface de la plus haute résolution... que tu aura préalablement forcé

Re: votre écran mesure Ht x mm larg y mm
C'est Dobro qui a raison, moi j'aurais proposer quelque chose comme ça :
et ceci pour l'essayer :
comme ça, l'utilisateur peut adapter la police de caractères à son écran.
Code : Tout sélectionner
;
; Calcule la taille nécessaire pour afficher un gadget correctement.
;
; Gadgets pris en charge:
; Button, Checkbox, Option, Text, String, ComboBox, Image
;
; Note:
; Pour Gadgets à contenu variable (String, ComboBox), seul la hauteur
; est utile, alors que la largeur ne sera qu'une valeur minimale absolue
;
; Les paramètres 'Options' donne les drapeaux gadget à inclure dans le calcul.
; Actuellement seulement #PB_Text_Border fait une différence.
;
CompilerIf Defined(Max, #PB_Procedure) = 0
Procedure Max(a, b)
If a > b
ProcedureReturn a
Else
ProcedureReturn b
EndIf
EndProcedure
CompilerEndIf
; Stocke le résultat dans *Largeur\l et *Hauteur\l
;
Procedure FaireRequerirTaille(Gadget, *Largeur.LONG, *Hauteur.LONG, Drapeaux = 0)
DC = GetDC_(GadgetID(Gadget))
AncPolice = SelectObject_(DC, GetGadgetFont(Gadget))
Taille.SIZE
Select GadgetType(Gadget)
Case #PB_GadgetType_Text
Texte$ = RemoveString(GetGadgetText(Gadget), #LF$)
Compte = CountString(Texte$, #CR$) + 1
Vide = 0
HauteurMaxi = 0
For index = 1 To Compte
Ligne$ = StringField(Texte$, index, #CR$)
If Ligne$ = ""
Vide + 1
Else
GetTextExtentPoint32_(DC, @Ligne$, Len(Ligne$), @TailleLigne.SIZE)
Taille\cx = Max(Taille\cx, TailleLigne\cx)
Taille\cy + TailleLigne\cy
HauteurMaxi = Max(HauteurMaxi, TailleLigne\cy)
EndIf
Next index
Taille\cy + Vide * HauteurMaxi
If Drapeaux & #PB_Text_Border
Taille\cx + GetSystemMetrics_(#SM_CXEDGE) * 2
Taille\cy + GetSystemMetrics_(#SM_CYEDGE) * 2
Else
Taille\cx + 2
Taille\cy + 2
EndIf
Case #PB_GadgetType_CheckBox, #PB_GadgetType_Option
Texte$ = GetGadgetText(Gadget)
GetTextExtentPoint32_(DC, @Texte$, Len(Texte$), @Taille.SIZE)
Taille\cx + 20
Taille\cy = Max(Taille\cy+2, 20)
Case #PB_GadgetType_Button
Texte$ = GetGadgetText(Gadget)
GetTextExtentPoint32_(DC, @Texte$, Len(Texte$), @Taille.SIZE)
Taille\cx + GetSystemMetrics_(#SM_CXEDGE)*2
Taille\cy = Max(Taille\cy+GetSystemMetrics_(#SM_CYEDGE)*2, 24)
Taille\cx + 10
Case #PB_GadgetType_String
Texte$ = GetGadgetText(Gadget) + "Hg"
GetTextExtentPoint32_(DC, @Texte$, Len(Texte$), @Taille.SIZE)
Taille\cx = GetSystemMetrics_(#SM_CXEDGE)*2
Taille\cy = Max(Taille\cy+GetSystemMetrics_(#SM_CXEDGE)*2, 20)
Case #PB_GadgetType_ComboBox
GetTextExtentPoint32_(DC, @"Hg", 2, @Taille.SIZE)
Taille\cy = Max(Taille\cy + 8, 21)
Taille\cx = Taille\cy
Case #PB_GadgetType_Image
Taille\cx = GadgetWidth(Gadget)
Taille\cy = GadgetHeight(Gadget)
EndSelect
SelectObject_(DC, AncPolice)
ReleaseDC_(GadgetID(Gadget), DC)
*Largeur\l = Taille\cx
*Hauteur\l = Taille\cy
If Type = #PB_GadgetType_String Or Type = #PB_GadgetType_ComboBox
*Largeur\l = 30
EndIf
EndProcedure
; enveloppes de commodité si une seule taille est requise
;
Procedure FaireRequerirLargeur(Gadget, Drapeaux = 0)
Protected Largeur.l, Hauteur.l
FaireRequerirTaille(Gadget, @Largeur, @Hauteur, Drapeaux)
ProcedureReturn Largeur
EndProcedure
Procedure FaireRequerirHauteur(Gadget, Drapeaux = 0)
Protected Largeur.l, Hauteur.l
FaireRequerirTaille(Gadget, @Largeur, @Hauteur, Drapeaux)
ProcedureReturn Hauteur
EndProcedure
Code : Tout sélectionner
XIncludeFile #PB_Compiler_Home + "..\Prg perso\Projets\FaireRequerir\FaireRequerir.pbi"
Enumeration
#Button_1
#Button_2
#Button_3
#Checkbox_1
#Checkbox_2
#Checkbox_3
#String
#ComboBox
#ChangeFont
EndEnumeration
Procedure Retailler()
FaireRequerirTaille(#Button_1, @LargeurBouton1.i, @HauteurBouton1.i)
FaireRequerirTaille(#Button_2, @LargeurBouton2.i, @HauteurBouton2.i)
FaireRequerirTaille(#Button_3, @LargeurBouton3.i, @HauteurBouton3.i)
Hauteur = Max(HauteurBouton1, Max(HauteurBouton2, HauteurBouton3))
x = 10
y = 10
ResizeGadget(#Button_1, x, y, LargeurBouton1, Hauteur): x + LargeurBouton1 + 5
ResizeGadget(#Button_2, x, y, LargeurBouton2, Hauteur): x + LargeurBouton2 + 5
ResizeGadget(#Button_3, x, y, LargeurBouton3, Hauteur): x + LargeurBouton3 + 5
y + Hauteur + 10
HauteurFenetre = x
FaireRequerirTaille(#Checkbox_1, @LargeurCoche1.i, @HauteurCoche1.i)
FaireRequerirTaille(#Checkbox_2, @LargeurCoche2.i, @HauteurCoche2.i)
FaireRequerirTaille(#Checkbox_3, @LargeurCoche3.i, @HauteurCoche3.i)
Largeur = Max(LargeurCoche1, Max(LargeurCoche2, LargeurCoche3))
ResizeGadget(#Checkbox_1, 10, y, Largeur, HauteurCoche1): y + HauteurCoche1 + 5
ResizeGadget(#Checkbox_2, 10, y, Largeur, HauteurCoche2): y + HauteurCoche2 + 5
ResizeGadget(#Checkbox_3, 10, y, Largeur, HauteurCoche3): y + HauteurCoche3 + 5
y + 5
HauteurFenetre = Max(HauteurFenetre, Largeur+20)
Hauteur = FaireRequerirHauteur(#String)
ResizeGadget(#String, 10, y, HauteurFenetre-20, Hauteur)
y + Hauteur + 5
Hauteur = FaireRequerirHauteur(#ComboBox)
ResizeGadget(#ComboBox, 10, y, HauteurFenetre-20, Hauteur)
y + Hauteur + 10
FaireRequerirTaille(#ChangeFont, @LargeurBouton.i, @HauteurBouton.i)
ResizeGadget(#ChangeFont, (HauteurFenetre-LargeurBouton)/2, y, LargeurBouton, HauteurBouton)
y + HauteurBouton + 10
ResizeWindow(0, #PB_Ignore, #PB_Ignore, HauteurFenetre, y)
EndProcedure
If OpenWindow(0, 100, 100, 0, 0, "Test taille", #PB_Window_SystemMenu|#PB_Window_Invisible)
ButtonGadget(#Button_1, 0, 0, 0, 0, "Court")
ButtonGadget(#Button_2, 0, 0, 0, 0, "-- Long --")
ButtonGadget(#Button_3, 0, 0, 0, 0, "------- Très long ------")
CheckBoxGadget(#Checkbox_1, 0, 0, 0, 0, "Salut monde cruel !")
CheckBoxGadget(#Checkbox_2, 0, 0, 0, 0, "Voyez le brick géant que j'examine près du wharf.")
CheckBoxGadget(#Checkbox_3, 0, 0, 0, 0, "Une autre boîte à cocher")
StringGadget(#String, 0, 0, 0, 0, "String")
ComboBoxGadget(#ComboBox, 0, 0, 0, 0)
AddGadgetItem(#ComboBox, 0, "ComboBox")
SetGadgetState(#ComboBox, 0)
ButtonGadget(#ChangeFont, 0, 0, 0, 0, "Changer police")
Retailler()
HideWindow(0, 0)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = #ChangeFont
If FontRequester("Arial", 20, 0)
If LoadFont(0, SelectedFontName(), SelectedFontSize(), SelectedFontStyle())
For Gadget = #Button_1 To #ChangeFont
SetGadgetFont(Gadget, FontID(0))
Next Gadget
Retailler()
EndIf
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: votre écran mesure Ht x mm larg y mm
Micoute a écrit :C'est Dobro qui a raison, moi j'aurais proposer quelque chose comme ça :
le but n'est pas de dire si j'ai raison ou tord.....

Re: votre écran mesure Ht x mm larg y mm
Comme tu le proclames souvent, ce que je pense, n'est pas forcément une tendance générale, mais n'engage que moi-même, pour moi, c'est ta solution qui est la plus judicieuse !
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
Re: votre écran mesure Ht x mm larg y mm
@ Dobro
Oui c'est des possibilités,mais je n'aime pas en général forcer quoi que ce soit sur le matériel des autres. Surtout que si la machine
pour une raison quelconque crack, ou que il y ait une panne EDF, certains ne saurons pas remettre la bonne résolution.
Mais merci pour les pistes.
@ Micoute
Trés joli travail, mais le problème n'est pas la.
La taille de la police, c'est simple, ajusté la taille d'un gadget a partir de la taille d'une police peu se faire a partir de TextHeight("W"), TextWidth("W") par exemple. a partir de la, tu rezise les gadgets dans une boucle.
Comme entrainement de ce que je souhaite, essaye de faire une fenêtre qui dans toute les résolutions a une hauteur qui laisse apparaitre la barre de tache de window a raz de celle-ci bien sur.
Pour infos chez moi en ce moment TEMPETE vent = 120km/h . Je cours aprés tout ce qui n'est pas bien arrimé sur ma terrasse.
Oui c'est des possibilités,mais je n'aime pas en général forcer quoi que ce soit sur le matériel des autres. Surtout que si la machine
pour une raison quelconque crack, ou que il y ait une panne EDF, certains ne saurons pas remettre la bonne résolution.
Mais merci pour les pistes.
@ Micoute
Trés joli travail, mais le problème n'est pas la.
La taille de la police, c'est simple, ajusté la taille d'un gadget a partir de la taille d'une police peu se faire a partir de TextHeight("W"), TextWidth("W") par exemple. a partir de la, tu rezise les gadgets dans une boucle.
Comme entrainement de ce que je souhaite, essaye de faire une fenêtre qui dans toute les résolutions a une hauteur qui laisse apparaitre la barre de tache de window a raz de celle-ci bien sur.



Pour infos chez moi en ce moment TEMPETE vent = 120km/h . Je cours aprés tout ce qui n'est pas bien arrimé sur ma terrasse.
Re: votre écran mesure Ht x mm larg y mm
Bonsoir MLD, je pense que pour qu'on voit la barre des tâches, il faut la mesurer, mais pas simple si tu ne travaille pas sur cet écran et qu'ensuite tu retranches cette mesure à la hauteur de ta fenêtre et bien sûr retrancher aussi la position y de ta fenêtre sur l'écran, mais je sais que tu n'es pas sot à ce point !
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !