Page 1 sur 1

Gadgettext Clignotant ???

Publié : sam. 24/déc./2005 13:17
par Coolman
Est ce quelqu'un a deja fait un code pour faire clignoter un gadgettext pendant une duree determiné et tout ca en multithread sans gener les autres taches dans une boucle ???

je crois avoir vu une fonction dans les apis de windows qui permet faire clignoter un nom de fenetre dans la barre de tache, je n'ai pas trouvé d'equivalent pour un gadgettext mais je continue de chercher :)

Publié : dim. 25/déc./2005 17:43
par Coolman
J'ai fait un petit essai base sur un code trouvé dans codearchive je crois, ca devrait clignoter tout le temps mais dans les faits, ca ne le fait que si je bouge la souris dans la fenetre, on dirait que l'affichage n'est raffraichi que dans cette condition, bizarre...

note : test effectué sous win 98 se

Voici le code :

Code : Tout sélectionner

; English forum: http://purebasic.myforums.net/viewtopic.php?t=9199&highlight=
; Author: Danilo
; Date: 17. January 2004
;
; Modifié Par Coolman Le 25 Dec 2005

Global TextGadgetBackground, TextGadgetForeground 
Color= GetSysColor_(#COLOR_3DFACE) ; get color of the background 
TextGadgetBackground = CreateSolidBrush_(Color) 
TextGadgetForeground = $0000FF 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  If Msg = #WM_CTLCOLORSTATIC And lParam = GadgetID(0) 
    SetBkMode_(wParam,#TRANSPARENT) 
    SetTextColor_(wParam,TextGadgetForeground) 
    ProcedureReturn TextGadgetBackground 
  Else 
    ProcedureReturn #PB_ProcessPureBasicEvents 
  EndIf 
EndProcedure 

Mess$="Texte Coloré Clignotant" 
OpenWindow(0,0,0,350,40,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,Mess$) 
SetWindowCallback(@WinProc())
CreateGadgetList(WindowID()) 
TextGadget(0,10,10,190,20,Mess$) 
Compt=0 : Stime=ElapsedMilliseconds()
Repeat
  If ElapsedMilliseconds()>Stime+1000  ;Temporise declenchement  1 seconde
    Compt=Compt+1
    If Compt=1
      TextGadgetForeground = $0000FF       
    Else
      TextGadgetForeground = $996600      
      Compt=0
    EndIf     
    SetGadgetText(0, Mess$) 
    Stime=ElapsedMilliseconds()
  EndIf  
  Delay(1)
Until WaitWindowEvent()=#PB_EventCloseWindow 

DeleteObject_(TextGadgetBackground) 
DeleteObject_(TextGadgetForeground)
End

Publié : dim. 25/déc./2005 17:52
par Chris
Coolman a écrit :J'ai fait un petit essai base sur un code trouvé dans codearchive je crois, ca devrait clignoter tout le temps mais dans les faits, ca ne le fait que si je bouge la souris dans la fenetre, on dirait que l'affichage n'est raffraichi que dans cette condition, bizarre...

note : test effectué sous win 98 se

Voici le code :

Code : Tout sélectionner

; English forum: http://purebasic.myforums.net/viewtopic.php?t=9199&highlight=
; Author: Danilo
; Date: 17. January 2004
;
; Modifié Par Coolman Le 25 Dec 2005

Global TextGadgetBackground, TextGadgetForeground 
Color= GetSysColor_(#COLOR_3DFACE) ; get color of the background 
TextGadgetBackground = CreateSolidBrush_(Color) 
TextGadgetForeground = $0000FF 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  If Msg = #WM_CTLCOLORSTATIC And lParam = GadgetID(0) 
    SetBkMode_(wParam,#TRANSPARENT) 
    SetTextColor_(wParam,TextGadgetForeground) 
    ProcedureReturn TextGadgetBackground 
  Else 
    ProcedureReturn #PB_ProcessPureBasicEvents 
  EndIf 
EndProcedure 

Mess$="Texte Coloré Clignotant" 
OpenWindow(0,0,0,350,40,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,Mess$) 
SetWindowCallback(@WinProc())
CreateGadgetList(WindowID()) 
TextGadget(0,10,10,190,20,Mess$) 
Compt=0 : Stime=ElapsedMilliseconds()
Repeat
  If ElapsedMilliseconds()>Stime+1000  ;Temporise declenchement  1 seconde
    Compt=Compt+1
    If Compt=1
      TextGadgetForeground = $0000FF       
    Else
      TextGadgetForeground = $996600      
      Compt=0
    EndIf     
    SetGadgetText(0, Mess$) 
    Stime=ElapsedMilliseconds()
  EndIf  
  Delay(1)
Until WaitWindowEvent()=#PB_EventCloseWindow 

DeleteObject_(TextGadgetBackground) 
DeleteObject_(TextGadgetForeground)
End
Normal, tu utilises WaitWindowEvent() pour récupérer les évènements.

Avec WindowEvent(), ça devrait mieux fonctionner. (Mais j'ai pas essayé le code....)

Publié : dim. 25/déc./2005 17:57
par Coolman
Merci, Chris...:)

C'est bien sur ca sans meme retester...

La vache, comment ca a pu m'echapper ca ??? :roll:

Publié : dim. 25/déc./2005 18:11
par Dr. Dri
avec un timer sinon c'est pas plus simple ?
ca permet de garder le waitwindowevent()

Dri

Publié : dim. 25/déc./2005 18:21
par Coolman
Dr. Dri a écrit :avec un timer sinon c'est pas plus simple ?
ca permet de garder le waitwindowevent()

Dri
Oui, un timer, c'etait mon idee de depart, en fait je voudrais faire une fonction dedié a cette tache pour mon prog compteur de temps sur internet ou pour un autre, mais je n'ai pas beaucoup de temps en ce moment, alors pour l'instant je vais me contenter de gerer tout ca dans la boucle principal du programme... :)

Publié : dim. 25/déc./2005 18:32
par Backup
..........................

Publié : dim. 25/déc./2005 18:36
par Coolman
Merci, ca peut toujours servir :)

Publié : mar. 27/déc./2005 17:14
par Coolman
Une petit modif avec fond gadgettext clignotant, bizarrement, la couleur du texte change a chaque lancement de l'exemple, j'ai trouvé l'option 'OPAQUE' dans la doc api de window pour la fonction SetBkMode, c'est exactement l'effet que je voulais...

Est ce quelqu'un a fait une procedure ou un prog pour choisir une couleur dans une boite window et transferer la valeur par exemple dans le presse papier ??? (exemple $0000FF ou RVB(x,x,x)). c'est facile avec window directement, mais se serait plus rapide avec un copier coller direct dans le code...

Code : Tout sélectionner

; English forum: http://purebasic.myforums.net/viewtopic.php?t=9199&highlight=
; Author: Danilo
; Date: 17. January 2004
;
; Modifié Par Coolman Le 27 Dec 2005

Global TextGadgetBackground 
Color= GetSysColor_(#COLOR_3DFACE) ; get color of the background 
Fondecran=CreateSolidBrush_(Color) 
TextGadgetBackground =Fondecran 

Procedure WinProc(hWnd,Msg,wParam,lParam) 
  If Msg = #WM_CTLCOLORSTATIC And lParam = GadgetID(0) 
    SetBkMode_(wParam,#OPAQUE)      
    SetTextColor_(wParam,TextGadgetBackground)
    ProcedureReturn TextGadgetBackground 
  Else 
    ProcedureReturn #PB_ProcessPureBasicEvents 
  EndIf 
EndProcedure 

Mess$=" Fond Gadgettext Clignotant  " 
OpenWindow(0,0,0,400,40,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,Mess$) 
SetWindowCallback(@WinProc())
CreateGadgetList(WindowID()) 
TextGadget(0,10,10,260,20,Mess$) 
Compt=0 : Stime=ElapsedMilliseconds()
Repeat
  If ElapsedMilliseconds()>Stime+1000  ;Temporise declenchement  1 seconde
    Compt=Compt+1
    If Compt=1
      TextGadgetBackground = $0000FF       
    Else
      TextGadgetBackground = Fondecran
      Compt=0
    EndIf     
    SetGadgetText(0, Mess$) 
    Stime=ElapsedMilliseconds()
  EndIf  
  Delay(1)
Until WindowEvent()=#PB_EventCloseWindow 

DeleteObject_(TextGadgetBackground) 
End

Publié : mar. 27/déc./2005 17:27
par Dr. Dri
Coolman a écrit :Est ce quelqu'un a fait une procedure ou un prog pour choisir une couleur dans une boite window et transferer la valeur par exemple dans le presse papier ??? (exemple $0000FF ou RVB(x,x,x)). c'est facile avec window directement, mais se serait plus rapide avec un copier coller direct dans le code...
Y'a un tool dans l'ide PB qui fait ca directement

Dri ;)

Publié : mar. 27/déc./2005 18:14
par Coolman
Dr. Dri a écrit :
Coolman a écrit :Est ce quelqu'un a fait une procedure ou un prog pour choisir une couleur dans une boite window et transferer la valeur par exemple dans le presse papier ??? (exemple $0000FF ou RVB(x,x,x)). c'est facile avec window directement, mais se serait plus rapide avec un copier coller direct dans le code...
Y'a un tool dans l'ide PB qui fait ca directement

Dri ;)
Merci :)

Effectivement, Menu / outils / palette de couleurs, desolé :oops:, je dois etre miro...