ScrollBar avec SetWindowLong et GetWindowsLong

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 22 avril 2010 à 16:27
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 23 avril 2010 à 10:37
Bonjour,

Je cherche à gérer les scrollbars crée avec SetWindowLong et je n'y arrive pas... Sa à pourtant pas l'aire si compliqué

Alors déjà un ptit bout de code (à mettre dans un form) :
'Cette API retourne un long représentant le "type" d'affichage de la form (ou de tout control aillant un handle)
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

'Cette API envoie un long représentant le "type" d'affichage de la form (ou de tout control aillant un handle)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const WinLong_SetStyle As Long =  -16

Private Const WinLong_VSCROLL As Long = &H200000
Private Const WinLong_HSCROLL As Long = &H100000

Private Sub Form_Load()
Dim WindowLong As Long
    WindowLong = GetWindowLong(Me.hWnd, WinLong_SetStyle)
    'Ajoute au style la scroll Verticale (si elle n'existe pas)
    If Not CBool(WindowLong And WinLong_VSCROLL) Then
        WindowLong = WindowLong Or WinLong_VSCROLL
    End If
    'Ajoute au style la scroll Horizontale (si elle n'existe pas)
    If Not CBool(WindowLong And WinLong_HSCROLL) Then
        WindowLong =  WindowLong Or WinLong_HSCROLL
    End If
    'Applique le nouveau style
    SetWindowLong Me.hWnd, WinLong_SetStyle, WindowLong
End Sub


Voila jusque ici tout vas pour le mieux, les scrolls on bien été crée .
Par contre elle ne bouge pas

Ensuite j'essaie de les gérer :
Pour sa j'ai ajouté 7 textbox (indexer sa vas plus vite ^^) (nommé text1 de l'index 0 à 6), deux boutons (Command1 gérant le Get et Command2 gérant le Set, voir le bout de code ci dessous), un dernier TextBox pour affiché les valeurs de retour des API (text2), et pour finir un check (Check1) pour envoyé Vrais ou Faux à l'API SetCrollInfo (si qu'un sait à quoi ce bool correspond je suis preneur )

'Retourne les infos des scrolls
Private Declare Function GetScrollInfo Lib "user32" (ByVal hWnd As Long, ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long
'Configure les infos des scrolls
Private Declare Function SetScrollInfo Lib "user32" (ByVal hWnd As Long, ByVal n As Long, lpcScrollInfo As SCROLLINFO, ByVal bool As Boolean) As Long

'La structure attendu par les API GetScrollInfo et SetScrollInfo
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

'Constante permettant d'accéder à la scroll horizontale
Private Const ScrInfo_SB_HORZ  = 0
'Constante permettant d'accéder à la scroll verticale
Private Const ScrInfo_SB_VERT = 1

Private Sub Command1_Click()
    Text2.Text = GetScrollInfo(Me.hWnd, SB_VERT, scroll)
    Text1(0).Text = scroll.cbSize
    Text1(1).Text = scroll.fMask
    Text1(2).Text = scroll.nMax
    Text1(3).Text = scroll.nMin
    Text1(4).Text = scroll.nPage
    Text1(5).Text = scroll.nPos
    Text1(6).Text = scroll.nTrackPos
End Sub

Private Sub Command2_Click()
    scroll.cbSize = Text1(0).Text
    scroll.fMask = Text1(1).Text
    scroll.nMax = Text1(2).Text
    scroll.nMin = Text1(3).Text
    scroll.nPage = Text1(4).Text
    scroll.nPos = Text1(5).Text
    scroll.nTrackPos = Text1(6).Text
    Text2.Text SetScrollInfo(Me.hWnd, SB_VERT, scroll, CBool(Check1.Value  vbChecked))
End Sub


Et là patatras rien ne fonctionne (enfin je comprend pas tout )

[del] Ce que j'ai déjà réussit à comprendre :
- Si le 1ér bit de fMask est à vrais (soit valeur 1,3,5,9,17,...) la scroll du bas disparais (je n'arrive pas à la faire réapparaitre ensuite)
- SetScrollInfo me retourne la valeur de nMax (alors que sa devrais être nPos )
Et puis c'est tout Autant dire pas grand chose /del

Heeeeeeee en faite non j'ai rien compris (pour faire d'autre est j'ai désactivé les set/getwindowlong)
Si min est > max (pas > = mais bien >) la scroll apparais
cbSize doit toujours être = à 28 ???? (voir ici)

Haaaaaaaaaa je comprend plus rien
Help Me plz

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo

4 réponses

Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 avril 2010 à 16:53
Haaaaaaaaa j'ai compris le bool
Le scroll se refesh se fait automatiquement

Je tiens informé de mes évolution

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 avril 2010 à 17:18
Ouuuuppppsssssssss

L'inverstion min max étais dans mon code pas dans l'API
Sa avance sa avance

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
22 avril 2010 à 17:47
Arf il me reste plus qu'à activer mes scrolls pour qu'elle réagisses sur les événements de la souris quand sa veut pas sa veut pas
(J'explique tout ce que j'ai compris ensuite )

Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
23 avril 2010 à 10:37
Dans la famille "démerde toi" je voudrais Polack77

Bon bà je n'y arrive définitivement pas (et je n'est presque plus de temps à accordé à ce sujet)

Du coup je récupère et bricole le code de Steve McMahon (ENCORE merci à lui ) pour en faire des usercontrols (Vertical_ScrollBar, Horizontal_ScrollBar, et FrameAutoScrol)

ici

Amicalement

PS :
Si qu'un à des explications sur comment utilisé correctement les scroll par API je suis preneur (même si c'est dans 5 ans )

1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
0
Rejoignez-nous