Position de la barre des taches

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Position de la barre des taches

Message par Le Soldat Inconnu »

Je me suis creusé la tête sur le problème de faire une fenêtre qui apparait près de l'horloge, comme beacoup de programme le fond.

Le problème étant de trouvé ou est placé la barre des ta^che sur l'écran pour savoir ou placé la fenêtre exactement.

Donc c'est que fait de bout de code

La procedure GetTaskBarPostion() renvoi la position de la barre des taches sur l'écran (en haut, a droite, a gauche, en bas), et la zone qu'elle occupe sur l'écran

Avec cela, la procedure NotificationWindow() deplace une fenêtre au bon endroit sur l'écran pour en faire une fenêtre de notification a coté de l'horloge.

Ce qui est fort pratique pour afficher des infos pour un programme qui se trouve dans le systemtray


Allez, finis le blabla, le code :)

Code : Tout sélectionner

Procedure GetTaskBarPosition(*TaskBarRect.RECT = 0)
  Protected TaskBarArea.RECT, TaskBar_Hwnd.l, Find_Hwnd.l, Find_Class.s, ScreenH.l, TaskBarPosition.l
  
  #TaskBar_Down = 0
  #TaskBar_Up = 1
  #TaskBar_Left = 2
  #TaskBar_Right = 3
  
  TaskBarPosition = -1
  
  ; On recherche la barre des taches
  TaskBar_Hwnd = 0
  Find_Hwnd.l = FindWindow_(0, 0)
  While Find_Hwnd <> 0 And TaskBar_Hwnd = 0
    Find_Class.s = Space(255)
    GetClassName_(Find_Hwnd, @Find_Class, 256)
    If Find_Class = "Shell_TrayWnd"
      TaskBar_Hwnd = Find_Hwnd
    EndIf
    Find_Hwnd = GetWindow_(Find_Hwnd, #GW_HWNDNEXT)
  Wend
  
  If TaskBar_Hwnd
    
    ; Taille de la barre des taches
    GetWindowRect_(TaskBar_Hwnd, @TaskBarArea)
    
    ; Taille de l'écran
    If ExamineDesktops()
      ScreenH = DesktopHeight(0)
      
      If 0 >= TaskBarArea\left And 0 <= TaskBarArea\right ; Si la barre touche la gauche de l'écran
        If 0 >= TaskBarArea\top And 0 <= TaskBarArea\bottom And ScreenH >= TaskBarArea\top And ScreenH <= TaskBarArea\bottom ; Barre verticale à gauche, on touche le bord haut et bas de l'écran
          TaskBarPosition = #TaskBar_Left
        ElseIf 0 >= TaskBarArea\top And 0 <= TaskBarArea\bottom ; On touche le bord haut de l'écran
          TaskBarPosition = #TaskBar_Up
        Else ; Sinon, on touche uniquement le bord bas
          TaskBarPosition = #TaskBar_Down
        EndIf
        
      Else ; Barre verticale à droite
        TaskBarPosition = #TaskBar_Right
      EndIf
      
    EndIf
    
    If *TaskBarRect <>0
      CopyMemory(@TaskBarArea, *TaskBarRect, SizeOf(RECT))
    EndIf
  EndIf
  
  ProcedureReturn TaskBarPosition
EndProcedure

Procedure NotificationWindow(Window, Space = 0)
  Protected TaskBarArea.RECT, TaskBarPosition.l, ScreenH.l, ScreenW.l
  
  TaskBarPosition = GetTaskBarPosition(@TaskBarArea)
  
  ; Juste pour voir le retour de la fonction
  CompilerIf #PB_Compiler_Debugger
    Select TaskBarPosition
      Case #TaskBar_Down
        Debug "Barre des taches en bas"
      Case #TaskBar_Up
        Debug "Barre des taches en haut"
      Case #TaskBar_Left
        Debug "Barre des taches à gauche"
      Case #TaskBar_Right
        Debug "Barre des taches à droite"
      Default
        Debug "Erreur"
    EndSelect
    Debug "Position de la barre des taches"
    Debug TaskBarArea\left
    Debug TaskBarArea\right
    Debug TaskBarArea\top
    Debug TaskBarArea\bottom
    Debug ""
  CompilerEndIf
  
  ; Taille de l'écran
  If ExamineDesktops()
    ScreenH = DesktopHeight(0)
    ScreenW = DesktopWidth(0) 
  EndIf
  
  ; On déplace la fenêtre pour la mettre proche de la zone de notification
  Select TaskBarPosition
    Case #TaskBar_Down
      ResizeWindow(Window, ScreenW - Space - WindowWidth(Window), TaskBarArea\top - Space - WindowHeight(Window), #PB_Ignore, #PB_Ignore)
    Case #TaskBar_Up
      ResizeWindow(Window, ScreenW - Space - WindowWidth(Window), TaskBarArea\bottom + Space, #PB_Ignore, #PB_Ignore)
    Case #TaskBar_Left
      ResizeWindow(Window, TaskBarArea\right + Space, ScreenH - Space - WindowHeight(Window), #PB_Ignore, #PB_Ignore)
    Case #TaskBar_Right
      ResizeWindow(Window, TaskBarArea\left - Space - WindowWidth(Window), ScreenH - Space - WindowHeight(Window), #PB_Ignore, #PB_Ignore)
  EndSelect
  
EndProcedure

; Création de la fenêtre et de la GadgetList
If OpenWindow(0, 0, 0, 150, 150, "Test", #PB_Window_BorderLess) = 0
  End
EndIf

NotificationWindow(0, 10)

; une petite image sur la fenêtre pour faire jolie
CreateImage(0, WindowWidth(0), WindowHeight(0))
StartDrawing(ImageOutput(0))
  Box(1, 1, WindowWidth(0) - 2, WindowHeight(0) - 2, $FFFFFF)
StopDrawing()
ImageGadget(0, 0, 0, WindowWidth(0), WindowHeight(0), ImageID(0))

Repeat
  Event = WaitWindowEvent()
  
  Select Event
    Case #PB_Event_Menu
      Select EventMenu() ; Menus
          
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget() ; Gadgets
        Case 0
          Select EventType()
            Case #PB_EventType_LeftClick
              Event = #PB_Event_CloseWindow ; On ferme
          EndSelect
      EndSelect
  EndSelect
  
Until Event = #PB_Event_CloseWindow

End

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Merci mon général, ça peut être utile :wink:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

quelqu'un peut me dire si ca marche sous Vista ?
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

ça fonctionne nikel sous Seven beta donc ça doit le faire sous vista. :wink:
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Sous Vista home edition premium 32 bits
Barre des taches en bas
Position de la barre des taches
0
1280
994
1024
Image
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Super

merci
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Barre des taches en bas
Position de la barre des taches
-2
1154
811
866
Sous W2000, comme doit plus y'avoir grand monde qui l'utilise....mais bon ça peut toujours etre utilse
Répondre