Seite 1 von 1

Thread CloseWindow

Verfasst: 02.10.2020 14:21
von marcelx
Hallo,
warum wird Windows 1 nicht geschlossen?
Gruß
MarcelX

Code: Alles auswählen

Procedure windows1(*ms)
 ;   Delay(ms)
  Debug "Close"
  CloseWindow(1)
EndProcedure  

OpenWindow(1, 0, 0, 500, 70, "windows1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateThread(@windows1(), 100000)

If OpenWindow(0, 100, 200, 195, 260, "Test", #PB_Window_SystemMenu); | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Thread CloseWindow

Verfasst: 02.10.2020 14:54
von Pelagio
Hallo marcelx,

in diesem speziellen Fall schließt Du zwar mit CloseWindow das Fenster als Arbeitsfläche aber es wird dadurch nicht vom Display verschwinden,
dass muss Du dem Programm erst noch sagen.

Code: Alles auswählen

Procedure windows1(*ms)
	Delay(*ms)
	HideWindow(1, #True)
	CloseWindow(1)
	Delay(*ms/2)
	Debug "Close"
EndProcedure 

OpenWindow(1, 0, 0, 500, 70, "windows1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateThread(@windows1(), 10000)

If OpenWindow(0, 100, 200, 195, 260, "Test", #PB_Window_SystemMenu); | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

End

Re: Thread CloseWindow

Verfasst: 02.10.2020 15:31
von mk-soft
CloseWindow aus Threads funktioniert nicht. Dieses wird NICHT entfernt.
Änderungen an Windows, Gadget, etc (GUI Objekte) aus Threads funktionieren bei Windows nicht immer
und bei Linux und macOS sind diese nicht erlaubt. (Führt zu Absturz des Programmes)

Use PostEvent ...

Zwei Möglichkeiten
- Mit Eigenenden definieren Event Konstanten
- Mit vordefinierten Event Konstanten

So funktioniert es auch mit Linux oder macOS ...
Update

Code: Alles auswählen

;-TOP
Enumeration #PB_Event_FirstCustomValue
  #MyEvent_CloseWindow_1
EndEnumeration

Procedure windows1(time)
  Delay(time)
  Debug "Close"
  ; Own Event
  ;PostEvent(#MyEvent_CloseWindow_1)
  ; Default Event
  PostEvent(#PB_Event_CloseWindow, 1,0)
EndProcedure  

OpenWindow(1, 0, 0, 500, 70, "windows1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

CreateThread(@windows1(),5000)

If OpenWindow(0, 100, 200, 195, 260, "Test", #PB_Window_SystemMenu); | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
  Repeat 
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case 0
            Break
          Case 1
            SetActiveWindow(0)
            CloseWindow(1)
        
        EndSelect

      Case #MyEvent_CloseWindow_1
        CloseWindow(1)
        
    EndSelect
  ForEver
  
EndIf
P.S.
Ich habe eine Module bereitgestellt um Windows und Gadget aus Threads zu ändern.
Siehe Signatur ThreadToGUI

Re: Thread CloseWindow

Verfasst: 02.10.2020 16:02
von marcelx
Danke für die Rückmeldungen und den Code u. Erläuterung.
CloseWindow aus Threads funktioniert nicht.
Das wusste ich nicht - habe wenig Erfahrungen mit Threads.