Thread CloseWindow

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Thread CloseWindow

Beitrag 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
Win-10, PB 5.31 (Windows - x86)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Thread CloseWindow

Beitrag 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
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Thread CloseWindow

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
marcelx
Beiträge: 429
Registriert: 19.02.2010 20:19
Wohnort: Darmstadt

Re: Thread CloseWindow

Beitrag 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.
Win-10, PB 5.31 (Windows - x86)
Antworten