I've found the bug in the old WinBlitz3D where it doesnt response when i close the window. It works now!!!
It seems that the bug was in WaitEvent(), because i played a little around with it and now it works. Code here, and i've added a useful command PeekEvent():
It seems that the bug was in WaitEvent(), because i played a little around with it and now it works. Code here, and i've added a useful command PeekEvent():
Function WaitEvent(events=1) apiSetWindowLong runtimewindow,GWL_WNDPROC,GRAB_BankAddr(WinProcBank) ret_event=0 .again PokeInt WinProcReturn,$04,0 apiGetMessage(WinProcReturn,0,0,0) apiTranslateMessage(WinProcReturn) apiDispatchMessage(WinProcReturn) eventsource_RAW = 0 eventdata_RAW = 0 eventX_RAW = 0 eventY_RAW = 0 this_event = PeekInt(WinProcReturn,$04) Select this_event Case WM_RBUTTONUP ret_event = $202 ; If apiIsWindow(PeekInt(WinProcReturn,0)) <> 0 Then Gadget_BankDATA = apiGetWindowLong(PeekInt(WinProcReturn,0),GWL_USERDATA) If Gadget_BankDATA > 0 Then If PeekInt(Gadget_BankDATA,$00) = PeekInt(WinProcReturn,0) ;PopUpGadgetMenu(PeekInt(Gadget_BankDATA,$00)) EndIf EndIf EndIf Case WM_KILLFOCUS apiGetMessage(WinProcReturn,0,0,0) apiTranslateMessage(WinProcReturn) apiDispatchMessage(WinProcReturn) ret_event = $401 eventsource_RAW = apiGetFocus() Case WM_HSCROLL ret_event = $401 eventsource_RAW = PeekInt(WinProcReturn,$0C) eventdata_RAW = LOWORD(PeekInt(WinProcReturn,$08)) ;WM_HSCROLL_pos = 1 + apiGetScrollPos(eventsource_RAW,SB_CTL) ;eventdata_RAW = apiSetScrollPos(eventsource_RAW,SB_CTL,WM_HSCROLL_pos,True) Case WM_VSCROLL ret_event = $401 eventsource_RAW = PeekInt(WinProcReturn,$0C) eventdata_RAW = LOWORD(PeekInt(WinProcReturn,$08)) ;WM_VSCROLL_pos = 1 + apiGetScrollPos(eventsource_RAW,SB_CTL) ;eventdata_RAW = apiSetScrollPos(eventsource_RAW,SB_CTL,WM_VSCROLL_pos,True) Case WM_ACTIVATE If LOWORD(PeekInt(WinProcReturn,$08)) = WA_CLICKACTIVE Then ret_event = $804 eventsource_RAW = PeekInt(WinProcReturn,$00) EndIf Case WM_ACTIVATEAPP eventName$ = "WM_ACTIVATEAPP" Case WM_NOTIFY If a = 1 Then ; PokeByte b,0,$CC EndIf a = a + 1 nmhdr_addr = PeekInt(WinProcReturn,$0C) apiCallWindowProcF b,0,0,GRAB_BankAddr(NMHDR),nmhdr_addr ;Notify PeekInt(NMHDR,$04) Select PeekInt(NMHDR,$08) Case NM_CLICK,TCN_SELCHANGE ; tabber ret_event = $401 eventsource_RAW = PeekInt(NMHDR,$00) eventdata_RAW = apiSendMessage(eventsource_RAW,TCM_GETCURSEL,0,0) Default ; ret_event = $401 ; eventsource_RAW = PeekInt(NMHDR,$00) End Select ;Notify "here "+PeekInt(NMHDR,$00)+" "+toolbar Case WM_COMMAND ; check menu selected or gadget event eventsource_RAW = PeekInt(WinProcReturn,$0C) If eventsource_RAW = 0 Then If HIWORD(PeekInt(WinProcReturn,$08)) = 0 Then eventdata_RAW = LOWORD(PeekInt(WinProcReturn,$08)) If eventdata_RAW > 0 Then ret_event = $1001 EndIf EndIf Else ret_event = $401 EndIf ;Notify HIWORD(PeekInt(WinProcReturn,$08)) Case WM_SIZE ret_event = $802 eventsource_RAW = PeekInt(WinProcReturn,$00) EventX_RAW = LOWORD(PeekInt(WinProcReturn,$0C)) EventY_RAW = HIWORD(PeekInt(WinProcReturn,$0C)) ; reposition status bars. If apiIsWindow(eventsource_RAW) <> 0 Then GAD_ID = apiGetWindowLong(eventsource_RAW,GWL_USERDATA) If GAD_ID > 0 Then statusbar = PeekInt(GAD_ID,4) If statusbar > 0 Then ;SetGadgetShape statusbar,0,0,GadgetWidth(eventsource_RAW),GadgetHeight(statusbar) ;apiInvalidateRect statusbar,0,True ;apiSendMessage statusbar,WM_SIZE,0,0 EndIf EndIf EndIf Case WM_MOVE ret_event = $801 eventsource_RAW = PeekInt(WinProcReturn,$00) EventX_RAW = LOWORD(PeekInt(WinProcReturn,$0C)) EventY_RAW = HIWORD(PeekInt(WinProcReturn,$0C)) Case WM_CLOSE DebugLog "WM_CLOSE" Case WM_DESTROY DebugLog "WM_DESTROY" ret_event = $803 eventsource_RAW = PeekInt(WinProcReturn,$00) End Select ; cleanup events PokeInt(WinProcReturn,$00,0) PokeInt(WinProcReturn,$04,0) PokeInt(WinProcReturn,$08,0) PokeInt(WinProcReturn,$0C,0) If ret_event=0 Then Goto again apiSetWindowLong runtimewindow,GWL_WNDPROC,WinProcBlitz3D Return ret_event End Function Function PeekEvent(events=1) apiSetWindowLong runtimewindow,GWL_WNDPROC,GRAB_BankAddr(WinProcBank) ret_event=0 apiPeekMessage(WinProcReturn,0,0,0,0) apiTranslateMessage(WinProcReturn) apiDispatchMessage(WinProcReturn) eventsource_RAW = 0 eventdata_RAW = 0 eventX_RAW = 0 eventY_RAW = 0 this_event = PeekInt(WinProcReturn,$04) Select this_event Case WM_RBUTTONUP ret_event = $202 ; If apiIsWindow(PeekInt(WinProcReturn,0)) <> 0 Then Gadget_BankDATA = apiGetWindowLong(PeekInt(WinProcReturn,0),GWL_USERDATA) If Gadget_BankDATA > 0 Then If PeekInt(Gadget_BankDATA,$00) = PeekInt(WinProcReturn,0) ;PopUpGadgetMenu(PeekInt(Gadget_BankDATA,$00)) EndIf EndIf EndIf Case WM_KILLFOCUS apiGetMessage(WinProcReturn,0,0,0) apiTranslateMessage(WinProcReturn) apiDispatchMessage(WinProcReturn) ret_event = $401 eventsource_RAW = apiGetFocus() Case WM_HSCROLL ret_event = $401 eventsource_RAW = PeekInt(WinProcReturn,$0C) eventdata_RAW = LOWORD(PeekInt(WinProcReturn,$08)) ;WM_HSCROLL_pos = 1 + apiGetScrollPos(eventsource_RAW,SB_CTL) ;eventdata_RAW = apiSetScrollPos(eventsource_RAW,SB_CTL,WM_HSCROLL_pos,True) Case WM_VSCROLL ret_event = $401 eventsource_RAW = PeekInt(WinProcReturn,$0C) eventdata_RAW = LOWORD(PeekInt(WinProcReturn,$08)) ;WM_VSCROLL_pos = 1 + apiGetScrollPos(eventsource_RAW,SB_CTL) ;eventdata_RAW = apiSetScrollPos(eventsource_RAW,SB_CTL,WM_VSCROLL_pos,True) Case WM_ACTIVATE If LOWORD(PeekInt(WinProcReturn,$08)) = WA_CLICKACTIVE Then ret_event = $804 eventsource_RAW = PeekInt(WinProcReturn,$00) EndIf Case WM_ACTIVATEAPP eventName$ = "WM_ACTIVATEAPP" Case WM_NOTIFY If a = 1 Then ; PokeByte b,0,$CC EndIf a = a + 1 nmhdr_addr = PeekInt(WinProcReturn,$0C) apiCallWindowProcF b,0,0,GRAB_BankAddr(NMHDR),nmhdr_addr ;Notify PeekInt(NMHDR,$04) Select PeekInt(NMHDR,$08) Case NM_CLICK,TCN_SELCHANGE ; tabber ret_event = $401 eventsource_RAW = PeekInt(NMHDR,$00) eventdata_RAW = apiSendMessage(eventsource_RAW,TCM_GETCURSEL,0,0) Default ; ret_event = $401 ; eventsource_RAW = PeekInt(NMHDR,$00) End Select ;Notify "here "+PeekInt(NMHDR,$00)+" "+toolbar Case WM_COMMAND ; check menu selected or gadget event eventsource_RAW = PeekInt(WinProcReturn,$0C) If eventsource_RAW = 0 Then If HIWORD(PeekInt(WinProcReturn,$08)) = 0 Then eventdata_RAW = LOWORD(PeekInt(WinProcReturn,$08)) If eventdata_RAW > 0 Then ret_event = $1001 EndIf EndIf Else ret_event = $401 EndIf ;Notify HIWORD(PeekInt(WinProcReturn,$08)) Case WM_SIZE ret_event = $802 eventsource_RAW = PeekInt(WinProcReturn,$00) EventX_RAW = LOWORD(PeekInt(WinProcReturn,$0C)) EventY_RAW = HIWORD(PeekInt(WinProcReturn,$0C)) ; reposition status bars. If apiIsWindow(eventsource_RAW) <> 0 Then GAD_ID = apiGetWindowLong(eventsource_RAW,GWL_USERDATA) If GAD_ID > 0 Then statusbar = PeekInt(GAD_ID,4) If statusbar > 0 Then ;SetGadgetShape statusbar,0,0,GadgetWidth(eventsource_RAW),GadgetHeight(statusbar) ;apiInvalidateRect statusbar,0,True ;apiSendMessage statusbar,WM_SIZE,0,0 EndIf EndIf EndIf Case WM_MOVE ret_event = $801 eventsource_RAW = PeekInt(WinProcReturn,$00) EventX_RAW = LOWORD(PeekInt(WinProcReturn,$0C)) EventY_RAW = HIWORD(PeekInt(WinProcReturn,$0C)) Case WM_CLOSE DebugLog "WM_CLOSE" Case WM_DESTROY DebugLog "WM_DESTROY" ret_event = $803 eventsource_RAW = PeekInt(WinProcReturn,$00) End Select ; cleanup events PokeInt(WinProcReturn,$00,0) PokeInt(WinProcReturn,$04,0) PokeInt(WinProcReturn,$08,0) PokeInt(WinProcReturn,$0C,0) ;If ret_event=0 Then Goto again -- THIS IS PEEKEVENT SO JUST CONTINUE WITHOUT ANY EVENT! apiSetWindowLong runtimewindow,GWL_WNDPROC,WinProcBlitz3D Return ret_event End Function