Prblm: MG 2.Fenster,Button klicken,schliesen,wiederaufrufen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

SiriusMonk

Betreff: Prblm: MG 2.Fenster,Button klicken,schliesen,wiederaufrufen

BeitragMo, Feb 17, 2014 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Holla

ich möchte im MaxGui, über einen Menüeintrag (Schwierigkeitsgrad) , ein zweites Fenster öffnen , den Nutzer die Wahl zwischen (leicht,mittel,schwer) mit Hilfe von Buttons ermöglichen und dann das Fenster selber schliessen ohne das das Hauptprogramm sich schliesst oder er 'X' drücken muss. Wenn ich jetzt im Menü nochmal den "Schwierigkeitsgrad" aufrufe passiert nichts. Im EventData() wird zwar 201 (Menüeintrag) angezeigt aber ich kann nicht darauf reagieren- bzw. weiss nicht wie . Vielleicht kann mir jemand helfen ?
Danke im Vorraus / Code auf das wesentliche runtergebrochen
SiriusMonk

BlitzMax: [AUSKLAPPEN]


' Hauptschleife - Programm hat ein Menü und mehrere Tabs'

...
Repeat
WaitEvent()
Select EventID()

' Hauptfenster Handling

Case EVENT_WINDOWCLOSE
End;

' Menübehandlung

Case EVENT_MENUACTION
DoMenuAction()


' Tabbs Handling
start = MilliSecs()
map.windowclear()
ms = MilliSecs() - start

Case EVENT_MOUSEMOVE
' Map.MouseMapControl()

Case EVENT_GADGETACTION
Select EventData()
Case 0 DoCanvasSpiel()
Case 1 HideGadget Game_DCanvas
Case 2 HideGadget Game_DCanvas
Case 3 HideGadget Game_DCanvas
Case 4 HideGadget Game_DCanvas

End Select DoGadgetAction()
Case EVENT_MOUSEENTER
' HideMouse
' Map.MouseMapControl()
Case EVENT_GADGETPAINT
RedrawGadget(Game_DCanvas)
EndSelect
Until KeyDown(key_escape)
....

' Anmerkung nachfolgender Code ist ausgegliedert als Include - zwecks Übersicht und Handling des Menüs
' soll nicht in die Hauptschleife

...
Function DoMenuAction()
Select EventData()
Case MENU_EXIT
End
...
Case MENU_Schwierig MENU_Schwierig_()
...
End Select
End Function
...

Function MENU_Schwierig_()

Local FWndow:TGadget=CreateWindow("Schwierigkeitsgrad",0,0,220,145,Null,WINDOW_TITLEBAR|
WINDOW_CENTER)

Local Leicht:TGadget=CreateButton("Leicht",10,15,60,30,Fwindow,BUTTON_PUSH)
Local Mittel:TGadget=CreateButton("Mittel",10,45,60,30,Fwindow,BUTTON_PUSH)
Local Schwierig:TGadget=CreateButton("Schwer",10,75,60,30,Fwindow,BUTTON_PUSH)

Dummy:Int = 0

While Dummy=1
WaitEvent()
Print CurrentEvent.ToString()
Select EventID()
Case EVENT_WINDOWCLOSE
End
Case EVENT_GADGETACTION
Select EventSource()
Case Leicht
Print "Leicht"
Dummy=1
FreeGadget(Fwindow)
Case Mittel
Print "Mittel"
FreeGadget(Fwindow)
Case Schwierig
Print "Schwierig"
FreeGadget(Fwindow)
End Select
End Select
Wend
End Function

 

Tritium

BeitragMo, Feb 17, 2014 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich steig bei Deinem Code zwar nicht so recht durch, allerdings fällt mir folgendes auf:

- Die Einrückung ist inkonsistent bis seltsam, das würd ich mal ordentlich machen
- In MENU_Schwierig_() legts Du eine Variable Dummy an, die mit 0 initialisiert wird. Die folgende while-Schleife kann also bei keinem Funktionsaufruf ausgeführt werden (war Dummy vielleicht als Global gemeint?)
- Für Leicht setzt Du Dummy=1, was bei Mittel und Schwierig nicht passiert

Soll in Dummy der Schwierigkeitsgrad gespeichert werden? Nenn die Variable doch mal so, dass ihre Bedeutung deutlich wird Wink

Xeres

Moderator

BeitragMo, Feb 17, 2014 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte die Dummy Variable in MENU_Schwierig_() nicht genau umgekehrt definiert werden? So startet die Schleife nie.
Am besten benennst du sie eindeutig, dann kann man das direkt im Quellcode lesen; z.B. "runloop" oder "abort" - je nach dem wie du es nun formulieren willst.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Holzchopf

Meisterpacker

BeitragMo, Feb 17, 2014 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du darfst, wenn man den Schwierigkeitsgrad ausgewählt hat, das Fenster nicht mit FreeGadget freigeben (= Löschen). Benutze stattdessen HideGadget und ShowGadget um es später wieder einzublenden.

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Xeres

Moderator

BeitragMo, Feb 17, 2014 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Dürfen schon, da er es immer neu erstellt, aber es wäre schon konsistenter die GUI Elemente nur einmal an zu legen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Holzchopf

Meisterpacker

BeitragMo, Feb 17, 2014 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ja tatsächlich, das ist ja in der Funktion drin Embarassed liegt wohl an der eigenwilligen Einrückung Laughing

Ähh. Monk, kannst du bitte noch etwas genauer beschreiben, was denn passieren soll aber eben nicht passiert?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Midimaster

BeitragMo, Feb 17, 2014 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich soll es im Programm nur eine einzige Schleife geben, die EVENTs abfragt.

BlitzMax: [AUSKLAPPEN]
While WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
Select EventSource()
Case HauptWindow Then
ProgrammBeenden
Case AuswahlWindow
EnableGadget HauptWindow
HideGadget AuswahlWindow
EndSelect

Case EVENT_APPTERMINATE
ProgrammBeenden

Case EVENT_GADGETACTION
AlleEvents EventSource()
EndSelect
Wend





Function AlleEvents()
Local tmpGadget:TGadget = TGadget(EventQuelle)
If tmpGadget
Select tmpGadget
Case AuswahlOK_Button
EnableGadget HauptWindow
HideGadget AuswahlWindow
Case ....

EndSelect
EndIf
End

Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

SiriusMonk

BeitragMo, Feb 17, 2014 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich war doch nur kurz einkaufen Smile - Danke für die vielen Antworten.

Also erst mal Asche über mein Haupt bzgl. der Codeeinrückung ,Übersichtlichkeit und Variablebenennung (nicht immer ist Cut&Paste/ Quick&Dirty gut - sorry, werde mich bessern Smile ) -

Die Varianten mit Hide / ShowGadget hatte ich auch durch - ich möchte halt das komplette "Unterfenster" schliessen und es dann bei Bedarf wieder aus dem Menü heraus öffnen - der Tip mit der einer Event - Auswertungsroutine ist wahrscheinlich die Lösung. Ich wollte halt Menü- und Tabs- Auswertung getrennt machen, das funktioniert ja leider nicht . (- zwecks Wartung und Erweiterbarkeit ) - also vielen Danke nochmal an alle

Holzchopf

Meisterpacker

BeitragMo, Feb 17, 2014 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst natürlich auch alles, was Dialoge anbelangt, jeweils in eigenständige Types packen und denen dann eine Update-Funktion verpassen. In der globalen Hauptschleife rufst du dann einfach nach und nach alle Update-Funktionen auf. So kannst du doch immerhin ein wenig die Auswertung der einzelnen Elemente voneinander aufteilen.

MfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

SiriusMonk

BeitragMo, Feb 17, 2014 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist auch eine prima Idee - Vielen Dank - mal sehen, ob ich das umsetzen kann.... Smile





Holzchopf hat Folgendes geschrieben:
Du kannst natürlich auch alles, was Dialoge anbelangt, jeweils in eigenständige Types packen und denen dann eine Update-Funktion verpassen. In der globalen Hauptschleife rufst du dann einfach nach und nach alle Update-Funktionen auf. So kannst du doch immerhin ein wenig die Auswertung der einzelnen Elemente voneinander aufteilen.

MfG

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group