Page 2 sur 3

Publié : ven. 06/janv./2006 19:15
par Dr. Dri
Chris a écrit :Lance ton code, et bouge la fenêtre pendant quelques secondes!
J'ai pas compris ce que je devais voir d'anormal :-?
Crystal Noir a écrit :disons que j'arrive plus ou moins à piger mais je trouve nulle part le #VM_Timer dans la doc.
Télécharge win32.hlp et met le dans le répertoire HELP de purebasic
en faisant F1 sur les fonctions de l'api tu auras la description ^^
ca a tout changé pour moi quand je l'ai découvert :D
(y'a pas tres longtemps lol...)

Dri

Publié : ven. 06/janv./2006 19:21
par Chris
Dr. Dri a écrit :
Chris a écrit :Lance ton code, et bouge la fenêtre pendant quelques secondes!
J'ai pas compris ce que je devais voir d'anormal :-?
Dri
L'affichage de l'heure n'est pas rafraîchi tant que tu bouges la fenêtre.
Il reste bloqué, et il se remet en route quand tu la lâches

Publié : ven. 06/janv./2006 19:22
par Dr. Dri
J'ai la même chose avec ton code :-?

Dri

Publié : ven. 06/janv./2006 19:33
par Droopy
Moi je ne gère pas ça avec une CallBack, ni dans la boucle d'évènements

Code : Tout sélectionner

Procedure maj()
  SetGadgetText(10, "Il est :" + FormatDate("%hh : %ii : %ss", Date())) 
EndProcedure 

OpenWindow(0,0,0,322,220,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PanelGadget")
CreateGadgetList(WindowID(0)) 
PanelGadget     (0,8,8,306,203) 
AddGadgetItem (0,-1,"Panel 1") 
PanelGadget (1,5,5,290,166) 
AddGadgetItem(1,-1,"Sub-Panel 1") 
TextGadget(10, 20, 10, 270, 20, "Il est :" + FormatDate("%hh : %ii : %ss", Date())) 
AddGadgetItem(1,-1,"Sub-Panel 2") 
AddGadgetItem(1,-1,"Sub-Panel 3") 
CloseGadgetList() 
AddGadgetItem (0,-1,"Panel 2") 
ButtonGadget(2, 10, 15, 80, 24,"Button 1") 
ButtonGadget(3, 95, 15, 80, 24,"Button 2") 
CloseGadgetList() 

SetTimer_(WindowID(),1,1000,@maj())

Repeat 
Until WaitWindowEvent()=#PB_Event_CloseWindow 

Publié : ven. 06/janv./2006 19:37
par Chris
Dr. Dri a écrit :J'ai la même chose avec ton code :-?

Dri
Pas moi! 8O

Publié : ven. 06/janv./2006 19:48
par Dr. Dri
peut etre que c'est parce que je suis sous ce bon vieux 98 lol

Dri

Publié : ven. 06/janv./2006 21:21
par Crystal Noir
oui alors je comprend mieux, cependant pour la fonction des coord de la souris je ne peux pas utiliser cette fonction, car tout simplement dans l'application ca marche niquel en revanche quand je sors de la fenetre de l'applis en passant la souris sur le bureau, ca ralentit grave et ca devient plus du tout précis au niveau des coord x et y de la souris alors que sans le timer ca fait cliper la valeur mais c niquel dehors et dans l'application....j'ai essayé de réduire 100 à 10 mais ca donne rien au niveau du timer.

donc avec timer c niquel pour l'horloge, en revanche pour gérer la position temps reel de la souris dans l'app c niquel en dehors ca ramos :( donc pour les coord x et y je l'ai laissé comme avant, ca fait cliper la ligne mais bon...à moins qu'il faille faire autre chose.

Publié : ven. 06/janv./2006 23:04
par Dr. Dri
Y'a pas un évennement "mouse move" que tu pourrais intercepter pour mettre à jour ces valeurs ?
faut chercher ou demander aux pros de windows (nico, Denis etc ^^)

Dri

Publié : ven. 06/janv./2006 23:14
par Crystal Noir
c'est vrai je n'y ai pas pensé moi j'utilise l'api windows mais cela dit c pas grave car avec vos astuces c'est tout à fait impécable meme si les coord ne sont pas comme je voudrais ca suffit et ca ne gène pas à l'utilisation après avoir fait testé à des potes :) niquel :)

Merci à tous car comme on me l'a fait remarqué de toute facon quand on veut avoir des coord souris on arrête de la bouger à l'endroit où ca nous interesse ^^

Publié : ven. 06/janv./2006 23:14
par Chris
Essaye ça!

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Btn_Quit
EndEnumeration

If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
  If CreateGadgetList(WindowID(#Window_0))
    TextGadget(10, 10, 10, 280, 20, "")
    ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
  EndIf
  
  Repeat
    event = WindowEvent()
    If event
      Select event
        Case #PB_EventGadget
          Select EventGadgetID()
            
            Case #Btn_Quit : quit = 1
          EndSelect
          
        Case #PB_EventCloseWindow : quit = 1
      EndSelect
    Else
      GetCursorPos_(CurPos.POINT) ; Position du curseur
      SetGadgetText(10, Str(CurPos\x)+ ":"+Str(CurPos\y))
      Delay(1)
    EndIf
  Until quit = 1
  End
EndIf

Publié : ven. 06/janv./2006 23:37
par Chris
Sinon, tu peux aussi récupérer les coordonnées dans la callback du timer. (premier code que je t'ai donné).
Il faut juste ajouter un timer (parce que celui à 1 seconde, c'est trop long) que tu mets à 1 ms, et ça fonctionne.

Code : Tout sélectionner

Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l) 
  Select uMsg 
    Case #WM_TIMER 
      Select idEvent 
        Case 1 ; Timer n° 1
          SetGadgetText(10, FormatDate("%hh : %ii : %ss", Date())) 
          
        Case 2 ; Timer n° 2
          GetCursorPos_(CurPos.POINT) ; Position du curseur 
          SetGadgetText(11, Str(CurPos\x)+ ":"+Str(CurPos\y)) 
          
      EndSelect 
  EndSelect 
EndProcedure 

If OpenWindow(0,0,0,322,220,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PanelGadget") And CreateGadgetList(WindowID(0)) 
  PanelGadget     (0,8,8,306,203) 
  AddGadgetItem (0,-1,"Panel 1") 
  PanelGadget (1,5,5,290,166) 
  AddGadgetItem(1,-1,"Sub-Panel 1") 
  TextGadget(10, 20, 10, 270, 20, "Il est ")
  TextGadget(11, 20, 40, 270, 20, "")
  AddGadgetItem(1,-1,"Sub-Panel 2") 
  AddGadgetItem(1,-1,"Sub-Panel 3") 
  CloseGadgetList() 
  AddGadgetItem (0,-1,"Panel 2") 
  ButtonGadget(2, 10, 15, 80, 24,"Button 1") 
  ButtonGadget(3, 95, 15, 80, 24,"Button 2") 
  CloseGadgetList() 
  
  SetTimer_(WindowID(), 1, 1000, @TimerProc()) ; Timer n° 1 pour les secondes
  SetTimer_(WindowID(), 2, 1, @TimerProc())    ; Timer n° 2 pour les coordonnées
  
  Repeat 
    
  Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf 
End
Bon, ça fait un peu gadget, mais tant que ça marche correctement!

Publié : sam. 07/janv./2006 0:51
par nico
Je ne trouve pas que ça fasse gadget Chris, ton code fonctionne à merveille!

Avec deux variables en plus pour mémoriser les coordonnées et éviter un ré-affichage inutile, c'est encore mieux.

Le deuxième timer est à 20 au lieu de 1ms parce que l'oeil humain n'est pas si performant. :)

Code : Tout sélectionner

Procedure TimerProc(hwnd.l, umsg.l, idevent.l, dwtime.l) 
     Static mem_x,mem_y
     Select umsg 
          Case #WM_TIMER 
               Select idevent 
                    Case 1 ; Timer n° 1 
                         SetGadgetText(10, FormatDate("%hh : %ii : %ss", Date())) 
                         
                    Case 2 ; Timer n° 2 
                         GetCursorPos_(CurPos.POINT) ; Position du curseur
                         If mem_x<>CurPos\x And mem_y<>CurPos\y
                              SetGadgetText(11, Str(CurPos\x)+ ":"+Str(CurPos\y)) 
                         EndIf 
                         mem_x=CurPos\x:mem_y=CurPos\y
               EndSelect 
     EndSelect 
EndProcedure 

If OpenWindow(0,0,0,322,220,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"PanelGadget") And CreateGadgetList(WindowID(0)) 
     PanelGadget     (0,8,8,306,203) 
     AddGadgetItem (0,-1,"Panel 1") 
     PanelGadget (1,5,5,290,166) 
     AddGadgetItem(1,-1,"Sub-Panel 1") 
     TextGadget(10, 20, 10, 270, 20, "Il est ") 
     TextGadget(11, 20, 40, 270, 20, "") 
     AddGadgetItem(1,-1,"Sub-Panel 2") 
     AddGadgetItem(1,-1,"Sub-Panel 3") 
     CloseGadgetList() 
     AddGadgetItem (0,-1,"Panel 2") 
     ButtonGadget(2, 10, 15, 80, 24,"Button 1") 
     ButtonGadget(3, 95, 15, 80, 24,"Button 2") 
     CloseGadgetList() 
     
     SetTimer_(WindowID(), 1, 1000, @TimerProc()) ; Timer n° 1 pour les secondes 
     SetTimer_(WindowID(), 2, 20, @TimerProc())    ; Timer n° 2 pour les coordonnées 
     
     Repeat 
          
     Until WaitWindowEvent()=#PB_Event_CloseWindow 
EndIf 
End

Publié : sam. 07/janv./2006 1:17
par Chris
nico a écrit :Le deuxième timer est à 20 au lieu de 1ms parce que l'oeil humain n'est pas si performant. :)
Moi, j'ai un oeil bionique :lol:

C'est bon, avec les variables. Par contre, il vaut mieux mettre OR à la place de AND parce que avec AND, si par exemple tu descend ton pointeur de souris en restant dans la même colonne de pixels, (peu probable, mais bon...), tes coordonnées X et Y ne seront pas mises à jour.
(Et idem si tu restes sur une même ligne de pixels, évidemment)

Publié : sam. 07/janv./2006 12:46
par Crystal Noir
merci à tous :) ca permet d'améliorer mon soft ;)

le soft avance bien il y a pour le moment :

- onglet système qui récupère différentes infos
- onglet mémoire pour savoir où on en est ^^
- onglet batterie pour ceux qui ont des portables
- onglet affichage pour savoir le paramétrage et le changer facilement au besoin
- onglet processus pour tuer un process rapidement

Je prévois pas mal de petit raccourcis supplémentaires comme ca, pour accéder rapidement ou faire les choses rapidement. Le logiciel se loge dans la barre de tâche.

Le soft se met à jour automatiquement par internet au lancement à votre demande :)

vala :)

Au fait une question : il n'est pas possible d'utiliser le bouton windows par défaut " - " pour minimiser dans la barre de tâche ? car on peut tester si on ferme la fenetre avec la croix mais j'ai jamais trouvé pour tester si c'est "minimize" qui est cliqué. Du coup j'ai été obligé de créer mes propres boutons minimiser et fermer.....

merci d'avance.

Publié : sam. 07/janv./2006 13:37
par AWEAR
Il faut pour cela utiliser une callback :

Code : Tout sélectionner

Procedure minimize(WindowID, Message, wParam, lParam)
  If Message = 274 And wparam = 61472
; ton code ici
  ProcedureReturn #PB_ProcessPureBasicEvents ; si tu veux uniquement savoir quand l'évenement a lieu
 ; procedurreturn 0 a la place si tu veux intecepter l'évenement
  EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

setwindowcallback(@minimize())