OVH Cloud OVH Cloud

Modifier paramètres d'affichage (résolution par prog)

18 réponses
Avatar
Driss HANIB
Bonjour à tous

j'ai développé un petit prog qui permet de visualiser l'emploi du temps
simultané de plusieurs personnes (ici 6 mais possibilité de + ou -) par
jour.
j'ai fait ce développement sur un poste avec une résolution d'écran de
1024-768
Or certains utilisateurs (ou utilisatrices) sont sur des postes avec des
petits écrans (eh oui matériel plus anciens) ou ont pris l'habitude d'écran
800 x 600.

De ce fait, mon prog dépasse de l'écran.
deux solutions s'offrent à moi..
1. prévoir un redimensionnement de la fenêtre en fonction de la résolution.
2. prévoir, si c'est possible, un chagement de résolution, si ma fenetre est
activée et un retour à la résolution normale (d'origine plutot) si le prog
est minimisé ou terminé.

je pencherai vers la seconde solution (sans connaitre le niveau de
difficulté).
je voudrai donc savoir :
- comment trouver la réssolution d'origine , et comment la conserver
(variable vec quoi dedans.. ceci à voir selon la nature de l'info obtenue)
- s'il est possible de provoquier une commutaion "à la volée de la
résolution", éventiellement après avoir vérifié que la carte graphique
supporte cette résultion..
- et recommuter lors que le prog n'est plus visible (là je cache la fenêtre
avec mise dans le systray)

est ce raisonnable et réalisable ?
A préciser que la majorité des postes concernés sont sous W98 SE
Driss

8 réponses

1 2
Avatar
Driss HANIB
je regarde cela
merci scraper
Driss

"scraper" a écrit dans le message de
news:%
Bonjour Jean-marc, dans le message
news:443ce0c2$0$13893$
tu disais :

> oui par exemple, ou même simplement form.width et form.height. Tu
> fais en sorte que par défaut, la fenêtre s'ouvre en plein écran, et
> le tour est joué, pour ce qui est des dimensions en tout cas.


et sinon, avec l'API GetWorkArea pour récupérer directement les dimentions
utiles de l'écran?



--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper



Avatar
TouTi
Salut

j'ai développé un petit prog qui permet de visualiser l'emploi du temps
simultané de plusieurs personnes (ici 6 mais possibilité de + ou -) par
jour.
j'ai fait ce développement sur un poste avec une résolution d'écran de
1024-768
Or certains utilisateurs (ou utilisatrices) sont sur des postes avec des
petits écrans (eh oui matériel plus anciens) ou ont pris l'habitude
d'écran
800 x 600.



Voilà un bout de code que j'utilise depuis pas mal de temps sur mes W98 pour
changer de la réso 800*600 --> à 640*480 et inversement
A essayer pour ton cas...
Je viens d'essayer sur XP cela fonctionne aussi....


Global eclarg!, echaut!
Private Declare Function EnumDisplaySettings Lib "user32" Alias
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As
Long, lpDevMode As Any) As Boolean
Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd
As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Const DM_WIDTH = &H80000
Private Const DM_HEIGHT = &H100000
Private Const WM_DEVMODECHANGE = &H1B
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0
Global Const SPI_SCREENSAVERRUNNING = 97
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

Dim dmEcran As DEVMODE

Sub ResolutionEcran(sgWidth As Single, sgHeight As Single)
Dim blTMP As Boolean
Dim lgTMP As Long
lgTMP = 0
Do
blTMP = EnumDisplaySettings(0, lgTMP, dmEcran)
lgTMP = lgTMP + 1
Loop Until Not blTMP
dmEcran.dmFields = DM_WIDTH Or DM_HEIGHT
dmEcran.dmPelsWidth = sgWidth
dmEcran.dmPelsHeight = sgHeight
lgTMP = ChangeDisplaySettings(dmEcran, 0)
Call SendMessage(HWND_BROADCAST, WM_DEVMODECHANGE, 0, 0)
End Sub

'Pour récupérer la réso de base
eclarg! = Screen.Width Screen.TwipsPerPixelX
echaut! = Screen.Height Screen.TwipsPerPixelY


'appel de la sub où tu veux
ResolutionEcran 800, 600
ou
ResolutionEcran eclarg!, echaut!

TouTi
Avatar
Thierryp
Bonjour,

Pour répondre à ta réponse, voilà le seul truc que j'ai en plein écran.... :

VERSION DE DEMONSTRATION
Vous ne pouvez enregistrer les saisies, mais il vous est laissé la
possibilité de tester ce logiciel.
Si vous voulez utiliser pleinement ce logiciel, le commander sur le
site de l'auteur, voir le menu d'aide <?>


Je ne peux utiliser aucune fonction utile, à part taper des lettres dans
des petites cases qui représentent apparemment un jour (à ce niveau, ce
n'est plus un planning, ça s'appelle un agenda...), même une impression
ne fonctionne pas...
Je ne veux pas critiquer le travail, je ne suis pas assez pro pour le
faire....mais au moins je n'ai pas la prétention de vouloir vendre un
produit !!

Je pensais que sur les forums, des bénévoles donnaient gratuitement des
infos ou des soluces, pas des solutions payantes !

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

X a écrit :
Bonjour, réponse au mail:

Déjà c'est parce que ça a été évoqué que j'enai parlé...

Si tu veux que je te réponde, faudrait mettre ton email quand tu écris
:o)

Je viens de regarder, le pavé est un peu désagréable, je veux bien mais
je n'ai pas laissé de ligne apparente totalement, car il y en a qui pourrait
s'en contenter (1 seule)...

Par contre, on peut très bien saisir et voir verticalement et
horizontalement ce que ça donne...

On ne peut enregistrer le fichier, mais là ça ne servirait à rien de
pouvoir enregistrer, de choisir un ancien fichier, de le rappeler, sauf bug
on se doute que ça marche...

Tu peux saisir dans les case et obs pour tester, fais:

<créer>
Tu choisis ton moi et ton année, le principe étant un planning mensuel pour
8 personnes/tâches par mois.
- le fichier se crée, il demande une obs éventuelle pour le planning
moisX+annéeY
- Le calendrier s'affiche
- A droite on saisit les taches/noms
- Puis au jour considéré ce qu'on veut
C'est très petit du 8, mais c'est la seule solution pour avoir tout à
l'écran...
---donc à ce stade tu vois bien ce que ça donne---

<imprimer>
Idem, tu vois après saisie ce que ça donne...

De quoi as-tu besoin d'autre pour le tester??? On a un aperçu, saisis un
peu dedans tu verras...




Avatar
Thierryp
Bonjour,

J'avais juste oublié une petite remarque.... Livrer un zip qui s'extrait
dans un répertoire
C:Documents and SettingsAdministrateurLocal
SettingsTempplanning_demo, pour quelqu'un qui n'est pas un pro, c'est
pas top; surtout que la fenêtre zip donne le chemin en mode DOS (tu
sais, avec les ~ que pas un néophyte ne comprend....); même pour moi,
qui pratique un peu, j'ai eu du mal !!

conclusion : 10 € ce soft, c'est encore 10 € de trop

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

X a écrit :
Bonjour, réponse au mail:

Déjà c'est parce que ça a été évoqué que j'enai parlé...

Si tu veux que je te réponde, faudrait mettre ton email quand tu écris
:o)

Je viens de regarder, le pavé est un peu désagréable, je veux bien mais
je n'ai pas laissé de ligne apparente totalement, car il y en a qui pourrait
s'en contenter (1 seule)...

Par contre, on peut très bien saisir et voir verticalement et
horizontalement ce que ça donne...

On ne peut enregistrer le fichier, mais là ça ne servirait à rien de
pouvoir enregistrer, de choisir un ancien fichier, de le rappeler, sauf bug
on se doute que ça marche...

Tu peux saisir dans les case et obs pour tester, fais:

<créer>
Tu choisis ton moi et ton année, le principe étant un planning mensuel pour
8 personnes/tâches par mois.
- le fichier se crée, il demande une obs éventuelle pour le planning
moisX+annéeY
- Le calendrier s'affiche
- A droite on saisit les taches/noms
- Puis au jour considéré ce qu'on veut
C'est très petit du 8, mais c'est la seule solution pour avoir tout à
l'écran...
---donc à ce stade tu vois bien ce que ça donne---

<imprimer>
Idem, tu vois après saisie ce que ça donne...

De quoi as-tu besoin d'autre pour le tester??? On a un aperçu, saisis un
peu dedans tu verras...




Avatar
Thierryp
Bonjour,

Cette fois c'est la dernière : je viens d'essayer de supprimer le
programme....je te fais grâce des innombrables messages d'erreur
auxquels j'ai eu droit, avant de voir que windows refusait obstinément
de me supprimer ton "truc" des programmes installés...............

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

X a écrit :
Bonjour, réponse au mail:

Déjà c'est parce que ça a été évoqué que j'enai parlé...

Si tu veux que je te réponde, faudrait mettre ton email quand tu écris
:o)

Je viens de regarder, le pavé est un peu désagréable, je veux bien mais
je n'ai pas laissé de ligne apparente totalement, car il y en a qui pourrait
s'en contenter (1 seule)...

Par contre, on peut très bien saisir et voir verticalement et
horizontalement ce que ça donne...

On ne peut enregistrer le fichier, mais là ça ne servirait à rien de
pouvoir enregistrer, de choisir un ancien fichier, de le rappeler, sauf bug
on se doute que ça marche...

Tu peux saisir dans les case et obs pour tester, fais:

<créer>
Tu choisis ton moi et ton année, le principe étant un planning mensuel pour
8 personnes/tâches par mois.
- le fichier se crée, il demande une obs éventuelle pour le planning
moisX+annéeY
- Le calendrier s'affiche
- A droite on saisit les taches/noms
- Puis au jour considéré ce qu'on veut
C'est très petit du 8, mais c'est la seule solution pour avoir tout à
l'écran...
---donc à ce stade tu vois bien ce que ça donne---

<imprimer>
Idem, tu vois après saisie ce que ça donne...

De quoi as-tu besoin d'autre pour le tester??? On a un aperçu, saisis un
peu dedans tu verras...




Avatar
Driss HANIB
oui Thierryp..

je suis à 100 % d'accord sur tes remarques, ayant déjà pratiqué le "coco".
Suis tous ses posts et réponses et tu verras sans problème que tout se
tient..
Il est toujours égal à lui même...

Il n'avait manifestement pas bien compris ma question intiale..mais ne
t'inquiète pas c'est la routine ;o(( ou ;o)))

n'hésite pas à me mailer en privé (pour ne pas encombrer le NG), je
t'expliquerai..

Driss




"Thierryp" a écrit dans le message de
news:

Bonjour,

Cette fois c'est la dernière : je viens d'essayer de supprimer le
programme....je te fais grâce des innombrables messages d'erreur
auxquels j'ai eu droit, avant de voir que windows refusait obstinément
de me supprimer ton "truc" des programmes installés...............

@+ thierryp

------------------------
Passer pour un idiot aux yeux d'un imbécile est une volupté de fin
gourmet. (Courteline)
------------------------

X a écrit :
> Bonjour, réponse au mail:
>
> Déjà c'est parce que ça a été évoqué que j'enai parlé...
>
> Si tu veux que je te réponde, faudrait mettre ton email quand tu


écris
> :o)
>
> Je viens de regarder, le pavé est un peu désagréable, je veux bien


mais
> je n'ai pas laissé de ligne apparente totalement, car il y en a qui


pourrait
> s'en contenter (1 seule)...
>
> Par contre, on peut très bien saisir et voir verticalement et
> horizontalement ce que ça donne...
>
> On ne peut enregistrer le fichier, mais là ça ne servirait à rien de
> pouvoir enregistrer, de choisir un ancien fichier, de le rappeler, sauf


bug
> on se doute que ça marche...
>
> Tu peux saisir dans les case et obs pour tester, fais:
>
> <créer>
> Tu choisis ton moi et ton année, le principe étant un planning mensuel


pour
> 8 personnes/tâches par mois.
> - le fichier se crée, il demande une obs éventuelle pour le planning
> moisX+annéeY
> - Le calendrier s'affiche
> - A droite on saisit les taches/noms
> - Puis au jour considéré ce qu'on veut
> C'est très petit du 8, mais c'est la seule solution pour avoir tout à
> l'écran...
> ---donc à ce stade tu vois bien ce que ça donne---
>
> <imprimer>
> Idem, tu vois après saisie ce que ça donne...
>
> De quoi as-tu besoin d'autre pour le tester??? On a un aperçu,


saisis un
> peu dedans tu verras...
>
>


Avatar
Driss HANIB
merci,

je regarde cela et je teste surtout

Driss

"TouTi" <gelapplication[NsP]@tiscali.fr> a écrit dans le message de
news:%
Salut

> j'ai développé un petit prog qui permet de visualiser l'emploi du temps
> simultané de plusieurs personnes (ici 6 mais possibilité de + ou -) par
> jour.
> j'ai fait ce développement sur un poste avec une résolution d'écran de
> 1024-768
> Or certains utilisateurs (ou utilisatrices) sont sur des postes avec des
> petits écrans (eh oui matériel plus anciens) ou ont pris l'habitude
> d'écran
> 800 x 600.

Voilà un bout de code que j'utilise depuis pas mal de temps sur mes W98


pour
changer de la réso 800*600 --> à 640*480 et inversement
A essayer pour ton cas...
Je viens d'essayer sur XP cela fonctionne aussi....


Global eclarg!, echaut!
Private Declare Function EnumDisplaySettings Lib "user32" Alias
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As
Long, lpDevMode As Any) As Boolean
Declare Function ChangeDisplaySettings Lib "user32" Alias
"ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd
As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const CCHDEVICENAME = 32
Private Const CCHFORMNAME = 32
Private Const DM_WIDTH = &H80000
Private Const DM_HEIGHT = &H100000
Private Const WM_DEVMODECHANGE = &H1B
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0
Global Const SPI_SCREENSAVERRUNNING = 97
Private Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Integer
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type

Dim dmEcran As DEVMODE

Sub ResolutionEcran(sgWidth As Single, sgHeight As Single)
Dim blTMP As Boolean
Dim lgTMP As Long
lgTMP = 0
Do
blTMP = EnumDisplaySettings(0, lgTMP, dmEcran)
lgTMP = lgTMP + 1
Loop Until Not blTMP
dmEcran.dmFields = DM_WIDTH Or DM_HEIGHT
dmEcran.dmPelsWidth = sgWidth
dmEcran.dmPelsHeight = sgHeight
lgTMP = ChangeDisplaySettings(dmEcran, 0)
Call SendMessage(HWND_BROADCAST, WM_DEVMODECHANGE, 0, 0)
End Sub

'Pour récupérer la réso de base
eclarg! = Screen.Width Screen.TwipsPerPixelX
echaut! = Screen.Height Screen.TwipsPerPixelY


'appel de la sub où tu veux
ResolutionEcran 800, 600
ou
ResolutionEcran eclarg!, echaut!

TouTi




Avatar
Patrice Henrio
J'ai fait ce genre de chose. Mon programme histoire sur lequel je travaille
depuis deux ans s'adapte à tout type type d'écran quelle que soit la
résolution (http://histoiremondiale.free.fr).
Si tu es intéressé je t'enverrai le ssources de ce qui peut te servir.
l'idée c'est de partir d'une résolution idéale (celle du poste sur laquelle
tu programmes bien entendu et de considérer que tous les controles de ta
forme ont des dimensions proportionnelles à celle de la forme moyennant une
taille minimum et éventuellement maximum (c'est ce que fait Java).
Ensuite une fois compris comment fonctionne les dimensions en twip tu dois
pouvoir y arriver.

Je te mets ici la méthode resize de ma forme principale (c'est un peu long
mais je n'ai pas le temps de trier juste un ou deux exemples)

Private Sub Form_Resize()
'Hauteur et largeur de l'intérieur de la forme.
Dim HauteurUtile As Long, LargeurUtile As Long

'Hauteur et largeur de l'intérieur de la forme.
HauteurUtile = Me.ScaleHeight
LargeurUtile = Me.ScaleWidth
HauteurControle = 283 / Screen.TwipsPerPixelY
'283 / Screen.TwipsPerPixelY correspond à 5 mm en hauteur quelque soit la
résolution et l'écran

'La carte est un carré dont le côté vaut au moins 75% de la largeur ou la
hauteur - 4 hauteurs de controle.
'Juste sous la carte on a le HScrollBar qui permet de se déplacer en
longitude
'Le contrôle du dessous est le slider des dates
'Sous ce contrôle se trouvent les labels repérant les dates
If HauteurUtile < 5 * HauteurControle Then Exit Sub

If (HauteurUtile - 3.8 * HauteurControle <= LargeurUtile * 0.75) Then
Hauteur = HauteurUtile - 3.8 * HauteurControle
Else
Hauteur = LargeurUtile * 0.75
End If

'Ne pas oublier la largeur, même si c'est la même valeur que la hauteur
Largeur = Hauteur



'Initialisation de l'écran
Ecran.HautGauche.X = 0
Ecran.HautGauche.Y = 0
Ecran.BasDroite.X = Hauteur
Ecran.BasDroite.Y = Hauteur

'Initialisation des 4 coins
Coins(1) = Ecran.HautGauche
Coins(3) = Ecran.BasDroite
Coins(2).X = Coins(1).X
Coins(2).Y = Coins(3).Y
Coins(4).X = Coins(3).X
Coins(4).Y = Coins(1).Y

'la carte est adaptée pour la taille maximale de la forme
'quand on "resize" la forme, la carte ne se redimensionne pas
'mais elle représente une fenêtre sur la carte maximale.
'C'est utile pour redessiner la carte.
If Not Me.Carte.Visible Then
CoefficientX = (Hauteur * Cos20Degré) / (2 * Sin20Degré)
CoefficientY = CoefficientX * Cos20Degré

End If

'modification de la dimension de la carte
With Me.Carte
.Height = Hauteur
.Width = Hauteur
End With

With Me.CopieCarte
.Height = Hauteur
.Width = Hauteur
End With
'modification de la zone loupe, elle est centrée et correspond à 1/5 de la
largeur de la carte.
If ZoneLoupeValide Then ZoneLoupe = CréerZoneLoupe

'modification du ScrollBar de date
Dim I As Long
With Me.ScrChoixDate
.Width = LargeurUtile
.Height = HauteurControle
.Top = Hauteur + HauteurControle
.Left = 0
.Value = Année
'On place les repères pour les dates de -3100 à 2000, 5 repères (tous les
mille ans)
For I = 1 To 6
Me.LblChoixDate(I).Height = HauteurControle * 0.8
Me.LblChoixDate(I).Top = Hauteur + 2 * HauteurControle
Me.LblChoixDate(I).Left = LargeurUtile * _
((Me.LblChoixDate(I).Caption - .Min) / (.Max -
.Min)) - _
Me.LblChoixDate(I).Width / 2
Next I
End With

'Modification du bouton Options
With Me.CmdLoupe
.Left = Hauteur
.Top = Hauteur
.Height = HauteurControle
.Width = HauteurControle
End With

'modification du ScrollBar Latitude et du scrollBar Longitude
With Me.ScrLat
.Left = Hauteur
.Top = 0
.Height = Hauteur
.Width = HauteurControle
.Value = -Latitude
End With

With Me.ScrLong
.Left = 0
.Top = Hauteur
.Height = HauteurControle
.Width = Hauteur
.Value = Longitude
End With

'modification du LblScrDate
' With Me.LblScrDate
' .Height = HauteurControle
' .Top = Hauteur
' .Left = LargeurUtile * _
' ((Année - Me.ScrChoixDate.Min) / (Me.ScrChoixDate.Max -
Me.ScrChoixDate.Min)) - _
' .Width / 2
' .Caption = Année
' .Visible = True
' End With

'Modification du FrameInfo

With Me.FrameInfo
.Width = LargeurUtile
.Height = HauteurControle
.Left = 0
.Top = Hauteur + 2.8 * HauteurControle
End With

Dim L As Long
L = 50

With Me.LblCentre
.Left = L
End With

With Me.LblDate
.Left = 2 * L + Me.LblCentre.Width
End With
With Me.Lbloupe
.Left = 3 * L + Me.LblCentre.Width + Me.LblDate.Width
End With

'Modification du WebBrowser Histoire
With Me.WBHistoire
.Width = (Me.ScaleWidth - Me.Carte.Width - HauteurControle)
.Height = Hauteur + HauteurControle
.Top = 0
.Left = Me.Carte.Width + HauteurControle
End With
PositionnerLeWebBrowser

'Modification de la forme et du WebBrowser Dynasties
With FormeDynasties
.Left = (Me.ScaleWidth / 4) * Screen.TwipsPerPixelX
.Top = (Me.ScaleHeight / 4) * Screen.TwipsPerPixelY
.Height = 2 * .Top
.Width = 2 * .Left
End With

'Modification de la boîte de message Loupe
With FormeLoupe
.Left = (Hauteur * Screen.TwipsPerPixelX - .Width) / 2
.Top = (Hauteur * Screen.TwipsPerPixelY - .Height) / 2
End With

End Sub




"Driss HANIB" a écrit dans le message de news:
uy76v%
je regarde cela
merci scraper
Driss

"scraper" a écrit dans le message de
news:%
Bonjour Jean-marc, dans le message
news:443ce0c2$0$13893$
tu disais :

> oui par exemple, ou même simplement form.width et form.height. Tu
> fais en sorte que par défaut, la fenêtre s'ouvre en plein écran, et
> le tour est joué, pour ce qui est des dimensions en tout cas.


et sinon, avec l'API GetWorkArea pour récupérer directement les
dimentions
utiles de l'écran?



--

Adresse invalide
Merci de répondre sur le forum ...
http://scraper.chez-alice.fr

scraper







1 2