Seite 1 von 2
Was ist hier falsch am SpinGadget
Verfasst: 08.11.2006 15:39
von dibro
Hi,
@all
Warum funktioniert das nicht?
Der Zähler läuft auch, wenn ich nur mit dem Cursor über das Fenster gehe.
Code: Alles auswählen
Enumeration
#Spin1
#Text1
EndEnumeration
Procedure Count()
Static zaehler
a = GetGadgetState(#Spin1)*10
zaehler +1
SetGadgetText(#Text1,Str(a)+" Zähler = "+Str(zaehler))
EndProcedure
If OpenWindow(0, 60, 30, 80,100,"")
CallDebugger
If CreateGadgetList(WindowID(0))
SpinGadget(#Spin1,20,10,50,25,75,150,#PB_Spin_Numeric|#PB_Spin_ReadOnly)
SetGadgetState(#Spin1,100)
TextGadget(#Text1,10,50,90,30,"")
CloseGadgetList()
EndIf
Repeat
Select EventGadget()
Case #Spin1
Count()
EndSelect
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
End
Wer hilft mir weiter?
Verfasst: 08.11.2006 15:49
von AND51
Du hast vergessen,
WindowEvent*( ab zufragen.
Du benoetigst Yeilen, die ich mit *** markiert habe, die du aber nicht bei dir eingebaut hast.
Code: Alles auswählen
Enumeration
#Spin1
#Text1
EndEnumeration
Procedure Count()
Static zaehler
a = GetGadgetState(#Spin1)*10
zaehler +1
SetGadgetText(#Text1,Str(a)+" Zähler = "+Str(zaehler))
EndProcedure
If OpenWindow(0, 60, 30, 80,100,"")
CallDebugger
If CreateGadgetList(WindowID(0))
SpinGadget(#Spin1,20,10,50,25,75,150,#PB_Spin_Numeric|#PB_Spin_ReadOnly)
SetGadgetState(#Spin1,100)
TextGadget(#Text1,10,50,90,30,"")
CloseGadgetList()
EndIf
Repeat
Select WaitWindowEvent()*******
Case #PB_Event_CloseWindow *******
Break******
Case #PB_Event_Gadget*******
Select EventGadget()
Case #Spin1
Count()
EndSelect
ForEver *******
EndIf
End
Verfasst: 08.11.2006 16:10
von dibro
Danke,
erstens verstehe ich nicht warum und zweitens
meckert der Compiler
in Zeile 34 another end condition is expected here
Da weiß ich auch nicht weiter.
Verfasst: 08.11.2006 16:12
von AND51
Tschuldige, habe ein
EndSelect vor
ForEver vergessen, bitte einfügen!

Verfasst: 08.11.2006 16:40
von dibro
danke,

das hätte ich auch selber finden müssen
Aber jetzt das eigentliche Problem, weshalb ich den Schnipsel gebaut habe:
Der Zähler läuft bei jedem Klick 2 x weiter.
Warum?
In einem Programm habe ich eine Schleife mit einer linked List (>6000 Werte), die jedesmal abgefragt wird, wenn das Spingadget verändert wird um neue Werte zu berechnen.
Und die wird immer 2 x durchlaufen und das dauert....
Ich hoffe Du kannst mir auch hier helfen
Verfasst: 08.11.2006 16:46
von #NULL
>> erstens verstehe ich nicht warum..
weil der rückgabewert von EventGadget() vom letzten aufruf von [Wait]WindowEvent() abhängt, also dort aktualisiert wird. ohne [Wait]WindowEvent() ist er nutzlos. (ebenso auch EventType() ect.)
Verfasst: 08.11.2006 17:10
von tobe
hi dibro,
der doppelte aufruf entsteht, weil bei einem mausklick mehrere events ausgelöst werden.
Code: Alles auswählen
Enumeration
#Spin1
#Text1
EndEnumeration
Procedure Count()
Static zaehler
a = GetGadgetState(#Spin1)*10
zaehler +1
SetGadgetText(#Text1,Str(a)+" Zähler = "+Str(zaehler))
EndProcedure
If OpenWindow(0, 60, 30, 80,100,"")
If CreateGadgetList(WindowID(0))
SpinGadget(#Spin1,20,10,50,25,75,150,#PB_Spin_Numeric|#PB_Spin_ReadOnly)
SetGadgetState(#Spin1,100)
TextGadget(#Text1,10,50,90,30,"")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #Spin1
Select EventType()
Case #PB_EventType_Change
Count()
EndSelect
EndSelect
EndSelect
ForEver
EndIf
End
Verfasst: 08.11.2006 17:36
von dibro
Das wars
Das muss man aber erst mal wissen, besonders wenn man "by doing" lernt.
Danke allen, ihr habt mir wohl stundenlanges Suchen erspart.
Tolles Forum, echt gute Hilfe !
Verfasst: 15.11.2006 21:15
von dibro
Hi,
da bin ich nochmal.
Jetzt habe ich das gleiche Problem mit dem Trackbargadget.
Nach einem EventGadget() läuft der Zähler 2 x weiter und auf EventType() reagiert das Teil nicht.
Was kann man da machen ?
/Edit
Hier mein Code
Code: Alles auswählen
Enumeration
#Trackbar1
#Text1
EndEnumeration
Procedure Count()
Static zaehler
a = GetGadgetState(#Trackbar1)
zaehler +1
SetGadgetText(#Text1,Str(a)+" Zähler = "+Str(zaehler))
EndProcedure
If OpenWindow(0, 60, 30, 80,100,"")
If CreateGadgetList(WindowID(0))
TrackBarGadget(#Trackbar1,20,10,100,20,0,100)
TextGadget (#Text1, 10,50,90,30,"0")
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget()= #Trackbar1
If EventType() = #PB_EventType_LeftClick
Count()
EndIf
EndIf
EndSelect
ForEver
EndIf
End
Der Zähler läuft jeweils um 1 weiter, wenn ich klicke und wenn ich loslasse. Er soll aber nur einmal weiter laufen.
Es ist auch egal, ob ich die EventType() - Abfrage einbaue oder nicht.
Zur Erklärung: es geht nur ums Prinzip, mit den Tics mache ich was, aber das ist eine lange Schleife und die soll nicht 2 x durchlaufen werden.
Verfasst: 16.11.2006 13:26
von #NULL
ich verstehe nicht ganz.
falls du count nur bei der änderung eines wertes aufrufen willst.. geht so:
Code: Alles auswählen
Case #PB_Event_Gadget
If EventGadget()= #Trackbar1
If EventType() = #PB_EventType_LeftClick
If val <> GetGadgetState(#Trackbar1)
Count()
val = GetGadgetState(#Trackbar1)
EndIf
EndIf
EndIf