Page 1 sur 1

mettre plusieurs CallBack dans un programme

Publié : sam. 24/avr./2004 19:09
par Le Soldat Inconnu
Salut,

j'ai fait une petite lib pour pouvoir mettre plusiseurs callback dans un prog.

le code de la lib est le suivant :

Code : Tout sélectionner

Declare AllCallBack(hWnd, uMsg, wParam, lParam)

ProcedureDLL UseCallBack_Init()
  NewList CallBackList.l()
  SetWindowCallback(@AllCallBack())
EndProcedure

ProcedureDLL AddCallBack(Nom_Procedure.l) ; Ajouter un CallBack
  AddElement(CallBackList())
  CallBackList() = Nom_Procedure
EndProcedure

Procedure.l AllCallBack(hWnd, uMsg, wParam, lParam)
  ReturnValue = #PB_ProcessPureBasicEvents
  ResetList(CallBackList())
  While NextElement(CallBackList())
    Retour = CallWindowProc_(CallBackList(), hWnd, uMsg, wParam, lParam)
    If Retour <> #PB_ProcessPureBasicEvents
      ReturnValue = Retour
    EndIf
  Wend
  ProcedureReturn ReturnValue
EndProcedure
et voici un exemple :

Code : Tout sélectionner

Procedure.l WinCallback(WindowID, Message, wParam, lParam)
  ReturnValue = #PB_ProcessPureBasicEvents
  If Message = #WM_SIZE
    Select wParam
      Case #SIZE_RESTORED
        MessageRequester(" info", "maximimizé", 0)
    EndSelect
  EndIf
  ProcedureReturn ReturnValue
EndProcedure

Procedure.l WinCallback2(WindowID, Message, wParam, lParam)
  ReturnValue = #PB_ProcessPureBasicEvents
  If Message = #WM_SIZE
    Select wParam
      Case #SIZE_MINIMIZED
        MessageRequester( "info", "minimizé", 0)
    EndSelect
  EndIf
  ProcedureReturn ReturnValue
EndProcedure


If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

AddCallBack(@WinCallback())
AddCallBack(@WinCallback2())

Repeat
  Event = WaitWindowEvent()
  
Until Event = #PB_EventCloseWindow
tout ceci est dispo sur mon site ;)

j'en profite pour signaler que j'ai corrigé mes lib ToolTip et ButtonImageGadgetEx qui utilisent dorénavent ce principe vu qu'elle ont besion d'un callback et que cela empêchait d'en mettre un dans le code

Publié : sam. 24/avr./2004 19:25
par nico
Très intéressant pour faire des libs :)

il manque UseCallBack_Init() dans ton exemple!

Publié : dim. 25/avr./2004 17:29
par Le Soldat Inconnu
pas besoin de le lancer ;)
il se lance tout seul quand on veut utiliser la lib, c'est beau la technologie :D vive TailBite