Container mit CALLBACK

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Container mit CALLBACK

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Container mit CALLBACK

Beitrag 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)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Container mit CALLBACK

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Container mit CALLBACK

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Container mit CALLBACK

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Container mit CALLBACK

Beitrag 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!
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Container mit CALLBACK

Beitrag von RSBasic »

Ja :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Velindos
Beiträge: 598
Registriert: 15.11.2010 10:56

Re: Container mit CALLBACK

Beitrag 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
Windows 7/8/8.1/10 (32/64-Bit) |Ubuntu 10.4 (64-Bit) |Purebasic 5.71 LTS (32/64-Bit)
Antworten