Fensterinhalt wird nicht dargestellt...

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Thommes

Betreff: Fensterinhalt wird nicht dargestellt...

BeitragSa, Feb 11, 2006 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, ich nu wieder.... Embarassed
Ich bin schon etwas weitergekommen mit meinem Projekt, habe aber wieder ein Problem, wo ich nicht mehr weiter komme.
Ich habe mir zum Programm-Hauptfenster noch zwei weitere Fenster erstellt.
Eines für die Infos zum Programm und das andere für kommende Statistiken. Beide werden über einen jeweiligen Button geöffnet (keine Angst, immer nur eins). In der Zeit, wo das Infofenster z.B. auf ist, wird das Hauptfenster mit dem Befehl HideGadget(window) wechgemacht Wink . Wenn ich dann das Infofenster mit dem Befehl FreeGadget(infowindow) wieder schliesse und das Hauptfenster dann wieder mit dem Befehl ShowGadget(window) wieder zum leben erwecke, ist alles in Butter. Selbiges funktioniert auch mit dem Fenster für die Statistik... Aber nur ein mal. Wenn ich dann eines der Fenster ein zweites mal öffne, ist es leer. Alles, was ich auf den angelegten Canvas zeichne ist dann nicht mehr zu sehen. Es ist einfach nur leer.
Wer das mal ausprobieren will kann sich das Progrämmchen ja mal auf meiner HP runterladen.
Vielleicht hat ja jemand eine Idee?? Rolling Eyes

Artemis

BeitragSo, Feb 12, 2006 9:08
Antworten mit Zitat
Benutzer-Profile anzeigen
FreeGadget löscht ein Fenster, danach musst du es neu erstellen. Benutze doch wie bei dem Hauptfenster HideGadget.

Thommes

BeitragSo, Feb 12, 2006 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
JonasCleve hat Folgendes geschrieben:
FreeGadget löscht ein Fenster, danach musst du es neu erstellen. Benutze doch wie bei dem Hauptfenster HideGadget.


Jepp... ich habs umgebastelt. Aber ich hatte das Fenster in einer Funktion erstellt und dann (nach Freegadget() ) alles neu aufgebaut. Aber es tat sich nichts. Aber der Tip mit HideGadget ist gut. Jetzt dauert der Aufbau des Fensters nicht so lange, weil man anscheinend die Möglichkeit hat die Grafiken im Hintergrund aufzubauen und erst dann mit ShowGadget das Fenster aufzurufen. Hier (und an vielen anderen Stellen) finde ich die Hilfe vom BM sehr dürftig. Ich habe auch schon eiin neues Problem:
Ich möchte einen HighScore als Text speichern. Das Beispiel aus BM funktioniert sehr gut, wenn man es so startet:

' writestream.bmx

' opens a write stream to the file mygame.ini and
' outputs a simple text file using WriteLine

out=WriteStream("mygame.ini")

if not out RuntimeError "Failed to open a WriteStream to file mygame.ini"

WriteLine out,"[display]"
WriteLine out,"width=800"
WriteLine out,"height=600"
WriteLine out,"depth=32"
WriteLine out,""
WriteLine out,"[highscores]"
WriteLine out,"AXE=1000"
WriteLine out,"HAL=950"
WriteLine out,"MAK=920"

CloseStream out

print "File mygame.ini created, bytes="+FileSize("mygame.ini")



Wenn ich das Teil jedoch in mein Programm einbaue - in eine Funktion oder in den Hauptteil - bricht BM mit einer Fehlermeldung ab:

Compile Error
Expecting string literal but encountered end-of-line


Das versteh ich nicht. Wieso läuft es alleine und in meinem Programm nicht??

Vielleicht hat ja jemand einen Ratschlag parat??

Schönnen Sonntag noch....

rema

BeitragSo, Feb 12, 2006 13:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Normalerweise zeigt der Compiler auch bei einem Abbruch dann auch die Zeile an, wo der Fehler passiert ist.

Hast du die Variabeln auch alle schön vorher deklariert? Verwendest du auch Strict ? Ist hilfreich bei der Fehlersuche.

strict

local out:tstream

...
...

out=writestream("...")

Suco-X

Betreff: .......

BeitragSo, Feb 12, 2006 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Thommes: Wie stellst du dir die ganze Sache eigentlich vor? Ich mein, du gibst uns hier funktionierenden Code aus den BMX Samples und eine Fehlermeldung, die dein Code verursacht, die aber 1000 Ursachen haben kann. Wir können nicht hellsehen, es wäre also für uns alle leichter, wenn du
dir direkt angewöhnst die Fragen so zu stellen, dass wir dir im Notfall auch helfen können.
Bei manchen hier im Forum fühlt man sich echt wie in ner Quizshow, nur das es nichts zu gewinnen gibt.

Abgesehen davon denke ich, du hast da wohl einfach nur irgendeine Kleinigkeit vergessen, wie ein "Endif" oder "Next" oder einen String nicht geschlossen.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Thommes

BeitragSo, Feb 12, 2006 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
rema hat Folgendes geschrieben:
Normalerweise zeigt der Compiler auch bei einem Abbruch dann auch die Zeile an, wo der Fehler passiert ist.

Hast du die Variabeln auch alle schön vorher deklariert? Verwendest du auch Strict ? Ist hilfreich bei der Fehlersuche.

strict

local out:tstream

...
...

out=writestream("...")


Hi, Strict steht ganz am Anfang des Codes...

Den Programmcode habe ich im Programm nach dem erstellen meine Windows, Buttons, Canvas etc. vor der Hauptschleiffe eingesetzt.
Wenn ich das Programm jetzt starte bricht der Compiler in der Zeile:

out=WriteStream("mygame.ini")

mit der Fehlermeldung:
Compile Error
Unable to convert from 'TStream' to 'Int'

ab. Wenn ich das Programm alleine - ohne anderen Code - ablaufen lasse, dann funktioniert es. Das ist das was ich nicht verstehe.
Verstehen kann ich natürlich auch die Reaktion von Suco-X.
Dazu:
Wenn meine Tochter mir eine Frage stellt, weil sie etwas nicht weis, dann versuche ich ihr zu helfen. Verstehe ich den Hintergrund der Frage nicht hinterfrage ich noch mal das genze und versuche dann zu helfen. Ich bin in Sachen BlitzMax Newbie. Ich habe zwar schon zu Amigazeiten mit Blitzbasic (Jawoll ich habe hier sogar noch die Version 1.0) programmiert. Nach einigen Jahren (7-8 Jahre) auf dem PC mit BlitzPlus wieder angefangen und bin jetzt auf dem Mac bei BlitzMax angekommen. Der Umstieg ist an einigen Stellen nicht einfach:
z.B. Str$(integer) gibt es nicht mehr, steht aber nirgens, das BM das automatisch umrechnet. So habe ich einen ganzen Abend damit verbracht dieses Forum und die Onlinehilfe durchzustöbern um festzustellen, das nichts zu finden ist. Eine Frage diesbezüglich hätte ich mich nicht getraut hier im Forum zu stellen....
Also bitte ich demütigst um Nachsicht und hoffe, das ich niemanden ärgere oder gar zum Feind mache.
Immer dran denken: Wir haben uns alle lieb!!

Suco-X

Betreff: ........

BeitragSo, Feb 12, 2006 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Sollte nur ein Hinweis sein. Würde ich dir böse sein, hätte ich den Thread einfach ignoriert und garnichts gesagt. Meine direktheit kommt dem ein oder anderen wohl etwas feindseelig vor, was aber nicht so gewollt ist. Bin einfach nur direkt.

Zu den Strings:
Einen String definierst du in Bmax ja mit "Variable:string" oder "Variable$".
Vieles tut er ja noch automatisch umrechen, ansonsten ist wohl das Schlüsselwort "String" dein Ersatz für "Str$".

Zu dem Strict Fehler:
Das Problem ist, im Strict Modus ist die Mischung von Prozeduraler und Objekt Orientierter Programmierung nicht mehr ganz erlaubt.
Wenn du im Editor WriteStream schreibst und dann auf F1 drückst, müsste unten in der Statusleiste die Funktionsdefinition stehen.
WriteStream:TStream(Url:Object)
Das bedeutet, diese Funktion gibt dir eine Type Instanz von TStream zurück.
Es muss also heißen:
out:TStream = WriteStream("mygame.ini")
Wenn du es so machst, kannst du out mit Funktionen nutzen und auch direkt auf die Methoden und Fields zugreifen out.method().
Wenn du out als integer Variable behandelst, kannst du sie nurnoch für Funktionen weiternutzen. Dies ist aber mit dem Strict Modus nicht mehr erlaubt.
Ich weiß, sehr verwirrend für den Anfang, aber man kommt schnell hinter das System.
Wie der TStream und andere Types aufgebaut sind und welche Variable und Methoden drinstecken, kannst du direkt im Modulcode nachlesen. Den gibt es im brl Modulordner. mod/brl.mod/stream.mod z.b.


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

rema

BeitragSo, Feb 12, 2006 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
suco-x hat alles erklärt...

Wen du Strict verwendest, was ich dir auch echt anrate, so musst du alle Variabeln die du verwendest immer deklarieren.

Code: [AUSKLAPPEN]

local i:int
local f:float
local stream:tstream

type mytype
   field x:int
   field y:int
end type

global player:mytype


So weisst du mit absoluter Sicherheit:
- Variabeln nie doppelt deklarriert sind
- oder falsch geschrieben sind
- wo genau der Fehler ist fals der Compiler meckert
- der Quellcode ist besser verständlicher/lesbarer

ein wenig mehr schreibarbeit, die dir aber beim Entwickeln sehr nützlich ist...

Thommes

Betreff: Re: ........

BeitragMo, Feb 13, 2006 8:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Suco-X hat Folgendes geschrieben:
Hi
Sollte nur ein Hinweis sein. Würde ich dir böse sein, hätte ich den Thread einfach ignoriert und garnichts gesagt. Meine direktheit kommt dem ein oder anderen wohl etwas feindseelig vor, was aber nicht so gewollt ist. Bin einfach nur direkt.

Zu den Strings:
Einen String definierst du in Bmax ja mit "Variable:string" oder "Variable$".
Vieles tut er ja noch automatisch umrechen, ansonsten ist wohl das Schlüsselwort "String" dein Ersatz für "Str$".

Zu dem Strict Fehler:
Das Problem ist, im Strict Modus ist die Mischung von Prozeduraler und Objekt Orientierter Programmierung nicht mehr ganz erlaubt.
Wenn du im Editor WriteStream schreibst und dann auf F1 drückst, müsste unten in der Statusleiste die Funktionsdefinition stehen.
WriteStream:TStream(Url:Object)
Das bedeutet, diese Funktion gibt dir eine Type Instanz von TStream zurück.
Es muss also heißen:
out:TStream = WriteStream("mygame.ini")
Wenn du es so machst, kannst du out mit Funktionen nutzen und auch direkt auf die Methoden und Fields zugreifen out.method().
Wenn du out als integer Variable behandelst, kannst du sie nurnoch für Funktionen weiternutzen. Dies ist aber mit dem Strict Modus nicht mehr erlaubt.
Ich weiß, sehr verwirrend für den Anfang, aber man kommt schnell hinter das System.
Wie der TStream und andere Types aufgebaut sind und welche Variable und Methoden drinstecken, kannst du direkt im Modulcode nachlesen. Den gibt es im brl Modulordner. mod/brl.mod/stream.mod z.b.


Mfg Suco

Ich gebe Dir Recht.....
Ich weiss, manchmal ist Geduld die grösste Tugend.
Deinen Tip habe ich gestern Abend noch befolgt und es funktioniert. Ich wollte eigentlich gestern noch antworten, aber ich war dann rein Programmiertechnisch so im Fluss Wink , das ich um 1 Uhr dann ins Bett gefallen bin. Dein Tip war auf jeden Fall der richtige.
Ich denke, das ich das Info-Fenster des Programms etwas groesser machen muss, damit ich alle netten Helferlein hier aus dem Forum im Programm verewigen kann.
Ich muss sagen, das ich in den letzten Tagen (auch Durch die Hilfestellungen im Forum) viel dazugelernt habe und beginne mich mit BlitzMax anzufreunden. Es war auf jeden Fall die richtige Entscheidung! Ich werde in der nächsten Zeit wohl noch die eine oder andere Frage hier posten, aber bistimmt auch irgend wann mal so weit sein, das ich hier auch meinen Beitrag leisten kann.
Deine direkte Art ist ok. Noch mal danke für den Tip...

Thommes

BeitragMo, Feb 13, 2006 8:44
Antworten mit Zitat
Benutzer-Profile anzeigen
rema hat Folgendes geschrieben:
suco-x hat alles erklärt...

Wen du Strict verwendest, was ich dir auch echt anrate, so musst du alle Variabeln die du verwendest immer deklarieren.

Code: [AUSKLAPPEN]

local i:int
local f:float
local stream:tstream

type mytype
   field x:int
   field y:int
end type

global player:mytype


So weisst du mit absoluter Sicherheit:
- Variabeln nie doppelt deklarriert sind
- oder falsch geschrieben sind
- wo genau der Fehler ist fals der Compiler meckert
- der Quellcode ist besser verständlicher/lesbarer

ein wenig mehr schreibarbeit, die dir aber beim Entwickeln sehr nützlich ist...

Richtig.... siehe oben.
Der Rat mit Strict ist bereits seit Anfang umgesetzt. Eine starke Sache dieser Strict-Befehl, wenn er auch manchmal echt Nervt. Naja, macht man alles richtig, nervt er nicht Wink .
Aber ich mache nichts ohne Strict.
Trotzdem auch an Dich ein nettes Danke für die Hilfe...
MfG... Thommes

d-bug

BeitragMo, Feb 13, 2006 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
huhu

Es gibt da oben rechts so einen schnieken Edit-Button (user posted image). Damit kannst du bereits geschriebene Posts nochmal editieren. Wink

Zur Erklärung: Doppelposts sind nicht gern gesehen hier.

greetz

Thommes

BeitragMo, Feb 13, 2006 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
d-bug hat Folgendes geschrieben:
huhu

Es gibt da oben rechts so einen schnieken Edit-Button (user posted image). Damit kannst du bereits geschriebene Posts nochmal editieren. Wink

Zur Erklärung: Doppelposts sind nicht gern gesehen hier.

greetz


Ich kann da kein doppeltes posting sehen... Wink , oder meinst Du die Zitate?
OK. die könnte ich etwas kürzer halten. Da haste Recht.. Sorry!!

CU...

d-bug

BeitragMo, Feb 13, 2006 12:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne, das meine ich nicht, aber du hast innerhalb von 3 Minuten 2 Postings abgeliefert. Das hätte man doch auch in eines Packen können. Vielleicht bin auch einfach nur zu pingelig Wink

greetz

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group