Seite 1 von 1

Container mit CALLBACK

Verfasst: 10.04.2019 14:20
von Velindos
Hallo Leute,
steh irgendwie am Schlauch! Der Callback läuft weder auf #DeskWindow_00 noch auf den #DeskWindow_08, jemand eine Ahnung?

Code: Alles auswählen

; -----------------------------------
; Container mit CALLBACK
; -----------------------------------
Enumeration
  #DeskWindow_00
  #DeskWindow_08
EndEnumeration

Global Reader_DesktopWeiteX = 800
Global Reader_DesktopHoeheY = 600
Global Rt_DesktopX          = 800
Global Rt_DesktopY          = 600

Procedure Rt_CallBack(WindowID, uMsg, wParam, lParam) 
  Protected Result
  Result = #PB_ProcessPureBasicEvents
  ;LINKE Maustaste
  Select uMsg
    Case #WM_LBUTTONDOWN 
      Debug "#WM_LBUTTONDOWN"
    Case #WM_MOUSEMOVE
      Debug "#WM_MOUSEMOVE"
    Case #WM_LBUTTONUP
      Debug "#WM_LBUTTONUP"
  EndSelect
  ProcedureReturn Result 
EndProcedure
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Procedure Rt_Main()
  ; ----------------------------------------
  hWnd_Hiden = #True
  ; ----------------------------------------
  hWnd = OpenWindow(#DeskWindow_00, 0, 0,Rt_DesktopX, Rt_DesktopY,"Velindos Desk Reader",#PB_Window_BorderLess|#PB_Window_Invisible)
  ; ----------------------------------------
    ContainerGadget(#DeskWindow_08, 0,0,Rt_DesktopX ,Rt_DesktopY ,#PB_Window_BorderLess| GetDesktopWindow_())  
  ; ----------------------------------------
  CloseGadgetList()
EndProcedure
Procedure Event_Container_08(EEventID)
  ; [08] R O T S T I F T
  Static Key.l
  ; ---------------------------------------
  Select EEventID
    Case #PB_Event_SizeWindow
    Case #PB_Event_MoveWindow
    Case #PB_Event_CloseWindow
    Case #PB_Event_Gadget
      ;{ GADGET
      Select EventGadget()
      EndSelect
      ;}
    Case #PB_Event_Menu
      ;{ MENU
      Select EventMenu()
      EndSelect
      ;}   
    Case #PB_Event_Timer
      ;{ TIMER
      Select EventMenu()
      EndSelect
      ;}
    Case #WM_KEYUP  
      ;{ KEY
      Key.l = EventwParam()
      Select KEY
        Case 13
        Case 27
          End
      EndSelect
      ;}
  EndSelect
EndProcedure
Procedure WindowNr_Event(EEventID)
  ; [08] R O T S T I F T
  Static Key.l
  ; ---------------------------------------
  Select EEventID
    Case #PB_Event_SizeWindow
    Case #PB_Event_MoveWindow
    Case #PB_Event_CloseWindow
    Case #PB_Event_Gadget
      ;{ GADGET
      Select EventGadget()
      EndSelect
      ;}
    Case #PB_Event_Menu
      ;{ MENU
      Select EventMenu()
      EndSelect
      ;}   
    Case #PB_Event_Timer
      ;{ TIMER
      Select EventMenu()
      EndSelect
      ;}
    Case #WM_KEYUP  
      ;{ KEY
      Key.l = EventwParam()
      Select KEY
        Case 13
        Case 27
          End
      EndSelect
      ;}
  EndSelect
EndProcedure

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- RUN
Procedure Rt_RUN()
  ;   ---------------------------------------
  Rt_Main()
  ;   ---------------------------------------
  hWnd_Hiden = #False
  HideWindow(#DeskWindow_00, hWnd_Hiden) 
  ;   ---------------------------------------
  Container_08_Hiden = #False
  HideGadget(#DeskWindow_08,Container_08_Hiden)
  ;   ---------------------------------------
SetWindowCallback(@Rt_CallBack(),WindowID(#DeskWindow_00))
  ;   ---------------------------------------
EndProcedure
Rt_RUN()
;}
;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- REPEAT
Define WindowNr ,EventID ,Key.l
; --------------------------------------
Repeat
  ; --------------------------------------
  WindowNr = EventWindow()
  EventID   = WaitWindowEvent()
  Select WindowNr
    Case #DeskWindow_00
      WindowNr_Event(EEventID)
    Case #DeskWindow_08
      Event_Container_08(EventID)
      
  EndSelect
  ; ---------------------------------------
ForEver
;}
Gruss ... Velindos

Re: Container mit CALLBACK

Verfasst: 10.04.2019 14:22
von RSBasic
Es wird bei der Funktion SetWindowCallback() keine WindowID sondern nur die Window-Nummer benötigt. Also dann stattdessen so:

Code: Alles auswählen

SetWindowCallback(@Rt_CallBack(),#DeskWindow_00)

Re: Container mit CALLBACK

Verfasst: 10.04.2019 14:28
von Velindos
Hallo RSBasic,
Danke, habe ich irgenwie nicht mehr gewusst. Callback funzt, was aber jetzt nicht mehr geht sind meine Event_Container_08().., weiss der Teufel warum? Habe ESC eingetragen aber es ruhrt sich nischts!

Gruss ... Velindos!

Re: Container mit CALLBACK

Verfasst: 10.04.2019 14:36
von Velindos
Hallo,
habe es nun so gemacht
; Case #DeskWindow_00
; WindowNr_Event(EEventID)
; Case #DeskWindow_08
; Event_Container_08(EEventID)
Case #DeskWindow_00
If #DeskWindow_08
Event_Container_08(EventID)
Else
WindowNr_Event(EventID)
EndIf
Dann Funzt, mir ist es ein Rätsel, warum nicht mit Case?

Gruss ... Velindos!

Re: Container mit CALLBACK

Verfasst: 10.04.2019 14:51
von RSBasic
Wenn ich richtig sehe, dann kannst du Fenster- und Gadget-IDs nicht miteinander mischen:
ContainerGadget(#DeskWindow_08, [...]
[...]
WindowNr = EventWindow()
EventID = WaitWindowEvent()
Select WindowNr
Case #DeskWindow_00
WindowNr_Event(EEventID)
Case #DeskWindow_08
Event_Container_08(EventID)

EndSelect
Mit EventWindow() kannst du nur die verschiedenen Fenster unterscheiden. Für Gadgets musst du EventGadget() benutzen. #DeskWindow_08 ist ein Gadget und kein Fenster. Deshalb klappt es mit der Abfrage nicht.

Re: Container mit CALLBACK

Verfasst: 10.04.2019 15:36
von Velindos
Hallo,
meinst du so
;-- REPEAT
Define WindowNr ,EventID ,Key.l
; --------------------------------------
Repeat
; --------------------------------------
WindowNr = EventWindow()
EventID = WaitWindowEvent()
Select WindowNr
Case #DeskWindow_00
Select EventID
Case #PB_Event_Gadget
Select EventGadget()
Case #DeskWindow_08
Event_Container_08(EventID)
EndSelect
EndSelect
; .... Weitere
Default
WindowNr_Event(EventID)
EndSelect
; ---------------------------------------
ForEver
;}
Gruss ... Velindos!

Re: Container mit CALLBACK

Verfasst: 10.04.2019 15:40
von RSBasic
Ja :allright:

Re: Container mit CALLBACK

Verfasst: 10.04.2019 15:49
von Velindos
Hallo,
Danke für deine Unterstützung!!! Habs wie folgt gelöst

Code: Alles auswählen

;- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-- REPEAT
Define WindowNr ,EventID ,Key.l
; --------------------------------------
Repeat
  ; --------------------------------------
  WindowNr = EventWindow()
  EventID = WaitWindowEvent()
  Select WindowNr
    Case #DeskWindow_00
      ; WindowNr_Event(EventID)
      Select #DeskWindow_08
        Case #DeskWindow_08
          Event_Container_08(EventID)
      EndSelect
    Default
      WindowNr_Event(EventID)
  EndSelect
  ; ---------------------------------------
ForEver
Gruss ... Velindos