MarqueeTextGadget()

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

MarqueeTextGadget()

Message par Heis Spiter »

Voici un petit gadget développé pour le plaisir. L'exemple fournit fonctionne parfaitement. Ceci dit, il a quand même quelques problèmes avec le debugger. Alors, attention, utilisez ce code avec beaucoup de délicatesse, sinon, le Thread va pas très bien le supporter. Et n'utilisez pas la fonction : ThreadMarqueeTextGadget(), hors du contexte initiale, ou si vous ne savez pas ce que vous faites ;).

Code : Tout sélectionner

Procedure ThreadMarqueeTextGadget(ID)
  GadText.s = GetGadgetText(ID)
  LenTxt.l = Len(GadText)
  GadWidth = GadgetWidth(ID)
  DisableDebugger
  Boucle :
  For k = 1 To GadWidth*0.25-LenTxt
    SetGadgetText(ID, Space(k)+GadText)
    Delay(100)
  Next k
  For k = GadWidth*0.25-LenTxt To 1 Step -1
    SetGadgetText(ID, Space(k)+GadText)
    Delay(100)
  Next k
  Goto Boucle
  EnableDebugger
EndProcedure

Procedure MarqueeTextGadget(ID, x, y, Width, Heigth, Text$)
  TextGadget(ID, x, y, Width, Heigth, Text$)
  TID = CreateThread(@ThreadMarqueeTextGadget(), ID)
  If TID = 0
    FreeGadget(ID)
  EndIf
  ProcedureReturn TID
EndProcedure

Procedure SetMarqueeTextGadgetText(ID, TID, Text$)
  KillThread(TID)
  SetGadgetText(ID, Text$)
  TID = CreateThread(@ThreadMarqueeTextGadget(), ID)
  If TID = 0
    FreeGadget(ID)
  EndIf
  ProcedureReturn TID
EndProcedure

Procedure FreeMarqueeTextGadget(ID, TID)
  KillThread(TID)
  FreeGadget(ID)
EndProcedure

If OpenWindow(0, 0, 0, 100, 100, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "test")
  If CreateGadgetList(WindowID(0))
    MGad = MarqueeTextGadget(1, 0, 0, 100, 15, "Gadget test !")
    MGad2 = MarqueeTextGadget(3, 0, 20, 100, 15, "Gadget test !")
    MGad2 = SetMarqueeTextGadgetText(3, MGad2, "Gadget test 2 !")
    ButtonGadget(2, 10, 45, 90, 20, "Free (1)")
  EndIf
  Repeat
    Event = WindowEvent()
    If Event = #PB_EventGadget
      GadgetID = EventGadgetID()
      If GadgetID = 2
        FreeMarqueeTextGadget(1, MGad)
        DisableGadget(2, 1)
      EndIf
    EndIf
  Until Event = #PB_EventCloseWindow
EndIf
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah déjà y'a une chaine dans le thread, c'est risqué... sinon l'exemple fonctionne bien ^^

Dri
Répondre