Seite 1 von 2

Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 12.05.2013 15:19
von Melvin71
Hallo,
ich habe vor als erstes kleines Projet ein Quiz zu schreiben. Bin auch schon etwas weiter, nur jetzt, auch nach langem
suchen, stehe ich vor dem Problem, dass ich nicht weiss, wie ich die Fragen in einem TextGadget oder so anzeigen
lassen kann. Für einen kurzen Beispielcode wäre ich sehr dankbar, damit ich da weiterkomme^^.
Aussehen sollte das so, dass, wenn das Programm läuft, ein großes Hauptfenster zusehen sein soll und dann in diesem
dann die Frage steht, Auswahlbutton für die möglichen Antworten und dann sowas wie "nächste Frage" oder so.
Das Layout steht noch nicht ganz fest. Muss nun erstma die Codeseitigen Probs lösen :D ich hoffe, ich habe nichts
vergessen, falls doch, einfach nachfragen:D

MFG

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 12.05.2013 15:55
von Micha122
Bin auch schon etwas weiter, nur jetzt, auch nach langem
suchen, stehe ich vor dem Problem, dass ich nicht weiss, wie ich die Fragen in einem TextGadget oder so anzeigen
lassen kann
Brauchst eigentlich nicht lange suchen, schau Dir die Gadget- Befehle in der PB- Hilfe an.
Bei einen Stringgadget kannst du z.B. SetGadgetText nehmen.

Kurzer Nachtrag:
Hab übersehen, das Du die Texte aus einer Datei lesen möchtest.
Dazu könntest Du z.B. die Befehle OpenFile und ReadString benutzen.

Gruß

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 12.05.2013 16:29
von The_Dark_Zim-.-
So oder so ähnlich kann man es machen ^^

Code: Alles auswählen

Global Window_0

Global Button_0, Button_1, Option_0, Option_1, Option_2, Option_3, Editor_0

Global AktuelleFrage

Enumeration #PB_Compiler_EnumerationValue
  #Font_0
  #Font_1
EndEnumeration

#Option_0 = 0
#Option_1 = 1
#Option_2 = 2
#Option_3 = 3

LoadFont(#Font_0,"Arial", 12)
LoadFont(#Font_1,"Arial", 16)

Procedure OpenWindow_0()
  
  Window_0 = OpenWindow(#PB_Any, 0, 0, 600, 400, "Quiz", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
  
  Button_0 = ButtonGadget(#PB_Any, 510, 360, 80, 30, "Nächste")
  Button_1 = ButtonGadget(#PB_Any, 10, 360, 80, 30, "Zurück")
  DisableGadget(Button_1, 1)
  
  OptionGadget(#Option_0, 140, 210, 200, 20, "")
  OptionGadget(#Option_1, 140, 300, 200, 20, "")
  OptionGadget(#Option_2, 140, 270, 200, 20, "")
  OptionGadget(#Option_3, 140, 240, 200, 20, "")
  SetGadgetFont(#Option_0, FontID(#Font_0))
  SetGadgetFont(#Option_1, FontID(#Font_0))
  SetGadgetFont(#Option_2, FontID(#Font_0))
  SetGadgetFont(#Option_3, FontID(#Font_0))
  
  Editor_0 = EditorGadget(#PB_Any, 20, 20, 560, 180)
  SetGadgetFont(Editor_0, FontID(#Font_1))
  
EndProcedure

Procedure OpenQuizFile()
  
  If OpenPreferences("QuizQuestions.txt")
    ProcedureReturn 1
  Else
    ProcedureReturn 0
  EndIf
  
EndProcedure

Procedure SetzeNaechsteFrage(AktuelleFrage)
  
  AktuelleFrage +1
  
    PreferenceGroup("Question")
    SetGadgetText(Editor_0, ReadPreferenceString ( Str( AktuelleFrage ) , "Frage nicht gefunden" ) )
    
    PreferenceGroup("Answer")
    For i = 0 To 3
      SetGadgetText(i, ReadPreferenceString ( Str( AktuelleFrage ) + "_" + Str( i ) , "Antwort nicht gefunden" ) )
    Next
    
  ProcedureReturn AktuelleFrage
EndProcedure

Procedure SetzeVorherigeFrage(AktuelleFrage)
  
  AktuelleFrage -1
  
    PreferenceGroup("Question")
    SetGadgetText(Editor_0, ReadPreferenceString ( Str( AktuelleFrage ) , "Frage nicht gefunden" ) )
    
    PreferenceGroup("Answer")
    For i = 0 To 3
      SetGadgetText(i, ReadPreferenceString ( Str( AktuelleFrage ) + "_" + Str( i ) , "Antwort nicht gefunden" ) )
    Next
  
  ProcedureReturn AktuelleFrage
EndProcedure

Procedure Window_0_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
        Case Button_0
          AktuelleFrage = SetzeNaechsteFrage(AktuelleFrage)
          DisableGadget(Button_1, 0)
          
        Case Button_1
          AktuelleFrage = SetzeVorherigeFrage(AktuelleFrage)
          If AktuelleFrage = 1
            DisableGadget(Button_1, 1)
          EndIf
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

If OpenQuizFile() = 1
  
  OpenWindow_0()
  
  AktuelleFrage = SetzeNaechsteFrage(AktuelleFrage)
  
  Repeat
    event = WaitWindowEvent(0)
    
    
    
  Until Window_0_Events(event) = #False
  
EndIf

End
Dateiformat:
[Question]
1=Wie lautet blah
[Answer]
1_0=blah
1_1=blahBlach
1_2=blahkalls
1_3=blahasdasd
Gruß Zim

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 12.05.2013 19:03
von Kiffi
Micha122 hat geschrieben:Dazu könntest Du z.B. die Befehle OpenFile und ReadString benutzen.
nee, lieber ReadFile() anstelle von OpenFile(). OpenFile() ist grade
für Anfänger eine potentielle Fehlerquelle.

Grüße ... Kiffi

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 12.05.2013 20:06
von Micha122
@kiffi

Hast absolut Recht! OpenFile öffnet eine Datei zum Lesen UND Schreiben was bei einem nicht beschreibbaren Datenträger wie CD oder DVD unweigerlich zu einem Fehler führt.

Gruß

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 13.05.2013 03:25
von Melvin71
Hallo,
besten Dank für die schnelle Hilfe, der oben angegebene Code ist sehr gut, hat sehr gut weitergeholfen :mrgreen:
Stehe nun vor dem nächsten Problem . . . kurz noch vorweg gesgt. . . ich poste nicht im Forum um schnell an guten
Code zu kommen oder weil ich zu faul bin, meine grauen Zellen anzustrengen, sondern weil ich auch nach langem suchen
leider einfach nicht das Richtige finde.
Zu meinem neuen Problem: ich möchte eine Art von Punktezähler einbauen und der Klick auf "nächste" soll auch noch
in dem Fenster anzeigen, ob der Spieler die Frage richtig beantwortet hat. Und ach, die Auswahl der Frage, also der
Antwortbutton soll bei der nächsten Fragen wieder gelöscht sein, bisher ist es so, dass er bei der nächsten Frage immer
noch ausgewählt ist. Optimal wäre dann noch, wenn man nur weiter zur nächsten Frage kommen kann, wenn man die
aktuelle Frage richtig beantwortet hat. :lol:
So das wars auch schon, was ich noch in Erfahrung bringen muss :D Sicherlich für jemanden der sich auskennt, eine
Kleinigkeit, aber mich stellt das vor beinahe unlösbaren Aufgaben^^

MFG

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 13.05.2013 12:20
von Bisonte
Schonmal versucht die Taste F1 zu betätigen ?

Ok die Masse kann einem am Anfang Angst machen ;) Aber das sollte immer Anlaufpunkt Nr. 1 sein.
Empfehlen kann man auch die deutsche Übersetzung von BI2 "PureBasic
Eine Einführung in die Computer Programmierung
"

In der Hilfe(F1) findet man nach einigem Schmökern eigentlich alles was man braucht, um
am Anfang etwas schnell hinzubekommen. Aller Anfang ist schwer, aber Eigeninitiative ist gern
gesehen ;)
Wenn einem alles vorgekaut wird, und man soll es noch einmal programmieren, kommt wieder die
Frage auf : Wie geht das ?

Bei weiteren Fragen ist immer noch das Forum da...

und nebenbei : Im Code von Darkzim ist eigentlich schon alles drin, nur richtig anwenden Du noch musst ;)

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 13.05.2013 13:54
von Melvin71
Hi Bisonte,
Die F1 Taste ist mir sehr vertaut, nur finde ich auch da nicht das was ich suche, und wenn es dort verborgen ist, dann entzieht es sich mir :D
Als Anfänger schaut man sich die Hilfe an, sieht ne Menge an Befehlen und so, aber findet dennoch nicht immer das was man braucht. Selbst Onkel Google konnte mir da nicht wirklich weiterhelfen.
Ja der Code von The_Dark_Zim-.- ist sehr gut, und wenn ich so einen Code bekomme, dann schaue ich mir den genau an und versuche ihn dann
nachzuvollziehen. Befehle die ich nicht kenne, oder wenn da was unklar ist, dann drücke ich die Hilf mir Taste ( F1 ) und schaue mir an, warum
es da so ist, wie es ist.
Und wenn ich mal wieder vor einem Problem stehe, welches ich nicht mit Hilfe der netten F1 Taste lösen kann, dann mache ich einen kleinen Ausflug
ins Forum und frage hier nach. :D

MFG

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 13.05.2013 15:09
von ts-soft
Vielleicht verschaffst Du Dir erstmal einen Überblick über alle Libs. Ein Blick in die FileLib, Preferences usw.
Wenn Du das gemacht hast, fällt es Dir auch leichter die Logik Deines Programmes festzulegen und anzu-
fangen, die ersten Routinen zu schreiben. Wenn dies getan ist, kommen dann die ersten Verständnisprobleme,
die Du dann gezielt erfragen kannst, für jedes Problem separat.

Im moment macht es den Eindruck, als wenn man Dir alles in den Allerwertesten stopfen soll :mrgreen: .
Es fehlt also noch Deine Eigenleistung, die Du hier vielleicht durch erste Codebestandteile aufzeigen
solltest.

Alles was Du Dir selbst erarbeitest, wirst Du auch in Zukunft zur Verfügung haben, was Dir andere posten,
eher nicht.

Gruß
Thomas

Re: Text aus "Datei" in einem TextGadget anzeigen lassen

Verfasst: 14.05.2013 19:24
von dysti
@The_Dark_Zim-.-,
irgendwie stimmt dein Code nicht.
Wenn man dein Beispiel so erweitert:
[Question]
1=Wie lautet blah
2=Woraus besteht ein Autoreifen
3=Wofür braucht man eine Sat-Schüssel

[Answer]
1_0=blah
1_1=blahBlach
1_2=blahkalls
1_3=blahasdasd
1_4=1

2_0=Kunststoff
2_1=Glas
2_2=Metall
2_3=Gummi
2_4=4

3_0=Zum Aufbewahren von Lebensmittel
3_1=Zum Auffangen von Regenwasser
3_2=Zum Fernsehempfang
3_3=Zur Fahrzeugortung
3_4=3
und die Debugzeilen einfügt:

Code: Alles auswählen

For i = 0 To 3
      SetGadgetText(i, ReadPreferenceString ( Str( AktuelleFrage ) + "_" + Str( i ) , "Antwort nicht gefunden" ) )
      Debug i
      Debug ReadPreferenceString ( Str( AktuelleFrage ) + "_" + Str( i ) , "Antwort nicht gefunden" )
    Next
stimmt die Reihenfolge der Zuordnung nicht. Z.B. erscheint das Gummi nicht an letzter sondern an zweiter Position.
Oder ein Bug ist in der 5.11er Version?