Seite 1 von 3

[ ERLEDIGT ] 2. Fenster gibt Fokus nicht zurück

Verfasst: 09.12.2015 02:32
von udg
Ich habe ein Hauptprogramm in dem sich ein Button befindet.
Dieser Button öffnet per klick ein zweites Fenster. In diesem Fenster sollen Infos aus eine TxT Datei angezeigt werden. Soweit so gut.

Das zweite Fenster wird in einer Prozedur erstellt inklusive "while - wend" Schleife.
mein Problem ist nun, dass ich das zweite Fenster zwar offen habe aber nicht mehr in das andere klicken kann um dort weiter zu arbeiten.

das zweite Fenster stellt einen 3d Würfel und Text dar.

Final Code, Seite 2 - Mitte

meine Prozedur zum 2. Fenster:

Code: Alles auswählen

Procedure OpenWindow_Window_1()
  OpenWindow(#Window_1, 732, 301, 540, 610, "", #PB_Window_ScreenCentered | #PB_Window_BorderLess)
  ;- HANDLE 3D SCREEN
      MP_ScreenToHandle(WindowID(#Window_1)) ; legt fest, das Window 1 ein 3D Fenster sein soll
        SetWindowColor(#Window_1,$151312)
        ;-3D QUBE
          camera=MP_CreateCamera()              ; Erstelle Kamera
          x = 350 : y = 0 : xw = 190 : yw = 340 ; Größe des 3D Effekt Screens im Fenster
          MP_Viewport(x,y,xw,yw)
          light=MP_CreateLight(1)
          Mesh1=MP_CreateCube()
          MP_PositionEntity (Mesh1,-1.6,1.5,6.8)
          MP_Wireframe(1)                    
            If CreateImage(0, 5, 5)
              MP_CreateImageColored(0,0,RGB(61, 61, 62),RGB(5, 47, 82),RGB(89, 92, 111),RGB(26, 29, 32)) ; Farbiges Wireframe
              MP_EntitySetTexture (mesh1, MP_ImageToTexture(0))
              FreeImage(0)
            EndIf
  
          While Not WindowEvent() = #PB_Event_CloseWindow ; Fenster Schliessen
            MP_AmbientSetLight (RGBA(18, 19, 21, 196)) ; Hintergrundfarbe des 3D Bereiches
         ;-erstell 3D Welt
           MP_RenderBegin()
           MP_TurnEntity (Mesh1,0.5,0.5,0.5)  ; dreh den Würfel
           MP_RenderMesh()
             MP_Render2D () 
             MP_RenderSprite ()
             MP_RenderText ()
             MP_RenderEnd()
           MP_Flip ()    
         SendMessage_(WindowID(#Window_1), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) ; Fenster mit Maus verschieben
      Wend
EndProcedure
aufgerufen wird das Ganze über meinen Button:

Code: Alles auswählen

Case #btn_show_config
    OpenWindow_Window_1() ; öffne das zweite Fenster
Kann mir bei diesem Problem jemand helfen? Die "While-Wend" Schleife lässt mich nicht mehr raus aus dem zweiten Fenster wenn es einmal offen ist. Es gibt den Fokus nicht mehr her.

Vielen Dank

Re: Zweites Fenster gibt den Fokus nicht mehr her

Verfasst: 09.12.2015 10:57
von NicTheQuick
Alle Jahre ... äh... Wochen wieder... :roll:

Solange dein Programm in der "While Not WindowEvent() = #PB_Event_CloseWindow : Wend"-Schleife steckt, wird natürlich auf nichts anderes reagiert als auf den Schließen-Button eines deiner beiden Fenster. Wenn du mit mehreren Fenstern arbeitest und alle sollen gleichzeitig nutzbar sein, dann darfst du nur eine Eventschleife nutzen und musst mit 'EventWindow()' schauen, von welchem Fenster das Event kam.

Re: Zweites Fenster gibt den Fokus nicht mehr her

Verfasst: 09.12.2015 15:03
von udg
danke dir aber wo finde ich etwas zu dem Befehl: EventWindow()

aus er Hilfe werde ich leider nicht schlau :( gibt es hierzu ein Beispiel?

Re: Zweites Fenster gibt den Fokus nicht mehr her

Verfasst: 09.12.2015 18:01
von Derren
EventWindow() gibt dir die Nummer des Fenster, in dem das Event registriert wurde.

Hier ein kleines Beispiel:

Code: Alles auswählen

OpenWindow(0, 0, 0, 300, 300, "Fenster 0", #PB_Window_SystemMenu )
Fenster_ID = OpenWindow(#PB_Any, 350, 0, 300, 300, "Fenster #PB_Any", #PB_Window_SystemMenu)

Repeat
	event = WaitWindowEvent()
	
	If event = #PB_Event_CloseWindow
		FensterNummer = EventWindow()
		MessageRequester("Fenster schließen", "Im Fenster "+Str(FensterNummer)+" wurde 'Schließen' gedrückt.")
		CloseWindow(FensterNummer)
	EndIf
	
    ;edit: Folgende Zeile korrigiert. Danke @kurzer
Until IsWindow(0)=0 And IsWindow(Fenster_ID)=0 ;Wenn beide Fenster geschlossen wurden: Programm beenden
MessageRequester("Programm wird Beendet","Beide Fenster wurden geschlossen.")
End 

Re: Zweites Fenster gibt den Fokus nicht mehr her

Verfasst: 09.12.2015 18:44
von udg
Besten Dank. :allright:

FensterNummer = EventWindow()

ich habe die ganze Zeit gesucht und überlegt was ich für den Befehl: FensterNummer eintippen muss.

woher weiss man, dass FensterNummer ein Befehl ist?
In der Hilfe steht es natürlich genau so: FensterNummer = EventWindow()

aber als nicht Pro, suche ich mir einen Wolf was ich da wohl hinschreiben muss.

Jetzt läuft es natürlich.

danke

Re: [ ERLEDIGT ] Zweites Fenster gibt den Fokus nicht mehr h

Verfasst: 09.12.2015 19:05
von Kurzer
Das Beispiel von Derren ist nicht ganz korrekt.
Du musst die Until-Zeile gegen diese austauschen:

Code: Alles auswählen

Until IsWindow(0)=0 And IsWindow(Fenster_ID)=0 ;Wenn beide Fenster geschlossen wurden: Programm beenden
Grund: Es wurden ja zwei Fenster geöffnet. Eines unter Angabe der expliziten Fensternummer (0) und eines unter Angabe der Konstante #PB_Any. Bei Letzerem wird von PureBasic selbst eine Fensternummer generiert und zurückgegeben (sog. dynamische Nummernvergabe). Diese von PureBasic vergebene Nummer muss dann auch in der Until-Abfrage geprüft werden (also "Fenster_ID" statt der "1").

Fensternummer (und auch Fenster_ID) ist also in dem Fall kein Befehl, sondern eine Variable, die die Nummer des Fensters beinhaltet. Daher muss die variable auch bei IsWindow() angegeben werden.

Re: [ ERLEDIGT ] Zweites Fenster gibt den Fokus nicht mehr h

Verfasst: 09.12.2015 19:09
von Derren
FensterNummer ist kein Befehl. Das ist ne Variable.
Und das ist eine ganz normale Variablen-Zuweisung.

EventWindow() gibt die WindowID zurück, die du bei Openwindow() einträgst. Oder die von Openwindow() zurückgegeben wird, wenn du #PB_Any verwendest.


edit: Danke, kurzer. Hab das nachträglich mit PB_Any eingebaut um auch den Fall abzudecken, aber hatte vergessen e sunten zu ändern -_-

Re: [ ERLEDIGT ] Zweites Fenster gibt den Fokus nicht mehr h

Verfasst: 09.12.2015 19:16
von Kurzer
Derren, jetzt lagen wir beide falsch. :lol:
Es muss IsWindow(Fenster_ID) heissen, nicht IsWindow(Fensternummer).

Ich habe eben auch nochmal korrigiert, weil mein Text falsch formuliert war (was Dich vermutlich zur ungeprüften Übernahme des Variablennamens "Fensternummer" verleitet hat). :wink:

Re: [ ERLEDIGT ] Zweites Fenster gibt den Fokus nicht mehr h

Verfasst: 09.12.2015 20:39
von Derren
Hab mich auf dich verlassen :evil: :mrgreen:

Re: [ ERLEDIGT ] Zweites Fenster gibt den Fokus nicht mehr h

Verfasst: 09.12.2015 21:15
von udg
Im Fenster 30604272 wurde 'Schließen' gedrückt.
PB_Any reitet ganz schön hoch :mrgreen:

Danke für die ausführliche Erklärung