-GELÖST!- Problem mit Code

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Entenfels

Betreff: -GELÖST!- Problem mit Code

BeitragFr, Okt 03, 2008 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich arbeite mich gerade in die GUI-Funktionen ein, habe jedoch plötzlich das Problem, dass der Debugger andauernd motzt.
Ich finde aber partout nicht heraus, wo der Fehler liegt.

Code: [AUSKLAPPEN]

winAnfang = CreateWindow ("Neue Karte", 700,300,300,265,17)
Name_Map_Text = CreateLabel ("Name der Karte:",10,30,150,15,winAnfang)
NameField = CreateTextField (10,45,270,20, WinAnfang)
Great_Map_Text = CreateLabel ("Größe der Karte:",10,75,150,15,winAnfang)
GreatField = CreateTextField (10,90,270,20,WinAnfang)
Gold_Map_Text = CreateLabel ("Startmenge Gold:",10,120,150,15,winAnfang)
GoldField = CreateTextField (10,135,270,20,WinAnfang)
Button_OK_winAnfang = CreateButton ("OK",100,165,60,30,winAnfang,1)
Global Gold=TextFieldText(GoldField)
Global Namemap$=TextFieldText(NameField)
Global GroesseMap=TextFieldText(GreatField)

Dim Error(2)

Repeat
   Ergebnis = WaitEvent()
   Select Ergebnis
      Case $803
         End
      Case $401
         If EventSource() = Button_OK_winAnfang Then newmap()
   End Select
Forever





;Funktionen
Function newmap()
   If GroesseMap<100 Then Error(0) = 1
   If GroesseMap>800 Then Error(1) = 1
   If Gold<0 Then Error(2) = 1
   
   Numbererror=0
   
   For a=0 To 2
      If Error(a)=1 Then Numbererror=Numbererror+1
   Next
      
   If Numbererror>0 Then
      If Error(0)=1 Then a$="Die gewählte Kartengröße ist zu klein. Bitte wähle einen Wert über 100!"
      If Error(1)=1 Then b$="Die gewählte Kartengröße ist zu groß. Bitte wähle einen Wert unter 800!"
      If Error(2)=1 Then c$="Die gewählte Startmenge an Gold ist zu niedrig. Bitte wähle einen Wert über 0!"
   
      Notify a$+Chr$(13)+b$+Chr$(13)+c$
   End If
   
   If Numbererror = 0 Then End
   
End Function


Könnt ihr mir weiterhelfen?
Wahrscheinlich bin ich nur verstockt.
Dank im Vorraus

Entenfels
Die Details sind zu 94 Prozent zutreffend, bei sechs Prozent unvermeidbarer Extrapolation.
-Artemis Fowl von Eoin Colfer
  • Zuletzt bearbeitet von Entenfels am Mi, Okt 08, 2008 18:37, insgesamt einmal bearbeitet

flona

BeitragFr, Okt 03, 2008 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Funktion newmap verwendest du die Variable a einmal als Int und einmal als String. gib der ersten Variable einfach einen anderen Namen.
Und bei CreateWindow musst du vor 17 noch den Parent des Fensters angeben, also 0 bzw. Desktop() oder so.
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit

Entenfels

Betreff: Danke!

BeitragSa, Okt 04, 2008 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!

Very Happy Very Happy Very Happy
Die Details sind zu 94 Prozent zutreffend, bei sechs Prozent unvermeidbarer Extrapolation.
-Artemis Fowl von Eoin Colfer

Entenfels

BeitragMi, Okt 08, 2008 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe jetzt ein Problem mit FreeGadget.
Code: [AUSKLAPPEN]
Global Gold
Global Namemap$
Global GroesseMap
Global asdf$=CommandLine()

If asdf$<>"Debug" Then
   winAnfang = CreateWindow ("Neue Karte", 700,300,300,235,0,17)
   Name_Map_Text = CreateLabel ("Name der Karte:",10,30,150,15,winAnfang)
   NameField = CreateTextField (10,45,270,20, WinAnfang)
   Great_Map_Text = CreateLabel ("Größe der Karte:",10,75,150,15,winAnfang)
   GreatField = CreateTextField (10,90,270,20,WinAnfang)
   Gold_Map_Text = CreateLabel ("Startmenge Gold:",10,120,150,15,winAnfang)
   GoldField = CreateTextField (10,135,270,20,WinAnfang)
   Button_OK_winAnfang = CreateButton ("OK",100,165,60,30,winAnfang,1)


   Dim Error(2)

   Repeat
      Gold=TextFieldText(GoldField)
      Namemap$=TextFieldText(NameField)
      GroesseMap=TextFieldText(GreatField)
      Ergebnis = WaitEvent()
      Select Ergebnis
         Case $803
            FreeGadget winAnfang
         Case $401
            If EventSource() = Button_OK_winAnfang Then newmap()
      End Select
   Forever
End If
If asdf$ = "Debug" Then
   Gold=300
   GroesseMap=300
   NameMap$="Debugmap"
End If



;Funktionen
Function newmap()
   
   For y = 0 To 2
      Error(y)=0
   Next
   
   If GroesseMap<100 Then Error(0) = 1
   If GroesseMap>800 Then Error(1) = 1
   If Gold<10 Then Error(2) = 1
   
   Numbererror=0
   
   For x=0 To 2
      If Error(x)=1 Then Numbererror=Numbererror+1
   Next
   
   If Numbererror>0 Then
      a$=""
      b$=""
      c$=""
      If Error(0)=1 Then a$="Die gewählte Kartengröße ist zu klein. Bitte wähle einen Wert über 100!"
      If Error(1)=1 Then b$="Die gewählte Kartengröße ist zu groß. Bitte wähle einen Wert unter 800!"
      If Error(2)=1 Then c$="Die gewählte Startmenge an Gold ist zu niedrig. Bitte wähle einen Wert über 10!"
   
      Notify a$+Chr$(13)+b$+Chr$(13)+c$
   End If
   
   If Numbererror = 0 Then FreeGadget winAnfang
   
End Function
Crying or Very sad

Bitte um Hilfe

Entenfels
Die Details sind zu 94 Prozent zutreffend, bei sechs Prozent unvermeidbarer Extrapolation.
-Artemis Fowl von Eoin Colfer
 

DjDETE

BeitragMi, Okt 08, 2008 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst winAnfang "globalisieren" also am Anfang
Code: [AUSKLAPPEN]

Global winAnfang

machen, da ansonsten in der Funktion newmap die Variable und somit das Gadget überhauptnicht existiert.
MfG DjDETE
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Entenfels

Betreff: Klappt nicht

BeitragMi, Okt 08, 2008 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, aber das funzt immer noch nich! Sad Crying or Very sad Sad
Die Details sind zu 94 Prozent zutreffend, bei sechs Prozent unvermeidbarer Extrapolation.
-Artemis Fowl von Eoin Colfer
 

DjDETE

BeitragMi, Okt 08, 2008 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir geht's, hier nochmal der Code:
Code: [AUSKLAPPEN]

Global Gold
Global Namemap$
Global GroesseMap
Global asdf$=CommandLine()
Global winAnfang

If asdf$<>"Debug" Then
   winAnfang = CreateWindow ("Neue Karte", 700,300,300,235,0,17)
   Name_Map_Text = CreateLabel ("Name der Karte:",10,30,150,15,winAnfang)
   NameField = CreateTextField (10,45,270,20, WinAnfang)
   Great_Map_Text = CreateLabel ("Größe der Karte:",10,75,150,15,winAnfang)
   GreatField = CreateTextField (10,90,270,20,WinAnfang)
   Gold_Map_Text = CreateLabel ("Startmenge Gold:",10,120,150,15,winAnfang)
   GoldField = CreateTextField (10,135,270,20,WinAnfang)
   Button_OK_winAnfang = CreateButton ("OK",100,165,60,30,winAnfang,1)


   Dim Error(2)

   Repeat
      Gold=TextFieldText(GoldField)
      Namemap$=TextFieldText(NameField)
      GroesseMap=TextFieldText(GreatField)
      Ergebnis = WaitEvent()
      Select Ergebnis
         Case $803
            FreeGadget winAnfang
         Case $401
            If EventSource() = Button_OK_winAnfang Then newmap()
      End Select
   Forever
End If
If asdf$ = "Debug" Then
   Gold=300
   GroesseMap=300
   NameMap$="Debugmap"
End If



;Funktionen
Function newmap()
   
   For y = 0 To 2
      Error(y)=0
   Next
   
   If GroesseMap<100 Then Error(0) = 1
   If GroesseMap>800 Then Error(1) = 1
   If Gold<10 Then Error(2) = 1
   
   Numbererror=0
   
   For x=0 To 2
      If Error(x)=1 Then Numbererror=Numbererror+1
   Next
   
   If Numbererror>0 Then
      a$=""
      b$=""
      c$=""
      If Error(0)=1 Then a$="Die gewählte Kartengröße ist zu klein. Bitte wähle einen Wert über 100!"
      If Error(1)=1 Then b$="Die gewählte Kartengröße ist zu groß. Bitte wähle einen Wert unter 800!"
      If Error(2)=1 Then c$="Die gewählte Startmenge an Gold ist zu niedrig. Bitte wähle einen Wert über 10!"
   
      Notify a$+Chr$(13)+b$+Chr$(13)+c$
   End If
   
   If Numbererror = 0 FreeGadget winAnfang
   
End Function

Falls du die Fehlermeldung meinst, die danach kommt, das liegt daran, dass die Funktion newmap() beendet wurde, und das Programm zu dem Punkt zurückspringt, an dem sie aufgerufen wurde.
MfG DjDETE
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Entenfels

BeitragMi, Okt 08, 2008 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meine "Invalid TextField Gadget handle". Wie kann ich das vermeiden???

Bin grade vollkommen ratlos, tut mir leid. Embarassed

Entenfels
Embarassed Embarassed Embarassed
Die Details sind zu 94 Prozent zutreffend, bei sechs Prozent unvermeidbarer Extrapolation.
-Artemis Fowl von Eoin Colfer

flona

BeitragMi, Okt 08, 2008 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst, wenn du das Fenster vernichtest auch das Programm mit End beenden.(Auch in newmap). Oder du setzt eine Globale Variable auf 1 und machst nicht Repeat .. Forever sondern Repeat ... Until Var=1. Ansonsten wird deine Schleife erneut durchlaufen und wenn du am Anfang der Schleife TextFieldText aufrufst, existiert das Gadget bereits nichtmehr.
www.Dreier-Florian.kilu.de
Intel Core 2 Quad Q9400 | Zotac 9800GT | 4GB RAM | 1TB HDD | Windows 7 Professional 32bit
 

DjDETE

BeitragMi, Okt 08, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Deine Funktion "newmap" ist ja zuende, nachdem du überprüft hast, ob es Fehler gab. Wenn es keine Fehler gab, wird das Gadget "winAnfang" und alle, die damit verbunden sind, gelöscht. Da die Funktion zu Ende ist, springt das Programm wieder zu dem Punkt zurück, bei dem du die Funktion aufgerufen hast (Also in die Repeat-Schleife). Dort will dein Programm wieder auf die gelöschte Gadgets zugreifen, was nicht geht, da sie ja gelöscht sind. Das führt dann zur Fehlermeldung. Wenn du z.B. nach Freegadget noch : End hinzufügen würdest, also
Code: [AUSKLAPPEN]
If Numbererror = 0 FreeGadget winAnfang  : End

würde es zu keiner Fehlermeldung kommen. Ich hoffe ich konnte es dir jetzt erklären,
mfG DjDETE

Edit: Anstelle von End solltest du dann natürlich die nächste Funktion setzen (also z.B. spiel() ).
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Entenfels

Betreff: Danke!

BeitragMi, Okt 08, 2008 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
So müsste es klappen!!!
Very Happy Very Happy Very Happy
Vielen, vielen Dank!

Entenfels
Die Details sind zu 94 Prozent zutreffend, bei sechs Prozent unvermeidbarer Extrapolation.
-Artemis Fowl von Eoin Colfer
 

DjDETE

BeitragMi, Okt 08, 2008 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
np Wink
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group