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

(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!

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
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())