29/03/2024
Windev et les Api WindowsNb de visiteurs en ligne : 2
>> Introduction << >> Codes et Forum << >> Download <<


Rubrique : 4 - Windows Common Controls       Sujet : StatusBar
Auteur Message
 °¨¨ JL ¨¨° Posté le : 23/06/2000 12:00:00


//La procédure suivante affiche un barre de statuts divisée en 4 parties :
//    La première pour afficher les messages.
//    La deuxième pour afficher les coordonnées de la souris.
//   La troisième pour afficher l'heure en cours
//    La quatrième pour afficher l'état des touches Num et Maj


Procédure statusbar()

dc est un entier long
hwnd est un entier long  
CCS_TOP est un entier long = 0x1 // barre dans le haut de la fenêtre
CCS_BOTTOM est un entier long = 0x3 // barre dans le bas de la fenêtre
SBT_TOOLTIPS est un entier long = 0x800
ws_child est un entier long = 0x40000000
ws_visible est un entier long = 0x10000000
style est un entier long = ws_child + ws_visible + ccs_bottom + sbt_tooltips

hwnd = AppelDLL32("user32","CreateWindowExA", 0 , "msctls_statusbar32" , "", style , 0 , 0 , 0 , 0 , handle() , null , instance(), null)
si hwnd alors
    // fonte à utiliser
    lpszFace est une chaine asciiz sur 32="Arial"
    font=AppelDLL32("gdi32","CreateFontA" , -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 64, &lpszFace)
    wm_setfont est un entier long=0x30
    SendMessage(hwnd,wm_setfont,font,1)

    // barre divisée en 4 parties
    nbpart est un tableau de 4 entiers long
    nbpart[1]=FenIntLarg()-220
    nbpart[2]=FenIntLarg()-130
    nbpart[3]=FenIntLarg()-70
    nbpart[4]=FenIntLarg()
    sendmessage(hwnd, WM_USER + 4 , 4 , &nbpart)

    // texte affiché dans le première partie
    txt est une chaine asciiz de 128="Exemple de statusbar."
    sendmessage(hwnd , wm_user+1 , 0 , &txt)
    // tooltip affiché si le texte est tronqué
    sendmessage(hwnd , wm_user+16 , 0 , &txt) // tooltip

    // hauteur de la barre
    si hauteurb alors
        sendmessage(hwnd , wm_user+8, hauteurb , 0)
        sendmessage(hwnd , 0x5 , 0 , 0)
    fin
    // couleur de fond de la barre
    // meme couleur que le fond de la fenêtre
    dc = appeldll32("user32","GetDC",handle())
    color est un entier long=appeldll32("gdi32","GetPixel",dc,1,FenIntHaut()-(hauteurb+1))
    sendmessage(hwnd,0x2001,1,color)
    appeldll32("user32","ReleaseDC",handle(),dc)

    renvoyer hwnd
fin
renvoyer faux


// A l'ouverture de la fenêtre :  
// *****************************

global

wm_user est un entier long = 0x400
font est un entier long // fonte utilisée dans le statusbar
hwndwb est un entier long // handle barre
evensize est un entier long
evenmouse est un entier long
hauteurb est un entier = 25 //hauteur de la barre  

hwndwb=statusbar()

evensize = evenement("tstatus","*.",0x5) // wm_size
evenmouse = evenement("tstatus","*.",0x200) // wm_mousemove
theure est un entier long = timersys("affheure",100)


// A la fermeture de la fenêtre :  
// ******************************

Appeldll32("user32","DestroyWindow", hwndwb)
AppelDLL32("gdi32","DeleteObject", font)
finevenement(evensize)
finevenement(evenmouse)
fintimersys(theure)


// La procédure tstatus :  
// **********************

Procédure tstatus()

// si changement dimensions fenêtre modification taille barre
si hwndwb et _eve.wmessage=0x5 alors //wm_size
    appeldll32("user32","MoveWindow",hwndwb,0,FenInthaut(),FenIntLarg(),hauteurb,1)
    // barre divisée en 4 parties
    nbpart est un tableau de 4 entiers long
    nbpart[1]=FenIntLarg()-220
    nbpart[2]=FenIntLarg()-130
    nbpart[3]=FenIntLarg()-70
    nbpart[4]=FenIntLarg()
    sendmessage(hwnd, WM_USER + 4 , 4 , &nbpart)
FIN

// affichage coordonnées souris dans la 2ème partie  
si hwndwb et _eve.wmessage=0x200 alors //wm_mousemove
    posx est un entier = poidsfaible(_eve.lparam)
    posy est un entier = poidsfort(_eve.lparam)
    txt est une chaine asciiz de 128
    txt="x : "+posx+" y : "+posy
    sendmessage(hwndwb , wm_user+1 , 1 , &txt)
FIN


La procédure affheure pour afficher l'heure dans la 3ème partie et l'état des touches Num et Maj dans la 4ème :
// *********************************************

Procédure affheure()

si hwndwb alors
    txt est une chaine asciiz de 64 = heureverschaine(heuresys())[[a 8]]
    sendmessage(hwndwb , wm_user+1 , 2 , &txt)

    touche est un tableau de 256 entiers courts
    si appeldll32("user32","GetKeyboardState",&touche) alors
        txt = ""  
        si touche[0x91]=1 alors txt = "Num"  
        si touche[0x15]=1 alors txt += " Maj"  
        sendmessage(hwndwb , wm_user+1 , 3 , &txt)
    fin
fin



// Pour récupérer le message d'aide des champs et l'afficher dans la nouvelle barre de status
// *******************************************************

// A l'initialisation de la fenêtre
wmsetfocus est un entier long = evenement("setfocus","*.*",0x7)

Procédure setfocus()

si fenencours()<>" alors
    fen est une chaine = _eve.nom
    si fen<>fenencours() alors
        mes est une chaine asciiz de 128 = {fen}..message
        sendmessage( hwndwb , wm_user+1 , 0 , &mes)  // hwndwb = handle barre de status
    fin
fin