Salli Mr_Blues
RapaGUI hat die Möglichkeit, Bilder anzuzeigen. Füge in die
XML-Datei folgende Zeile ein:
<image id="bild1" brush="1"/>
Und zwar hier:
<vgroup>
<image id="bild1" brush="1"/>
<button id="fbt1">-</button>
<button id="fbt2">-</button>
Dann wird das Bild oberhalb der Fragen angezeigt.
Nun müssen wir das Format der Datei Fragen.txt ändern.
Für dieses Unterfangen kopiere folgenden Code und führe
das Programm aus. Es konvertiert Dein altes Dateiformat
in ein neues. Bitte benutze einen anderen Dateinamen und
überprüfe dann das Ergebnis.
Entweder Du löschst die alte Datei und nennst die neue um
oder Du änderst den Dateinamen im Programm auf den
neuen Namen. Hier das Konverterprogramm:
; ----------------
;----------------------- Voreinstellungen ----------------------------
; ----------------
;Hollywood-Version
@VERSION 6,1
;Bildschirm
@DISPLAY {Color = #WHITE}
; -----------------
;----------------------- Globale Variablen -------------------------
; -----------------
;Fragen und Antworten
Frage = {} ;mit = {} werden Tabellen deklariert
RichtigeAntwort = {}
AntwortZusatz = {}
Antwort1 = {}
Antwort2 = {}
Antwort3 = {}
Antwort4 = {}
Antwort5 = {}
;Zähler
AktuelleFrage = 0
FragenZaehler = 0 ;Die Felder in Tabellen fangen bei 0 an
; ----------
;----------------------- Funktionen -----------------------
; ----------
Function p_FragenLaden()
Local Vorhanden = False ;Alle lokalen Variablen werden beim Verlassen der Funktion p_FragenLaden() aus dem Speicher gelöscht
Local Datei = ""
Local Leerzeile = ""
Local Weiter = 0
Datei=FileRequest("Wähle die Datei aus","",#REQ_NORMAL,GetCurrentDirectory(),"")
If Datei=""
Weiter = SystemRequest("Fehler","Keine Datei oder Abbruchtaste gewählt","Programm beenden")
End()
Else
Vorhanden=Exists(Datei)
If Vorhanden = True ;Wenn Datei vorhanden, wird sie geöffnet
OpenFile(1,Datei,#MODE_READ)
While Not Eof(1)
Frage[FragenZaehler] = ReadLine(1)
RichtigeAntwort[FragenZaehler] = ReadLine(1)
AntwortZusatz[FragenZaehler] = ReadLine(1)
Antwort1[FragenZaehler] = ReadLine(1)
Antwort2[FragenZaehler] = ReadLine(1)
Antwort3[FragenZaehler] = ReadLine(1)
Antwort4[FragenZaehler] = ReadLine(1)
Antwort5[FragenZaehler] = ReadLine(1)
If Not Eof(1) ;Falls am Ende der Datei die Leerzeile vergessen wurde, wird kein Fehler gemeldet
Leerzeile = ReadLine(1)
EndIf
FragenZaehler = FragenZaehler+1
Wend
CloseFile(1)
Weiter = SystemRequest("Fragen zählen","Es wurden "..FragenZaehler.." Fragen geladen","OK")
Else
Weiter = SystemRequest("Fehler","Datei ist nicht vorhanden","Programm beenden")
End()
EndIf
EndIf
EndFunction
Function p_DateiSpeichern()
NeuerDateiName=FileRequest("Neue Datei auswählen", "", #REQ_SAVEMODE)
If NeuerDateiName=""
Weiter = SystemRequest("Fehler","Keine Datei oder Abbruchtaste gewählt","Programm beenden")
End()
Else
If Exists(NeuerDateiName)
Weiter = SystemRequest("Datei vorhanden","Datei "..Chr(10)..NeuerDateiName..Chr(10).."ist bereits vorhanden. Überschreiben?","Ja, überschreiben|Nein, nicht überschreiben")
If Weiter = 1
DeleteFile(NeuerDateiName)
p_FragenSpeichern()
Else
End()
EndIf
Else
p_FragenSpeichern()
EndIf
EndIf
EndFunction
Function p_FragenSpeichern()
OpenFile(2,NeuerDateiName,#MODE_WRITE)
For AktuelleFrage=0 To FragenZaehler-1
WriteLine(2,Frage[AktuelleFrage])
WriteLine(2,RichtigeAntwort[AktuelleFrage])
WriteLine(2,AntwortZusatz[AktuelleFrage])
WriteLine(2,Antwort1[AktuelleFrage])
WriteLine(2,Antwort2[AktuelleFrage])
WriteLine(2,Antwort3[AktuelleFrage])
WriteLine(2,Antwort4[AktuelleFrage])
WriteLine(2,Antwort5[AktuelleFrage])
WriteLine(2,"Ersatzbild.jpg")
WriteLine(2,"-")
WriteLine(2,"-")
WriteLine(2,"-")
WriteLine(2,"-")
WriteLine(2,"-")
WriteLine(2,"-")
Next
CloseFile(2)
Weiter = SystemRequest("Datei vorhanden","Datei "..Chr(10)..NeuerDateiName..Chr(10).."wurde gespeichert","Programm beenden")
EndFunction
; -------------
;----------------------- Hauptprogramm -----------------------
; -------------
EscapeQuit(True)
p_FragenLaden()
p_DateiSpeichern()
End()
So, nun müssen wir uns um das Programm kümmern.
Bei den Globalen Variablen musst Du folgende Zeile einfügen:
In der Funktion
p_FragenLaden() ersetzt Du die ganze
Whiile-Wend-Schleife mit folgendem Code:
While Not Eof(1)
Frage[FragenZaehler] = ReadLine(1)
RichtigeAntwort[FragenZaehler] = ReadLine(1)
AntwortZusatz[FragenZaehler] = ReadLine(1)
Antwort1[FragenZaehler] = ReadLine(1)
Antwort2[FragenZaehler] = ReadLine(1)
Antwort3[FragenZaehler] = ReadLine(1)
Antwort4[FragenZaehler] = ReadLine(1)
Antwort5[FragenZaehler] = ReadLine(1)
FrageBild[FragenZaehler] = ReadLine(1)
For i=1 To 6
If Not Eof(1) ;Falls am Ende der Datei die Leerzeile vergessen wurde, wird kein Fehler gemeldet
Leerzeile = ReadLine(1)
EndIf
Next
FragenZaehler = FragenZaehler+1
If FragenZaehler = 25
p_Spielende()
EndIf
Wend
Damit laden wir neu in einer Zeile den Bildernamen aus der Datei
raus. Ausserdem lesen wir noch die restlichen Leerzeilen raus und
ignorieren sie anschliessend. Falls jemals in der Datei eine neue
Zeile zum herauslesen dazukommt, dann muss die Zahl der Leerzeilen
von aktuell 6 auf 5 reduziert werden (bei der Zeile
For i=1 To 6 ).
In der Funktion
p_NaechsteFrage() fügst Du zwischen
If AktuelleFrage=FragenZaehler
p_Spielende()
EndIf
und der Zeile
moai.Set("fbt1", "Text", "Frage "..FrageNummer.." von "..FragenZaehler)
diesen Code ein. Du kannst den Kommentar auch weglassen, wenn
Du ihn eingeprägt hast:
;Wechsle zuerst immer in das Hauptverzeichnis, wo
;Dein Programm hockt. Mache das immer, bevor Du in
;ein Unterverzeichnis wechselst. In diesem kleinen
;Programm spielt das villeicht noch keine Rolle.
;Bei einem Programm mit mehreren Unterverzeichnissen
;kann das aber zu Fehlern führen.
ChangeDirectory(Programmverzeichnis)
ChangeDirectory("Bilder")
LoadBrush(2,FrageBild[AktuelleFrage])
moai.Set("bild1", "brush", "2")
Du musst also bei Deinem Programm von Hand ein neues
Verzeichnis mit dem Namen
Bilder erstellen. Diese
Zeilen wechseln zuerst ins Programmverzeichnis (falls Du
vorher irgend wo anderst warst) und von da aus ins Verzeichnis
Bilder. Mit der Zeile
moai.Set("bild1", "brush", "2") wird
das Bild geändert. Somit bist Du in der Lage, zu jeder Frage
ein eigenes Bild zu wählen. Dieser Bilddateiname musst Du
in die Fragedatei anstelle vom Namen
Ersatzbild.jpg
einsetzen.
Um Fehler zu vermeiden, wähle ein Bild aus, nene es
Ersatzbild.jpg
und speichere es im Programmverzeichnis (nicht bei den Bildern).
Somit wird nach dem Konvertieren der Datei das Ersatzbild angezeigt,
falls Du vergessen hast, den Bildernamen zu ändern. Das Programm
wird dadurch nicht abgebrochen.
So, und zum Schluss füge im Hauptprogramm zwischen den Zeilen
;Beenden des Programmes
EscapeQuit(True)
und
;Fragen
moai.CreateApp(FileToString("silvia3.xml"))
diesen Befehl ein:
;Bild:
CreateBrush(1,500,200)
Wir müssen einen Pinsel kreieren, da sonst RapaGUI einen
Fehler meldet, da er den Pinsel nicht finden kann.
Bei den Bildern musst Du eine einheitliche Grösse wählen,
da sonst das Programmfenster wahrscheinlich ständig die
Grösse ändern wird.
Übrigens, die Fenstergrösse ist auf das Bild beschränkt. Das
heisst, Du kannst das Fenster nicht grösser als die Bildbreite
ziehen. Warum das so ist, weiss ich nicht.
So, nun teste mal die ganze Geschichte. Ich hoffe, das
funktioniert so.
Da kommen mir noch wichtige Fragen in den Sinn:
- Mit was Entwickelst Du deine Hollywoodprogramme?
- Auf welcher Plattform/mit welchem OS?
- Auf wlecher Zielplattform wirst Du Dein Programm vorführen?
Griessli
Tipsi