29/03/2024
Windev et les Api Windows
Nb 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