IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Figer colonnes dans formulaire continu [À faire]


Sujet :

IHM

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 16
    Points
    16
    Par défaut Figer colonnes dans formulaire continu
    Salut,
    Est-il possible de figer les colonnes dans un formulaire continu ?
    Sable, moi sous le sable.

  2. #2
    Membre éprouvé
    Avatar de keita
    Homme Profil pro
    Inscrit en
    Novembre 2002
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations forums :
    Inscription : Novembre 2002
    Messages : 881
    Points : 1 121
    Points
    1 121
    Par défaut
    Tu veux dire en mode feuille de données?
    Jamais vu ça en mode continu

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Et ben non, je sais comment çà marche en mode feuille de données mais j'aimerais faire çà en mode continu.
    Sable, moi sous le sable.

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    ???
    Ben ... elles SONT figées en mode continu !
    Tu ne peux pas tirer dessus pour les agrandir me semble-t-il !!!

    Ou alors, le vocabulaire utilisé n'est pas approprié ...

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 20
    Points : 22
    Points
    22
    Par défaut
    Non ; je pense qu'il veut qu'une colone (par ex. à droite de l'écran) reste fixe, alors qu'on peut aller chercher des infos (par ex. à gauche ) qui sont si loin, qu'on ne verrait plus la colonne de gauche.

    C'est évidemment par pure mansuétude que je laisse à d'autres le soin de trouver une solutio !
    La justice est sans miséricorde, mais la miséricorde se moque du jugement (St Jacques)

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Pour répondre à ZeMenace :
    Figer = Quand on se déplace dans l'écran, la colonne est toujours visible.
    Rien à voir avec la taille.
    Ex : Je fige ma colonne tout à gauche, mes colonnes s'étalent sur plusieurs écrans, quand je sors de l'écran de départ, ma colonne figée est toujours visible.
    Voilà tout

    J'suis preneur d'idées.
    a+
    Sable, moi sous le sable.

  7. #7
    Membre confirmé
    Avatar de Etienne Bar
    Homme Profil pro
    Consultant indépendant
    Inscrit en
    Octobre 2002
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Consultant indépendant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2002
    Messages : 282
    Points : 593
    Points
    593
    Par défaut
    A ma connaissance, ce n'est pas posible sauf à utiliser ton formulaire en feuilles de données.

    Sauf peut être une bidouille de génie, mais je ne vois vraiment pas.
    DRH Canal Historique
    Informaticien Indépendant
    http://www.etiennebar.com

  8. #8
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Mes respects mon directeur
    Je lance un apel à tous les génies.
    Un mi-choco au premier qui touve.
    a+
    Sable, moi sous le sable.

  9. #9
    Membre régulier

    Inscrit en
    Novembre 2002
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 73
    Points : 86
    Points
    86
    Par défaut


    tu fais deux sous formulaires l'un à coté de l'autre !
    celui de gauche sert pour la colonne figée et le second pour les autres colonnes !

    il faut juste trouver un code qui intercepte le déplacement dans les enregistrements de celui de droite afin de simuler un scrolling du premier !

    :

  10. #10
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Ok Merci pour l'astuce, c'est un peu chiant, j'essayerai quand même.

    Tu mérites quand même un smarties.
    a+
    Sable, moi sous le sable.

  11. #11
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    EDIT : Cf ce post :
    http://www.developpez.net/forums/sho...31&postcount=8
    pour le code mis à jour.


    Salut,

    C'est résolu mais je répond quand même dans ce post pour pas en ouvrir un nouveau (au cas où les gens utilisent la fonction de recherche... )

    Une bidouille pour figer des contrôles en mode formulaire : lire régulièrement la position de l'ascenceur horizontal et déplacer les contrôles figés pour qu'ils restents visibles.

    Dans l'évenement timer du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Form_Timer()
     Static pos As Long
     Static hwnd As Long
     On Error GoTo fin
     If Screen.ActiveForm.Name = Me.Name Then
         On Error GoTo 0
         If hwnd = 0 Then hwnd = GetScrollBarHwnd(Me.hwnd)
         pos = ScrollForm(hwnd, pos)
     End If
     fin:
     End Sub
    Dans un module à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    Option Compare Database
     Option Explicit
     
     Private Const SIF_RANGE = &H1
     Private Const SIF_PAGE = &H2
     Private Const SIF_POS = &H4
     Private Const SIF_ALL = (SIF_RANGE Or SIF_PAGE Or SIF_POS)
     Private Const WM_VSCROLL = &H115
     Private Const SB_CTL = 2
     Private Const GW_HWNDNEXT = 2
     Private Const GW_CHILD = 5
     Private Const LOGPIXELSX = 88
     
     Private Type ScrollInfo
       cbSize As Long
       fMask As Long
       nMin As Long
       nMax As Long
       nPage As Long
       nPos As Long
       nTrackPos As Long
     End Type
     
     Private Type RECT
       left As Long
       top As Long
       right As Long
       bottom As Long
     End Type
     
     'Déclarations d'API
     Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
     Private Declare Function GetScrollInfo Lib "user32" (ByVal hwnd As Long, ByVal fnBar As Integer, lpsi As ScrollInfo) As Boolean
     Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
     
     Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
     Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
     Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Long, ByVal nIndex As Long) As Long
     
     ' Convertir les twips en pixels
     Private Function PixelToTwips(x As Long) As Long
     Static mult As Long
     Dim hDC As Long
     If mult = 0 Then
         hDC = GetDC(0)
         mult = 1440 / GetDeviceCaps(hDC, LOGPIXELSX)
         ReleaseDC 0, hDC
     End If
     PixelToTwips = x * mult
     End Function
     
     'Recherche handle de la barre horizontale
     Function GetScrollBarHwnd(ByVal FormHwnd As Long) As Long
       Dim CurrenthWnd As Long, lngret As Long
       Dim sWindowText As String, sClassname As String
       Dim MyRect As RECT
     
       CurrenthWnd = GetWindow(FormHwnd, GW_CHILD)
     
       Do Until CurrenthWnd = 0
         Call GetScrollBarHwnd(CurrenthWnd)
     
         sWindowText = Space(255)
         lngret = GetWindowText(CurrenthWnd, sWindowText, 255)
         sWindowText = left(sWindowText, lngret)
     
         sClassname = Space(255)
         lngret = GetClassName(CurrenthWnd, sClassname, 255)
         sClassname = left(sClassname, lngret)
     
         If sClassname = "Scrollbar" Then
           lngret = GetClientRect(CurrenthWnd, MyRect)
           If (MyRect.bottom < MyRect.right) Then
             GetScrollBarHwnd = CurrenthWnd
             Exit Function
     
           End If
         End If
     
         CurrenthWnd = GetWindow(CurrenthWnd, GW_HWNDNEXT)
       Loop
     End Function
     
     
     'Déplace les colonnes fixes
     Public Function ScrollForm(ByVal hwnd As Long, oldpos As Long) As Double
     Dim ctrl As Control
     Dim SI As ScrollInfo
     Dim delta As Long
     Dim max_col As Double
     Dim min_col As Double
     Dim lngret As Long
     Dim tabindex As Double
     
     SI.cbSize = Len(SI)
     SI.fMask = SIF_ALL
     
     lngret = GetScrollInfo(hwnd, SB_CTL, SI)
     delta = PixelToTwips(SI.nPos) - oldpos
     If delta = 0 Then GoTo fin
     min_col = Screen.ActiveForm.Width
     For Each ctrl In Screen.ActiveForm.Section(acDetail).Controls
       If ctrl.Tag = "fixe" Then
        max_col = IIf(ctrl.left + ctrl.Width + delta > max_col, ctrl.left + ctrl.Width + delta, max_col)
       End If
     Next
     On Error Resume Next
     If Screen.ActiveForm.ActiveControl.Tag <> "fixe" And Screen.ActiveForm.ActiveControl.left < max_col Then
         tabindex = Val(Screen.ActiveForm.ActiveControl.tabindex)
         For Each ctrl In Screen.ActiveForm.Section(acDetail).Controls
           If ctrl.tabindex > tabindex And ctrl.left > max_col Then
             ctrl.SetFocus
             If Err.Number = 0 Then Exit For
           End If
         Next
     End If
     On Error GoTo 0
     For Each ctrl In Screen.ActiveForm.Controls
       If ctrl.Tag = "fixe" Then
         ctrl.left = ctrl.left + delta
       End If
     Next
     fin:
     ScrollForm = PixelToTwips(SI.nPos)
     End Function
    Mettez par exemple 100 ms pour le timer et définissez le tag de chaque contrôle à figer à "fixe".
    Mettez les colonnes figées en avant-plan et collées les unes aux autres car les autres colonnes ne sont pas masquées.
    Les contrôles des sections autres que la section détail peuvent aussi être figés pour garder des boutons de l'en-tête toujours visibles par exemple.
    C'est pas très fluide mais de toutes façon c'est pas beaucoup pire que le scrolling d'origine et j'ai pas trouvé mieux!

    A plus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. figer colonne dans gridview
    Par beabea dans le forum ASP.NET
    Réponses: 1
    Dernier message: 17/08/2007, 16h04
  2. Check Box dans Formulaire continu
    Par Tintou dans le forum IHM
    Réponses: 26
    Dernier message: 05/07/2007, 14h24
  3. image dans formulaire continu
    Par cbleas dans le forum IHM
    Réponses: 2
    Dernier message: 04/04/2007, 19h09
  4. Multisélection dans formulaire continu
    Par Farbin dans le forum IHM
    Réponses: 5
    Dernier message: 13/02/2007, 10h26
  5. liste déroulante dans formulaire continu
    Par remi59 dans le forum Access
    Réponses: 7
    Dernier message: 31/03/2006, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo