Text aus "Datei" in einem TextGadget anzeigen lassen

Anfängerfragen zum Programmieren mit PureBasic.
Melvin71
Beiträge: 9
Registriert: 07.05.2013 13:14
Wohnort: Lübeck

Text aus "Datei" in einem TextGadget anzeigen lassen

Beitrag 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
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

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

Beitrag 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ß
Benutzeravatar
The_Dark_Zim-.-
Beiträge: 372
Registriert: 18.03.2008 16:53

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

Beitrag 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
PB: 5.xx LTS x86/x64 | WIN: 10 Pro x64, Linux Mint x64
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
a²+b²=mc²
Micha122
Beiträge: 248
Registriert: 02.10.2011 14:45
Wohnort: Sinzig
Kontaktdaten:

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

Beitrag 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ß
Melvin71
Beiträge: 9
Registriert: 07.05.2013 13:14
Wohnort: Lübeck

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

Beitrag 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
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

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

Beitrag 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 ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Melvin71
Beiträge: 9
Registriert: 07.05.2013 13:14
Wohnort: Lübeck

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

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

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

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

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

Beitrag 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?
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten