Code : Tout sélectionner
; By Nico
; Pure Basic, Version:3.92
; le 26/12/04
;/ Structure permettant l'affichage du texte dans la status Bar
;/ contenant les diverses informations que nous allons gérer.
Structure Status_Draw
Texte.s
couleur.l
Font.l
Emplacement.l
EndStructure
Enumeration
#Window_0
EndEnumeration
Enumeration
#Button
#StatusBar
EndEnumeration
Global Hstatus
;/ Constantes utilisées pour afficher le texte
#DT_SINGLELINE;le texte sera affiché en une seule ligne
#DT_TOP ;le texte sera aligné vers le Haut,
; la constante #DT_SINGLELINE doit être spécifiée pour l'utiliser
#DT_BOTTOM ;le texte sera aligné vers le Bas
; la constante #DT_SINGLELINE doit être spécifiée pour l'utiliser
#DT_VCENTER ;le texte sera centré verticalement
; la constante #DT_SINGLELINE doit être spécifiée pour l'utiliser
#DT_CENTER ;le texte sera centré Horizontalement
#DT_RIGHT ;le texte sera aligné vers la Droite
#DT_LEFT ;le texte sera aligné vers la Gauche
;/ Constantes utilisée pour afficher l'icône
#SB_SETICON=(#WM_USER) +15
Procedure WindowCallback(WindowID, Message, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select Message
Case #WM_DRAWITEM
If wParam = GetDlgCtrlID_(Hstatus)
*DrawItem.DRAWITEMSTRUCT = lParam
*pointeur.Status_Draw=*DrawItem\itemdata
hFontOld = SelectObject_(*DrawItem\hDC,*pointeur\Font)
SetBkMode_(*DrawItem\hDC, #TRANSPARENT)
SetTextColor_(*DrawItem\hDC, *pointeur\couleur )
DrawText_(*DrawItem\hDC, *pointeur\Texte, -1, *DrawItem\rcItem , *pointeur\Emplacement)
ProcedureReturn #True
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 100, 150, 300, 100, #PB_Window_SystemMenu | #PB_Window_SizeGadget, "De la couleur dans la Status Bar")
SetWindowCallback(@WindowCallback())
If CreateGadgetList(WindowID(0))
ButtonGadget(#Button,10,10,280,20,"Changer le nom et la couleur du champ N°0 par Louis")
EndIf
Hstatus= CreateStatusBar(#StatusBar, WindowID())
;/ Ajuster la hauteur de la Status Bar
SendMessage_(Hstatus, #SB_SETMINHEIGHT, 40, 0)
;/ Nécessaire pour le rafraichissement immédiat de la nouvelle taille
SendMessage_(Hstatus, #WM_SIZE, 0,0)
;/ Création de trois Champs, 0, 1, et 2
If Hstatus
AddStatusBarField(100)
AddStatusBarField(50)
AddStatusBarField(100)
EndIf
;/ On remplit la structure pour le champ N°0 de la Status Bar
Champ_0.Status_Draw
Champ_0\Texte="Pierre"
Champ_0\couleur=RGB(255,0,0)
Champ_0\Font=hFont=LoadFont (0, "Courier", 20)
Champ_0\Emplacement=#DT_CENTER| #DT_VCENTER| #DT_SINGLELINE
;/ On remplit la structure pour le champ N°1 de la Status Bar
Champ_1.Status_Draw
Champ_1\Texte="Paul"
Champ_1\couleur=RGB(0,168,168)
Champ_1\Font=hFont=LoadFont (1, "Courier", 8)
Champ_1\Emplacement=#DT_LEFT| #DT_BOTTOM| #DT_SINGLELINE
;/ On remplit la structure pour le champ N°2 de la Status Bar
Champ_2.Status_Draw
Champ_2\Texte="Nico"
Champ_2\couleur=RGB(0,0,255)
Champ_2\Font=hFont=LoadFont (2, "Arial", 16)
Champ_2\Emplacement=#DT_TOP|#DT_RIGHT| #DT_SINGLELINE
;/ Pointeur vers la Structure à afficher
*pointeur_champ0.Status_Draw=@Champ_0
*pointeur_champ1.Status_Draw=@Champ_1
*pointeur_champ2.Status_Draw=@Champ_2
;/ On envoie les différents pointeurs à la Status Bar
SendMessage_(Hstatus, #SB_SETTEXT, 0 | #SBT_OWNERDRAW ,*pointeur_champ0)
SendMessage_(Hstatus, #SB_SETTEXT, 1 | #SBT_OWNERDRAW ,*pointeur_champ1)
SendMessage_(Hstatus, #SB_SETTEXT, 2 | #SBT_OWNERDRAW ,*pointeur_champ2)
;/ Ajoute une icône dans le champ N°2
Hicon=LoadImage(0, "data\CdPlayer.ico")
SendMessage_( Hstatus, #SB_SETICON, 2, Hicon)
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_EventGadget
Select EventGadgetID()
Case #Button
;/ Changement du Champ N°0
Champ_0.Status_Draw
Champ_0\Texte="Louis"
Champ_0\couleur=RGB(255,255,0)
SendMessage_(Hstatus, #SB_SETTEXT, 0 | #SBT_OWNERDRAW ,*pointeur_champ0)
EndSelect
Case #WM_CLOSE
CloseFont(0)
CloseFont(1)
CloseFont(2)
Quit+1
EndSelect
Until Quit=1
EndIf
End