Probleme mit last[erledigt]

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

skey-z

Betreff: Probleme mit last[erledigt]

BeitragSo, Jan 22, 2006 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hy Leutz,

ich sitze momentan an ner kleinen eigenen GUI.

Das Problem was ich nun habe, jedes "Fenster" soll ne eigene indexnummer haben, bin dazu alle Types durchgegangen und habe eine indexvariable erhöht und mit Return zurückgegeben, diese habe ich dann für jedes neue Fenster noch einmal um eins erhöht, hat auch wunderbar funktioniert.

nun habe ich aber auch nen Close-Button wenn ich dann ein Fenster schließe (irgendeins mittendrin, nicht das letzte), bekomme ich jedoch die gleiche indexnummer, wie das zuletzt erstellte fenster, somit haben 2 Fenster die gleiche indexvariable und werden gleich behandelt.

ok, nun habe ich mir gedacht, gehe ich nicht alle Types durch, sondern greife nur auf das letzte zu

Code: [AUSKLAPPEN]

;Count_GUI_Elements___________
Function GUI_CountElements()

   Local index
   
   If (win.gui <> Null) Then
      win.gui = Last gui
         index = win\index
   EndIf
      
   Return index
End Function


Soweit so gut, aber index liefert immer "0" zurück

Die indexnummer eines neuen fensters initalisiere ich folgendermaßen
Code: [AUSKLAPPEN]

win\index = GUI_CountElements()+1


Da GUI_CountElements() aber "0" zurückliefert, bekommen alle Fenster die indexnummer "1"

kann es ein Bug sein, oder unterliege ich mal wieder einem Logikfehler???
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
  • Zuletzt bearbeitet von skey-z am So, Jan 22, 2006 18:59, insgesamt einmal bearbeitet

5k41

BeitragSo, Jan 22, 2006 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ist der type global??
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Hubsi

BeitragSo, Jan 22, 2006 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin nicht ganz sicher ob ich Dein Problem wirklich richtig verstanden habe, aber ich denke der Fehler liegt an anderer Stelle. Ich nehme an Du gehst vor dem Aufrufen dieser Funktion alle Einträge mit einer For...Each durch was den Nebeneffekt hat das der Zeiger auf keinen Eintrag mehr zeigt, also Null. Schmeiss einfach die Überprüfung auf Null raus dann ist das Problem behoben Very Happy
Eine weitere Ursache kann sein das der Zeiger nicht global ist (übergeben wird er ja nicht) und somit auch wieder ins Leere weist Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Dreamora

BeitragSo, Jan 22, 2006 18:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Obige Funktion macht so ziemlich viel, nur leider nicht zählen. Insofern kann es nichts sinnvolles ausgeben. Am einfachsten würdest du auch nicht durchzählen, sondern eine globale Variable anlegen, die du bei jedem erzeugten GUI element um 1 erhöhst und bei jedem zerstörten um 1 senkst, dass ist beträchtlich schneller.

Aber hier eine funktionierende Version deines Codes:

Code: [AUSKLAPPEN]

;Count_GUI_Elements___________
Function GUI_CountElements()

   local index = 0
   for win.gui = each gui
      index = index + 1
   next
     
   Return index
End Function
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

skey-z

BeitragSo, Jan 22, 2006 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Type ist global in der Hauptdatei und alle Types werden in functionen aufgerufen, also erster Fehlergrund trifft nicht zu

2. weder das entfernen von der überprüfung auf NULL, noch vorheriges setzen auf "First gui" führen zum Erfolg.

von meiner logik her, wäre es doch auch eigentlich egal, ob ich die Einträge vorher durchgegangen bin, weil ich doch den zeiger auf den Letzten Eintrag in der liste setze.

[edit zu Dremora]

bei meiner version soll er auch nicht durchzählen, sondern die index variable des letzten Eintrags in der Liste zurückgeben und für den neuen Eintrag um 1 erhöhen.
Das was du da geschrieben hast, hatte ich vorher auch, jedoch überschneiden sich dann variablen[/Edit]
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Hubsi

BeitragSo, Jan 22, 2006 18:45
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z hat Folgendes geschrieben:
von meiner logik her, wäre es doch auch eigentlich egal, ob ich die Einträge vorher durchgegangen bin, weil ich doch den zeiger auf den Letzten Eintrag in der liste setze.
Ist nicht egal Very Happy Wenn die For...Each komplett durchlaufen wird deutet der Zeiger ins Leere. Und wenn Du dann auf Null überprüfst und nur bei ungleich Null ein Last ausführst wird es eben erst gar nicht ausgeführt Very HappyCode: [AUSKLAPPEN]
Type test
End Type

For a=0 To 100
   t.test=New test
Next

For t.test=Each test
Next

If t.test=Null Print "t ist Null"
If t.test<>Null Print "t ist kein bisschen Null"

WaitKey()
End
Wenn allerdings das entfernen der Abfrage nichts bringt kann ich aus dem geposteten Code den Fehler auch nicht ersehen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

5k41

BeitragSo, Jan 22, 2006 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
da hat hubsi recht...du musst es erst wieder auf first setzten..oder du lässt diese unsinnige abfagre wech Laughing
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

skey-z

BeitragSo, Jan 22, 2006 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
habs jetzt umgedreht, erst auf last gesetzt, und dann die überprüfung auf nicht null gemacht, und jetzt funzt es, aber die abfrage auf null muss sein, sonst bekomme ich nen fehler, wenn noch kein objekt erzeugt wurde.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

5k41

BeitragSo, Jan 22, 2006 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Laughing manchmal sieht man den wald vor lauter Bäumen nicht! das stimmt natürlich ist ja sowieso viel logischer!
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group