2 Fenster gleichzeitig via CreateThread()

Anfängerfragen zum Programmieren mit PureBasic.
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

2 Fenster gleichzeitig via CreateThread()

Beitrag von Moxl »

Hallo zusammen,

wie kann ich 2 Fenster gleichzeitig in einem Code erstellen und steuern?

ich hab das mal mit CreateThread() ausprobiert aber sobald ich das 2. Fenster vom 1. Fenster aus starte, kann ich zwar im 2. Fenster die Gadgets benutzen usw aber im 1. Fenster geht dann gar nichts mehr... :praise:

Hab für beide fenster jeweils eine Repeat schleife benutzt.

Vielleicht könntet ihr mir ja einen kleinen Code zusammen basteln damit ich es verstehe :bounce:


Danke schonmal im Vorraus :allright:

__________________________________________________
Thread verschoben
Allgemein>Anfänger
26.10.2012
RSBasic
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von RSBasic »

Sowas?

Code: Alles auswählen

EnableExplicit

Define EventID

Procedure Window1_Info()
  If OpenWindow(1, 650, 100, 400, 300, "Window 2", #PB_Window_SystemMenu)
    ButtonGadget(2, 10, 10, 100, 20, "Button 2", 0)
    
  EndIf
  
EndProcedure

If OpenWindow(0, 100, 100, 500, 400, "Window 1", #PB_Window_SystemMenu)
  ButtonGadget(1, 10, 10, 100, 20, "Button 1", 0)
  
  Window1_Info()
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Debug "Button 1"
        Case 2
          Debug "Button 2"
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von ts-soft »

Du solltest beide Fenster ohne Threads erstellen und in einem Event-Loop (unterscheiden mit EventWindow()) abarbeiten!
Alles andere wird offiziell nicht unterstützt und funktioniert nur unter Windows.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von Moxl »

RSBasic:
Ja genau sowas :) aber wenn ich bei dem code jetzt button 2 drücke kommt leider nichts :oops:

ts-soft:
hm so klappts natürlich auch und ist viel einfacher :)
danke dir :mrgreen:

jetzt hab ich nur ein problem,
wenn ich jetzt beide fenster offen habe und dann nochmal den button drücke zum öffnen des 2. fenster dann schließt sich das 2. fenster und es wird ein neues 2. fenster aufgemacht :?
also das ein neues fenster aufgemacht wird hab ich ja erwartet aber warum schließt sich das alte 2. fenster?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von RSBasic »

@Moxl
Hast du zufällig, nachdem du auf den ersten Button gedrückt hast, das Debug-Fenster geschlossen?
Lass dieses Debug-Fenster einfach offen und drücke anschließend auf den zweiten Button.

Wie ts-soft bereits schrieb, musst du beim Event "#PB_Event_CloseWindow" mit EventWindow() arbeiten, damit du darauf reagieren kannst.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von Moxl »

jo stimmt dann gehts, aber nur doof das wenn man einmal das debug fenster geschlossen hat, es nichtmehr auf geht :cry:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von RSBasic »

Hier noch ein Beispielcode für EventWindow():

Code: Alles auswählen

EnableExplicit

Define EventID
Define EventWindowID

Procedure Window1_Info()
  If OpenWindow(1, 650, 100, 400, 300, "Window 2", #PB_Window_SystemMenu)
    ButtonGadget(2, 10, 10, 100, 20, "Button 2", 0)
   
  EndIf
 
EndProcedure

If OpenWindow(0, 100, 100, 500, 400, "Window 1", #PB_Window_SystemMenu)
  ButtonGadget(1, 10, 10, 100, 20, "Button 1", 0)
 
  Window1_Info()
 
  Repeat
    EventID = WaitWindowEvent()
    EventWindowID = EventWindow()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Debug "Button 1"
        Case 2
          Debug "Button 2"
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      If EventWindowID = 0
        End
      Else
        CloseWindow(EventWindowID)
      EndIf
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Moxl
Beiträge: 150
Registriert: 26.10.2012 13:19

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von Moxl »

bräuchte noch ne antwort auf meine frage:

jetzt hab ich nur ein problem,
wenn ich jetzt beide fenster offen habe und dann nochmal den button drücke zum öffnen des 2. fenster dann schließt sich das 2. fenster und es wird ein neues 2. fenster aufgemacht :?
also das ein neues fenster aufgemacht wird hab ich ja erwartet aber warum schließt sich das alte 2. fenster?

:mrgreen:
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von RSBasic »

Weil das zweite Fenster mit der Nummer "1" bereits existiert und ersetzt wird. Ist genauso, wenn du versuchst, zwei Buttons mit derselben Nummer zu erstellen. Zum Schluss siehst du nur den zweiten zuletzt erstellten Button.
Wenn du beliebige Fenster erstellen möchtest, kannst du #PB_Any statt einer statischen Fensternummer nutzen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: 2 Fenster gleichzeitig via CreateThread()

Beitrag von HeX0R »

Moxl hat geschrieben:jo stimmt dann gehts, aber nur doof das wenn man einmal das debug fenster geschlossen hat, es nichtmehr auf geht :cry:
Das kannst du wieder öffnen, das wird nicht wirklich geschlossen, nur versteckt.

Bild
Antworten