Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Quel est l'évènement qui permet de savoir quand on entre dans une page d'un contrôle onglet.
auteur : Rdesfx
Il faut utiliser "Sur Changement" et tester la page active

Me![CtlTab1].Value => (n° de la page selectionnée)

Comment avoir le nom de l'onglet ou autre auquel appartient un contrôle ?
auteur : Drosera
Me.Texte1.Parent.Name
Où Texte1 est le nom du contrôle.


Comment mettre des couleurs sur un contrôle onglet ?
auteur : Starec
1 – Préparation :

L'onglet comporte une propriété Style de Fond, celle-ci sera réglée à Transparent par le code. De plus chaque page de l'onglet a une propriété Remarque (TAG), dans celle-ci vous mettrez la couleur que vous souhaitez, il s'agit d'un nombre de type long, que vous pouvez récupérer en sélectionnant une couleur sur n'importe quel autre contrôle.

Sur votre formulaire positionnez un contrôle rectangle (que nous nommerons recFondOnglet), celui-ci aura un fond opaque (réglé la propriété Style de Fond à standard), et positionnez le en arrière plan (Menu : Format/Mettre en Arrière plan). La position et la taille de ce formulaire seront réglées par le code.

Sur ce formulaire vous allez positionner 4 contrôles, ce sera des boutons de commandes MS Forms 2.0, vous les trouverez sous le nom Microsoft Forms 2.0 CommandButton dans le menu : Insertion/Contrôle ActiveX …
Ces boutons seront nommés cmdOngletX avec X variant de 0 à 3, car dans l'exemple nous avons 4 onglets. La taille et la position de ces contrôles seront réglés par le code, ceux-ci se positionneront à la place des onglets.
Nous utilisons ce contrôle, car celui-ci va toujours rester au-dessus.



2 - Code :
Option Compare Database
Option Explicit
 
' ===== déclaration des variables publiques =====
Public tabCouleur() As Long           ' stockage des couleurs dans un tableau
 
Public Sub PrepaCouleurOnglet(frm As Form, ctrlOnglet As TabControl)
    ' ======================================================================================
    ' Procedure     : Module :Module1 // Procédure : PrepaCouleurOnglet
    ' DateTime      : 09/11/2007 17:43
    ' Auteur        : Starec -  http://starec.developpez.com
    ' Description   : Cette procédure va permettre de paramètrer les couleurs du contrôle
    '                 onglet
    '=======================================================================================
    
    ' ===== déclaration =====
    Dim intNbrPage As Integer            ' nombre de pages
    Dim i As Integer
    Dim ctrl As Control
    
    ' mise en transparence du contrôle onglet
    frm.Controls(ctrlOnglet.Name).BackStyle = 0
    
    ' positionnement du rectangle servant de fond
    With frm.recFondOnglet
        .Top = frm.Controls(ctrlOnglet.Name).Top
        .Left = frm.Controls(ctrlOnglet.Name).Left
        .Height = frm.Controls(ctrlOnglet.Name).Height
        .Width = frm.Controls(ctrlOnglet.Name).Width
    End With
    
    ' répartition des onglets automatique pour que ceux-ci soient correctement disposés.
    frm.Controls(ctrlOnglet.Name).TabFixedWidth = frm.Controls(ctrlOnglet.Name).Width / frm.Controls(ctrlOnglet.Name).Pages.Count
    
    ' récupération du nombre de pages
    intNbrPage = frm.Controls(ctrlOnglet.Name).Pages.Count
    
    ' redimensionnement du tableau
    ReDim tabCouleur(0 To intNbrPage - 1)
    
    ' on rempli le tableau avec les couleurs de la propriété remarque (tab) des pages
    For i = 0 To intNbrPage - 1
        tabCouleur(i) = frm.Controls(ctrlOnglet.Name).Pages(i).Tag
    Next i
    
    ' on met les couleurs dans les boutons de commandes on en profite pour les positionner
    ' et les retailler
    ' ceux-ci son nommés cmdOngletX avec X de 0 au nombre d'onglets -1
    For Each ctrl In frm.Controls
        ' on test le nom des contrôles pour trouver les boutons
        If Left(ctrl.Name, 9) = "cmdOnglet" Then
            ' on affecte la couleur
            ctrl.BackColor = tabCouleur(Mid(ctrl.Name, 10))
            ' on change les propriétés des boutons de commandes
            With ctrl
                ' hauteur
                .Height = frm.Controls(ctrlOnglet.Name).TabFixedHeight + 40
                ' largeur
                .Width = frm.Controls(ctrlOnglet.Name).TabFixedWidth - 10
                ' légende
                .Caption = frm.Controls(ctrlOnglet.Name).Pages(CLng(Mid(ctrl.Name, 10))).Caption
                ' position par rapport au haut du formulaire
                .Top = frm.Controls(ctrlOnglet.Name).Top
                ' position par rapport au bord gauche du formulaire
                .Left = frm.Controls(ctrlOnglet.Name).Left + CLng(Mid(ctrl.Name, 10)) * frm.Controls(ctrlOnglet.Name).TabFixedWidth + 10
            End With
            
        End If
    Next ctrl
            
End Sub

Ensuite appelez ce code sur l'évènement Load du formulaire. (Dans notre cas, le contrôle onglet se nomme mstTest.
Private Sub Form_Load()
    ' préparation de l'onglet
    Call PrepaCouleurOnglet(Me, Me.mstTest)
    ' on affecte la couleur à la première page
    Me.recFondOnglet.BackColor = tabCouleur(0)
End Sub

Ensuite mettez le code suivant sur l'évènement Change de votre formulaire.
Private Sub mstTest_Change()
    ' sur l'évènement change de notre contrôle onglet on va affecter les couleurs au rectangle de fond
    Select Case Me.mstTest.Value
        Case 0
            Me.recFondOnglet.BackColor = tabCouleur(0)
        Case 1
            Me.recFondOnglet.BackColor = tabCouleur(1)
        Case 2
            Me.recFondOnglet.BackColor = tabCouleur(2)
        Case 3
            Me.recFondOnglet.BackColor = tabCouleur(3)
    End Select
End Sub

Ensuite ce code sur l'évènement click des boutons de commandes.
Private Sub cmdOnglet0_Click()
    Me.mstTest.Value = 0
End Sub
 
Private Sub cmdOnglet1_Click()
    Me.mstTest.Value = 1
End Sub
 
Private Sub cmdOnglet2_Click()
    Me.mstTest.Value = 2
End Sub
 
Private Sub cmdOnglet3_Click()
    Me.mstTest.Value = 3
End Sub
Voilà le résultat :

rendu du code


3 – Remarque :

Ce code ne fonctionne que si le style d'onglet de votre contrôle n'est pas en Multi-Ligne.
Si vous rajoutez des contrôles sur vos pages, n'oubliez pas de remettre le rectangle en arrière plan.
Cet exemple est fait avec plusieurs couleurs, vous pouvez bien sûr n'en prendre qu'une.

Attention : Si vous utilisez Access 2003, il faut que l'option "Utilisez les styles Windows" soit décoché dans l'onglet Formulaire des options pour cette astuce fonctionne.
Ce code fonctionne sur les versions Access 2000, 2002 et 2003, il n'a pas été testé sur les versions 97 et 2007.

téléchargement : Télécharger la base exemple

precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2004  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com