| Vous avez plusieurs solutions possibles. La première est de poser un contrôle sur la form et de lui donner un index, par exemple 0.
Pour créer les autres contrôles à l'exécution, il faut les charger avec Load, les positionner, puis les rendre visibles.
Vous pouvez ensuite détruire ces contrôles avec Unload. Pour tester l'exemple suivant, placez un textbox sur une form et donnez-lui l'index 0.
Ces quelques lignes font apparaître 9 autres textbox : Dim i As Long
For i = 1 To 9
Load Text1(i)
Text1(i).Top = Text1(i - 1).Top + Text1(0).Height + 60
Text1(i).Visible = True
Next Vous pouvez ensuite les détruire : Dim i As Long
For i = 1 To 9
Unload Text1(i)
Next Une autre façon de procéder consiste à ajouter un élément à la collection Controls de la form. Auparavant il faut avoir déclaré
votre contrôle dans la partie Déclarations du module de la form. Une fois la déclaration ajoutée, vous pourrez sélectionner votre
contrôle dans la liste déroulante au-dessus de l'éditeur de code, comme si le contrôle avait été posé sur la form. Exemple pour un textbox : Dim WithEvents TextBoxDynamique As VB.TextBox Nous pouvons alors créer le contrôle, le placer, le dimensionner et le rendre visible : Set TextBoxDynamique = Me.Controls.Add("VB.TextBox", "txtDynamic")
TextBoxDynamique.Left = 2000
TextBoxDynamique.Top = 1000
TextBoxDynamique.Width = 1500
TextBoxDynamique.Height = 70
TextBoxDynamique.Visible = True |
| Quand la fermeture d'une form a été demandée, elle reçoit l'évènement QueryUnload. Dans l'exemple suivant, la form ne se ferme pas, sauf si la demande de fermeture est due à la commande Unload : Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If UnloadMode <> vbFormCode Then Cancel = 1
End Sub |
| Placez tout d'abord ces déclarations dans le module de la form : Private Const SC_CLOSE = &HF060&
Private Const MF_BYCOMMAND = &H0&
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long Puis ces quelques lignes dans la procédure Form_Load : Dim hSysMenu As Long
hSysMenu = GetSystemMenu(Me.hwnd, False)
RemoveMenu hSysMenu, SC_CLOSE, MF_BYCOMMAND |
| Ajoutez ces déclarations dans le module de votre form : Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const HWND_TOPMOST = -1
Private Declare Function SetWindowPos Lib "USER32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, _
ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Et placez cette ligne dans la procédure Form_Load : SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE |
| Elles sont dans la collection Forms. Ainsi cette boucle décharge toutes les forms : Dim f As Form
For Each f In Forms
Unload f
Next |
| Placez ce code source dans le module de votre form. Le principe consiste ici à déplacer et redimensionner les contrôles afin qu'ils soient disposés de la même façon. Ainsi si la form a subit un agrandissement de 4 * 3, toutes les distances sont multipliées par les mêmes facteurs.
Une autre méthode, plus souvent utilisée, consiste à agrandir seulement les contrôles principaux, et à garder les mêmes dimensions pour les contrôles plus petits (boutons, listes déroulantes, etc...). Mais dans ce cas un code source spécifique doit être écrit pour chacune de vos forms. Dim lar As Long, lng As Long
Private Sub Form_Load()
lng = Me.Width
lar = Me.Height
End Sub
Private Sub Form_Resize()
Dim ctl As Control
If (Me.WindowState = 1) Then Exit Sub
For Each ctl In Me.Controls
If TypeOf ctl Is ComboBox Then
ctl.Move ctl.Left * Me.Width / lng, ctl.Top * Me.Height / lar, ctl.Width * Me.Width / lng
Else
ctl.Move ctl.Left * Me.Width / lng, ctl.Top * Me.Height / lar, _
ctl.Width * Me.Width / lng, ctl.Height * Me.Height / lar
End If
Next
lng = Me.Width
lar = Me.Height
End Sub |
Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.
|