Verfasst: 13.08.2006 19:11
Mit Settimer koennte man, wie schon erwaehnt, das Problem loesen.
Desweiteren ist deine Eventschleife voellig fuern Eimer, da dort nichtmal
nen Event verarbeitet wird.
Eine richtige Eventschleife sollte in etwa so aussehen :
Ob du nun lieber 'ForEver' benutzt und das Event vorher abfaengst ist
egal. Auf ein weiteres 'WaitWindowEvent()' oder sogar, das von 0 genannte,
'While WindowEvent():wend' kann bzw muss verzichtet werden.
Auch dein Readfile hat dort so nichts zu suchen, denn es wird
immer wieder versuchst die Datei zu oeffnen, solange sich an dieser
Datei aber nichts aendert, reicht einmal lesen voellig aus.Du kannst
sie aber auch offen lassen und per Seek darin rumgurken. Ich wuerde
aber die Variante von KG nehmen und in eine Liste speichern.
Hier mal ein kleines Beispiel wie man es machen koennte (nicht perfekt):
Code: Alles auswählen
hwnd = OpenWindow(0,0,0,300,300,"")
CreateGadgetList(hwnd)
ButtonGadget(0,10,10,100,22,"schiessen")
timer_ms = 500
timer_id = 0
Repeat
event = WaitWindowEvent()
If event = #PB_Event_Gadget
If EventGadget() = 0
SetWindowState(0, #PB_Window_Minimize)
timer = SetTimer_(hwnd,timer_id,timer_ms,0)
EndIf
ElseIf event = #WM_TIMER
If EventwParam() = timer_id
SetWindowState(0, #PB_Window_Normal)
KillTimer_(hwnd,timer_id)
timer = 0
EndIf
ElseIf event = #WM_SIZE
If Not timer
KillTimer_(hwnd,timer_id)
timer = 0
EndIf
ElseIf event = #WM_CLOSE
Break
EndIf
ForEver
Desweiteren ist deine Eventschleife voellig fuern Eimer, da dort nichtmal
nen Event verarbeitet wird.
Eine richtige Eventschleife sollte in etwa so aussehen :
Code: Alles auswählen
Repeat
event = WaitWindowEvent()
Until event = #WM_CLOSE
egal. Auf ein weiteres 'WaitWindowEvent()' oder sogar, das von 0 genannte,
'While WindowEvent():wend' kann bzw muss verzichtet werden.
Auch dein Readfile hat dort so nichts zu suchen, denn es wird
immer wieder versuchst die Datei zu oeffnen, solange sich an dieser
Datei aber nichts aendert, reicht einmal lesen voellig aus.Du kannst
sie aber auch offen lassen und per Seek darin rumgurken. Ich wuerde
aber die Variante von KG nehmen und in eine Liste speichern.
Hier mal ein kleines Beispiel wie man es machen koennte (nicht perfekt):
Code: Alles auswählen
Structure Vokabeln
deutsch.s
tuerkisch.s
spanisch.s
EndStructure
Enumeration
#Window
EndEnumeration
Enumeration
#bt_open
#bt_next
#bt_mini
#l_deutsch
#l_tuerkisch
#l_spanisch
#l_deutsch_v
#l_tuerkisch_v
#l_spanisch_v
#l_anzahl
EndEnumeration
Global NewList VokabeListe.Vokabeln()
Procedure ReadVokabel(file.s)
Protected hFile.l = ReadFile(#PB_Any,file)
Protected sLine.s , lRFormat.l
Protected sDeutsch.s , sTuerkisch.s , sSpanisch.s
Protected lZaehler.l
If hFile
ClearList(VokabeListe())
lRFormat = ReadStringFormat(hFile)
While Eof(hFile) = 0
sLine = ReadString(hFile,lRFormat)
sDeutsch = StringField(sLine, 1, ",")
sTuerkisch = StringField(sLine, 2, ",")
sSpanisch = StringField(sLine, 3, ",")
If sDeutsch Or sTuerkisch Or sSpanisch
AddElement(VokabeListe())
VokabeListe()\deutsch = Trim(sDeutsch)
VokabeListe()\tuerkisch = Trim(sTuerkisch)
VokabeListe()\spanisch = Trim(sSpanisch)
sDeutsch = ""
sTuerkisch = ""
sSpanisch = ""
EndIf
lZaehler + 1
Wend
CloseFile(hFile)
EndIf
ProcedureReturn lZaehler
EndProcedure
Procedure GetVokabel()
Protected lCount = CountList(VokabeListe())
If lCount
Protected lRandom = Random(lCount)
SelectElement(VokabeListe(),lRandom)
SetGadgetText(#l_deutsch_v,VokabeListe()\deutsch )
SetGadgetText(#l_tuerkisch_v,VokabeListe()\tuerkisch )
SetGadgetText(#l_spanisch_v,VokabeListe()\spanisch )
DeleteElement(VokabeListe())
If lCount > 1
DisableGadget(#bt_next,0)
Else
DisableGadget(#bt_next,1)
EndIf
ProcedureReturn 1
EndIf
EndProcedure
hwnd = OpenWindow(0,0,0,400,240,"")
timer_ms = 1000
timer_id = 0
CreateGadgetList(hwnd)
ButtonGadget(#bt_open,10,10,90,22,"Vokabeln laden")
ButtonGadget(#bt_next,10,40,90,22,"naechste") : DisableGadget(#bt_next,1)
ButtonGadget(#bt_mini,10,70,90,22,"verstecken")
TextGadget(#l_anzahl ,110,10,200,22,"keine Vokabeln vorhanden",#PB_Text_Border )
TextGadget(#l_deutsch ,10,130,100,20,"deutsch : ")
TextGadget(#l_tuerkisch ,10,160,100,20,"tuerkisch : ")
TextGadget(#l_spanisch ,10,190,100,20,"spanisch : ")
TextGadget(#l_deutsch_v ,110,130,200,22,"",#PB_Text_Border )
TextGadget(#l_tuerkisch_v ,110,160,200,22,"",#PB_Text_Border )
TextGadget(#l_spanisch_v ,110,190,200,22,"",#PB_Text_Border )
Repeat
event = WaitWindowEvent()
If event = #WM_CLOSE
Break
EndIf
If event = #PB_Event_Gadget
If EventGadget() = #bt_open
Anzahl = ReadVokabel("v.txt")
SetGadgetText(#l_anzahl,Str(Anzahl)+ " Vokabel(n) vorhanden")
GetVokabel()
EndIf
If EventGadget() = #bt_next
If GetVokabel()
Anzahl - 1
SetGadgetText(#l_anzahl,Str(Anzahl)+ " Vokabel(n) vorhanden")
EndIf
EndIf
If EventGadget() = #bt_mini
SetWindowState(0, #PB_Window_Minimize)
timer = SetTimer_(hwnd,timer_id,timer_ms,0)
EndIf
EndIf
If event = #WM_TIMER
If EventwParam() = timer_id
SetWindowState(0, #PB_Window_Normal)
KillTimer_(hwnd,timer_id)
timer = 0
EndIf
If event = #WM_SIZE
If Not timer
KillTimer_(hwnd,timer_id)
timer = 0
EndIf
EndIf
EndIf
ForEver
v.txt hat geschrieben: deutsch0 , tuerkisch0 , spanisch0
deutsch1 , tuerkisch1 , spanisch1
deutsch2 , tuerkisch2 , spanisch2
deutsch3 , tuerkisch3 , spanisch3