OVH Cloud OVH Cloud

lier du code

17 réponses
Avatar
Dan
Bonjour à tous.
Sur VB6
coment peux t'on lier du code au clic sur le rectangle à coté su "X" en
haut a droite pour agrendir la fenétre la fenétre?

D'avance merci de votre aide

10 réponses

1 2
Avatar
Jacques93
Bonjour Dan,
Dan a écrit :
Bonjour à tous.
Sur VB6
coment peux t'on lier du code au clic sur le rectangle à coté su "X" en
haut a droite pour agrendir la fenétre la fenétre?

D'avance merci de votre aide




Dans l'événement Resize de la feuille :

Private Sub Form_Resize()
If Me.WindowState = vbMaximized Then
MsgBox "Agrandie"
ElseIf Me.WindowState = vbMinimized Then
MsgBox "Reduite"
Else
MsgBox "Normale"
End If
End Sub


--
Cordialement,

Jacques.
Avatar
Gloops
Bonjour,

A propos de l'événement Form_Resize, il est assez classique d'y oublier
la procédure d'erreur. Si on y intègre des placements de contrôles,
l'application se termine en erreur lorsqu'on la réduit en icône.

ça ne s'applique pas ici, mais on aura tout ce qu'il faut pour
positionner les contrôles, alors la tentation risque d'arriver vite.

En général je me contente de On Error Resume Next, mais je réalise que
conditionner les positionnements de contrôles à l'état de la fenêtre est
plus clair. Comme ça en cas d'erreur on peut classiquement afficher le
numéro et le texte de l'erreur.
___________________
Jacques93 a écrit :
Dans l'événement Resize de la feuille :

Private Sub Form_Resize()
If Me.WindowState = vbMaximized Then
MsgBox "Agrandie"
ElseIf Me.WindowState = vbMinimized Then
MsgBox "Reduite"
Else
MsgBox "Normale"
End If
End Sub




Avatar
Patrice Henrio
Bonjour gloops

Je ne comprends pas trop ta remarque. Dans ma réponse à Driss, j'utilise la
méthode resize qui replace de nombreux contrôles sur une forme et le
programme accepte de se mettre en icône sans me jeter. Ai-je oublié quelque
chose ?




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

Bonjour,

A propos de l'événement Form_Resize, il est assez classique d'y oublier la
procédure d'erreur. Si on y intègre des placements de contrôles,
l'application se termine en erreur lorsqu'on la réduit en icône.

ça ne s'applique pas ici, mais on aura tout ce qu'il faut pour positionner
les contrôles, alors la tentation risque d'arriver vite.

En général je me contente de On Error Resume Next, mais je réalise que
conditionner les positionnements de contrôles à l'état de la fenêtre est
plus clair. Comme ça en cas d'erreur on peut classiquement afficher le
numéro et le texte de l'erreur.
___________________
Jacques93 a écrit :
Dans l'événement Resize de la feuille :

Private Sub Form_Resize()
If Me.WindowState = vbMaximized Then
MsgBox "Agrandie"
ElseIf Me.WindowState = vbMinimized Then
MsgBox "Reduite"
Else
MsgBox "Normale"
End If
End Sub





Avatar
Gloops
Bonjour Patrice,

C'est dans le même fil, ce que tu dis ?
________________________
Patrice Henrio a écrit :
Bonjour gloops

Je ne comprends pas trop ta remarque. Dans ma réponse à Driss, j'utilise la
méthode resize qui replace de nombreux contrôles sur une forme et le
programme accepte de se mettre en icône sans me jeter. Ai-je oublié quelque
chose ?


Avatar
Patrice Henrio
Il s'agit de ta remarque :
A propos de l'événement Form_Resize, il est assez classique d'y oublier
la procédure d'erreur. Si on y intègre des placements de contrôles,
l'application se termine en erreur lorsqu'on la réduit en icône.


Je fais ce genre de chose dans un resize sans gestion d'erreur et il ne me
jette pas. Pourrais-tu affiner ce que tu entends par positionnement pouvant
générer des erreurs ? (j'avais envoyé la réponse à Driss en privé, elle est
maintenant sur le forum).

A plus.



"Gloops" a écrit dans le message de news:
%
Bonjour Patrice,

C'est dans le même fil, ce que tu dis ?
________________________
Patrice Henrio a écrit :
Bonjour gloops

Je ne comprends pas trop ta remarque. Dans ma réponse à Driss, j'utilise
la méthode resize qui replace de nombreux contrôles sur une forme et le
programme accepte de se mettre en icône sans me jeter. Ai-je oublié
quelque chose ?




Avatar
Gloops
Patrice Henrio a écrit :
Il s'agit de ta remarque :
A propos de l'événement Form_Resize, il est assez classique d'y oublier
la procédure d'erreur. Si on y intègre des placements de contrôles,
l'application se termine en erreur lorsqu'on la réduit en icône.



En fait, je fais aussi des dimensionnements de contrôles. C'est
peut-être là que ça se gâte : si la largeur d'un contrôle est supérieure
à la largeur du formulaire sur lequel il se trouve, ben ça coince.
Pareil en hauteur.

Je ne peux pas le tracer avec précision maintenant (machine en révision,
la dernière de la garantie), mais j'avais une erreur lorsque je mettais
le formulaire en icône, ce qui fait que si je ne mettais pas de
procédure d'erreur, l'application était fermée en catastrophe. Le
problème se posait lors de la procédure de redimensionnement du
formulaire, qui donc contenait des placements et dimensionnements de
contrôles.



Je fais ce genre de chose dans un resize sans gestion d'erreur et il ne me
jette pas. Pourrais-tu affiner ce que tu entends par positionnement pouvant
générer des erreurs ? (j'avais envoyé la réponse à Driss en privé, elle est
maintenant sur le forum).



Pas trouvé ...
Avatar
Patrice Henrio
Voici la méthode resize que j'utilise.
Je considère que tous les contrôles ont une taille proportionnelle à la
taille de l'écran. On peut sans doute améliorer à la manière de JAVA avec en
plus une taille minimum et uen taille maximum.

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

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

Patrice Henrio a écrit :
Il s'agit de ta remarque :
A propos de l'événement Form_Resize, il est assez classique d'y oublier
la procédure d'erreur. Si on y intègre des placements de contrôles,
l'application se termine en erreur lorsqu'on la réduit en icône.



En fait, je fais aussi des dimensionnements de contrôles. C'est peut-être
là que ça se gâte : si la largeur d'un contrôle est supérieure à la
largeur du formulaire sur lequel il se trouve, ben ça coince. Pareil en
hauteur.

Je ne peux pas le tracer avec précision maintenant (machine en révision,
la dernière de la garantie), mais j'avais une erreur lorsque je mettais le
formulaire en icône, ce qui fait que si je ne mettais pas de procédure
d'erreur, l'application était fermée en catastrophe. Le problème se posait
lors de la procédure de redimensionnement du formulaire, qui donc
contenait des placements et dimensionnements de contrôles.



Je fais ce genre de chose dans un resize sans gestion d'erreur et il ne
me jette pas. Pourrais-tu affiner ce que tu entends par positionnement
pouvant générer des erreurs ? (j'avais envoyé la réponse à Driss en
privé, elle est maintenant sur le forum).



Pas trouvé ...


Avatar
Gloops
Patrice Henrio a écrit :
HauteurUtile = Me.ScaleHeight
If HauteurUtile < 5 * HauteurControle Then Exit Sub



Ah, ben voilà tu as prévu le coup.

Je dimensionne un navigateur pour qu'il s'ajuste à la fenêtre.

De mémoire, quelque chose du style :
Me.WebBrowser1.Height = Me.Height - Me.WebBrowser1.Top - 20

J'ai l'impression qu'avec
If Me.WindowState = vbMinimized Then Exit Sub

ça peut aussi faire l'affaire.

Ou encore exit si on est en-dessous d'une certaine hauteur (comme tu as
fait ; d'ailleurs là on prévoit aussi le cas où l'utilisateur réduit la
hauteur jusqu'à ne plus pouvoir voir l'explorateur -drôle d'idée de sa
part mais il faut être prévoyant).

J'ai triché, je me suis contenté de
On Error Resume Next

Moyennant quoi, pour sûr, on ne s'arrête pas sur une erreur.
Avatar
Patrice Henrio
>> HauteurUtile = Me.ScaleHeight
If HauteurUtile < 5 * HauteurControle Then Exit Sub



Ah, ben voilà tu as prévu le coup.



J'avais oublié cette ligne mais elle n'est là que pour des raisons
esthétiques.
D'ailleurs je viens de vérifier en la retirant et le passage en mode minimum
se fait sans difficulté. Est-ce que le problème que tu avais ne pourrait pas
venir d'un composant particulier : pour ma part j'utilise dans la situation
évoquée un webrowser, des labels, des picture box, des menus, des list box,
des scrollbar.

Par contre, il faudrait vérifier, mais je me demande si ta ligne
Me.WebBrowser1.Height = Me.Height - Me.WebBrowser1.Top - 20


qui posait problème ne donnait pas une valeur négative à la propriété height
de ton webBrowser, ce qui expliquerait l'erreur.

A plus.


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

Patrice Henrio a écrit :
HauteurUtile = Me.ScaleHeight
If HauteurUtile < 5 * HauteurControle Then Exit Sub



Ah, ben voilà tu as prévu le coup.

Je dimensionne un navigateur pour qu'il s'ajuste à la fenêtre.

De mémoire, quelque chose du style :
Me.WebBrowser1.Height = Me.Height - Me.WebBrowser1.Top - 20

J'ai l'impression qu'avec
If Me.WindowState = vbMinimized Then Exit Sub

ça peut aussi faire l'affaire.

Ou encore exit si on est en-dessous d'une certaine hauteur (comme tu as
fait ; d'ailleurs là on prévoit aussi le cas où l'utilisateur réduit la
hauteur jusqu'à ne plus pouvoir voir l'explorateur -drôle d'idée de sa
part mais il faut être prévoyant).

J'ai triché, je me suis contenté de
On Error Resume Next

Moyennant quoi, pour sûr, on ne s'arrête pas sur une erreur.


Avatar
Gloops
Patrice Henrio a écrit :
Par contre, il faudrait vérifier, mais je me demande si ta ligne
Me.WebBrowser1.Height = Me.Height - Me.WebBrowser1.Top - 20


qui posait problème ne donnait pas une valeur négative à la propriété height
de ton webBrowser, ce qui expliquerait l'erreur.

A plus.



C'est combien, la hauteur d'un formulaire en mode icône ?
Ce n'est pas zéro ?

Tout le reste est négatif.
1 2