Gadgettext Clignotant ???

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Gadgettext Clignotant ???

Message 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 :)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message 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....)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Merci, Chris...:)

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

La vache, comment ca a pu m'echapper ca ??? :roll:
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

avec un timer sinon c'est pas plus simple ?
ca permet de garder le waitwindowevent()

Dri
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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... :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

..........................
Dernière modification par Backup le sam. 19/mars/2011 19:17, modifié 1 fois.
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message par Coolman »

Merci, ca peut toujours servir :)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message 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 ;)
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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...
Répondre