OVH Cloud OVH Cloud

Resize MDIform et XP

2 réponses
Avatar
Christophe
Bonjour,

dans l'évenemnt Resize de ma MDIform1 j'invoque une fonction privée de la
MDIform (AligneControle) que j'ai codé comme suit:

Ceci marche parfaitement avec Win98 mais sous XP certains controle ne
s'aligne pas correctement lors d'un resize en cours d'utilisation du
programme, je m'explique, lors de l'ouverture du programme le premier
evenement resize est déclanché tout est OK , je bascule la fenetre dans la
barre des taches , je la fait revenir en principale est là certain controles
ne s'alignent plus correctement..
??

Salutations

Christophe Vergon

Private Sub AligneControle()
Dim myrect As Rect
Dim lwidth&
Dim lheight&
Dim dummy&
Dim Xpix As Double
Dim Ypix As Double

Pctbulle.Height = 25
Pctbulle.Width = 140
Xpix = Screen.TwipsPerPixelX
Ypix = Screen.TwipsPerPixelY
Pctscreen.ScaleMode = 3
' dimensionne zone dessin a max
dummy& = GetClientRect&(Me.hwnd, myrect)

If myrect.Right = 0 Or myrect.Bottom = 0 Then
MsgBox ("problèmes sur resize MDIFRM")
Exit Sub
End If
Pctbutton.align = 4
lwidth& = Pctscreen.ScaleY(myrect.Bottom, 3, 8) \ 6
Pctloupe.Height = lwidth&
Pctbutton.Width = lwidth&
Pctloupe.Width = lwidth&

Pctscreen.Width = myrect.Right * Xpix - Pctbutton.Width

Label3.Left = 0
Label3.Top = lwidth&
Label3.Width = lwidth&
lheight& = Label3.Height
lblX.Left = 0
lblX.Top = lwidth& + 2 * Label3.Height
lblX.Height = lheight&
lblX.Width = lwidth& \ 2
LblY.Left = 0
LblY.Top = lblX.Top + lheight&
LblY.Height = lheight&
LblY.Width = lwidth& \ 2
LblDx.Left = lwidth& \ 2
LblDx.Top = lblX.Top
[......]
'toutes les lignes de code sont ensuite de même type les propriété top left
height width étant définies de manière relative
End function

2 réponses

Avatar
Zoury
Salut Christophe! :O)

As-tu comparé les valeurs entre des variables durant l'exécution entre 98 et
XP ? tu pourrais peut-être trouvé d'où vient le problème ?
Je voulais glisser juste te conseiller l'utilisation de la méthode Move()
qui rend le redimensionnement des contrôles plus "smooth" au lieu de
modifier Left, Top, Width et Height séparément..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

"Christophe" <geo.ch@(wormfuck)tiscali.fr> a écrit dans le message de
news:cco9bj$sue$
Bonjour,

dans l'évenemnt Resize de ma MDIform1 j'invoque une fonction privée de la
MDIform (AligneControle) que j'ai codé comme suit:

Ceci marche parfaitement avec Win98 mais sous XP certains controle ne
s'aligne pas correctement lors d'un resize en cours d'utilisation du
programme, je m'explique, lors de l'ouverture du programme le premier
evenement resize est déclanché tout est OK , je bascule la fenetre dans la
barre des taches , je la fait revenir en principale est là certain


controles
ne s'alignent plus correctement..
??

Salutations

Christophe Vergon

Private Sub AligneControle()
Dim myrect As Rect
Dim lwidth&
Dim lheight&
Dim dummy&
Dim Xpix As Double
Dim Ypix As Double

Pctbulle.Height = 25
Pctbulle.Width = 140
Xpix = Screen.TwipsPerPixelX
Ypix = Screen.TwipsPerPixelY
Pctscreen.ScaleMode = 3
' dimensionne zone dessin a max
dummy& = GetClientRect&(Me.hwnd, myrect)

If myrect.Right = 0 Or myrect.Bottom = 0 Then
MsgBox ("problèmes sur resize MDIFRM")
Exit Sub
End If
Pctbutton.align = 4
lwidth& = Pctscreen.ScaleY(myrect.Bottom, 3, 8) 6
Pctloupe.Height = lwidth&
Pctbutton.Width = lwidth&
Pctloupe.Width = lwidth&

Pctscreen.Width = myrect.Right * Xpix - Pctbutton.Width

Label3.Left = 0
Label3.Top = lwidth&
Label3.Width = lwidth&
lheight& = Label3.Height
lblX.Left = 0
lblX.Top = lwidth& + 2 * Label3.Height
lblX.Height = lheight&
lblX.Width = lwidth& 2
LblY.Left = 0
LblY.Top = lblX.Top + lheight&
LblY.Height = lheight&
LblY.Width = lwidth& 2
LblDx.Left = lwidth& 2
LblDx.Top = lblX.Top
[......]
'toutes les lignes de code sont ensuite de même type les propriété top


left
height width étant définies de manière relative
End function





Avatar
Christophe
Salut et merci pour la réponse, j'utilise pas le move je vais essayer.
(il me semble d'ailleurs t'avoir lu sur le même sujet ici même)

Concernant le pb XP / 98 j'ai progresser dans l'identification du
bug.malheureusement je n'installe pas visual studio sur la machine XP elle
ne m'appartient pas. Je suis obligé de dev sous 98 c'est exigé, mais la plus
part des testeurs travaillent avec XP (faut pas chercher c'est comme ça même
si ça parait bête).

J'utilise la function settopmostwindows décrite dans la FAQ ey j'ai remarqué
que ce bug survenait lorsqu'une fenêtre non MDI child est affichée TopMost
sous les contrôles, pour l'instant j'ai contourné le pb en mettant les
controles dans leur position initiale sous 1024*768 et ça passe.

A+
Christophe



"Zoury" a écrit dans le message de news:
#
Salut Christophe! :O)

As-tu comparé les valeurs entre des variables durant l'exécution entre 98


et
XP ? tu pourrais peut-être trouvé d'où vient le problème ?
Je voulais glisser juste te conseiller l'utilisation de la méthode Move()
qui rend le redimensionnement des contrôles plus "smooth" au lieu de
modifier Left, Top, Width et Height séparément..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

"Christophe" <geo.ch@(wormfuck)tiscali.fr> a écrit dans le message de
news:cco9bj$sue$
> Bonjour,
>
> dans l'évenemnt Resize de ma MDIform1 j'invoque une fonction privée de


la
> MDIform (AligneControle) que j'ai codé comme suit:
>
> Ceci marche parfaitement avec Win98 mais sous XP certains controle ne
> s'aligne pas correctement lors d'un resize en cours d'utilisation du
> programme, je m'explique, lors de l'ouverture du programme le premier
> evenement resize est déclanché tout est OK , je bascule la fenetre dans


la
> barre des taches , je la fait revenir en principale est là certain
controles
> ne s'alignent plus correctement..
> ??
>
> Salutations
>
> Christophe Vergon
>
> Private Sub AligneControle()
> Dim myrect As Rect
> Dim lwidth&
> Dim lheight&
> Dim dummy&
> Dim Xpix As Double
> Dim Ypix As Double
>
> Pctbulle.Height = 25
> Pctbulle.Width = 140
> Xpix = Screen.TwipsPerPixelX
> Ypix = Screen.TwipsPerPixelY
> Pctscreen.ScaleMode = 3
> ' dimensionne zone dessin a max
> dummy& = GetClientRect&(Me.hwnd, myrect)
>
> If myrect.Right = 0 Or myrect.Bottom = 0 Then
> MsgBox ("problèmes sur resize MDIFRM")
> Exit Sub
> End If
> Pctbutton.align = 4
> lwidth& = Pctscreen.ScaleY(myrect.Bottom, 3, 8) 6
> Pctloupe.Height = lwidth&
> Pctbutton.Width = lwidth&
> Pctloupe.Width = lwidth&
>
> Pctscreen.Width = myrect.Right * Xpix - Pctbutton.Width
>
> Label3.Left = 0
> Label3.Top = lwidth&
> Label3.Width = lwidth&
> lheight& = Label3.Height
> lblX.Left = 0
> lblX.Top = lwidth& + 2 * Label3.Height
> lblX.Height = lheight&
> lblX.Width = lwidth& 2
> LblY.Left = 0
> LblY.Top = lblX.Top + lheight&
> LblY.Height = lheight&
> LblY.Width = lwidth& 2
> LblDx.Left = lwidth& 2
> LblDx.Top = lblX.Top
> [......]
> 'toutes les lignes de code sont ensuite de même type les propriété top
left
> height width étant définies de manière relative
> End function
>
>
>