Seite 1 von 2
If + ProcedureReturn
Verfasst: 16.12.2006 13:44
von sen-me
Code: Alles auswählen
Procedure.q GetGadget()
Protected share.q
If GetGadgetState(7) = 0 : share = Val(GetGadgetText(5))
ElseIf GetGadgetState(7) = 1 : share = Val(GetGadgetText(5))*1024
ElseIf GetGadgetState(7) = 2 : share = Val(GetGadgetText(5))*1024*1024
Else : share = Val(GetGadgetText(5))*1024*1024*1024 : EndIf
ProcedureReturn share
EndProcedure
;...
If GetGadget() > Len("1234567890")
Debug "X > 10"
EndIf
End
Gadget 5 ist ein StringGadget mit only Numeric Flag. (Beinhaltet 11)
Gadget 7 ist eine ComboBox. (0 ist ausgewählt)
Er müsste mir also X > 10 ausgeben...
Tut er aber nicht, warum?
Zum testen
Code: Alles auswählen
Procedure.q GetGadget()
Protected share.q
If 0 = 0 : share = 11
ElseIf 0 = 1 : share = 11*1024
ElseIf 0 = 2 : share = 11*1024*1024
Else : share = 11*1024*1024*1024 : EndIf
ProcedureReturn share
EndProcedure
If GetGadget() > Len("1234567890")
Debug "X > 10"
EndIf
End
Re: If + ProcedureReturn
Verfasst: 16.12.2006 14:29
von Rubiko
Also bei deinem unteren Beispiel gibt er mir "X > 10" zurück...
EDIT: Rechtschreibfehler

Verfasst: 16.12.2006 15:28
von sen-me
Hä?
bei mir nicht Oo
Verfasst: 16.12.2006 15:48
von tobe
hi sen-me,
bei mir kommt auch X > 10 raus

Verfasst: 16.12.2006 15:52
von Kaeru Gaman
bei mir auch nicht...
aber die proc gibt 11 zurück, und sie läßt sich auch mit anderen vergleichen überprüfen...
Code: Alles auswählen
Procedure.q GetGadget()
Protected share.q
If 0 = 0 : share = 11
ElseIf 0 = 1 : share = 11*1024
ElseIf 0 = 2 : share = 11*1024*1024
Else : share = 11*1024*1024*1024 : EndIf
ProcedureReturn share
EndProcedure
Procedure.l TypeCheck()
ProcedureReturn 10
EndProcedure
Debug GetGadget()
Debug Len("1234567890")
a.l = 10
b.q = 10
c.f = 10
d.d = 10
If GetGadget() > a
Debug "long geht"
EndIf
If GetGadget() > b
Debug "quad geht"
EndIf
If GetGadget() > c
Debug "float geht"
EndIf
If GetGadget() > d
Debug "double geht"
EndIf
If GetGadget() > Val("10")
Debug "Val() geht"
EndIf
If GetGadget() > ValQ("10")
Debug "ValQ() geht"
EndIf
If GetGadget() > TypeCheck()
Debug "Typecheck geht"
EndIf
End
wie man sieht, tritt das gleiche problem mit Val() wie mit Len() auf.
der eigens erstellte TypeCheck offenbart denselben Bug
anscheinend gibt es probleme beim vergleichen von rückgabewerten unterschiedlichen typs.
@Rubiko, tobe, sen-me
welches OS, welche PB-Ver?
ich hab PB4.0
0 auf win2k
Verfasst: 16.12.2006 16:20
von helpy
Ergebnis bei mir:
Code: Alles auswählen
11
10
long geht
quad geht
float geht
double geht
Val() geht
ValQ() geht
Typecheck geht
PB 4.01 / Windows XP
Verfasst: 16.12.2006 16:23
von tobe
hi Kaeru Gaman,
ich hab winxp sp2
PureBasic 4 + update 4.01 + PBOSL
Code: Alles auswählen
11
10
long geht
quad geht
float geht
double geht
Val() geht
ValQ() geht
Typecheck geht
Verfasst: 16.12.2006 16:27
von Kaeru Gaman
aha... also wohl ein 4.00-Bug...
...muss ich wirklich mal langsam updaten...

Verfasst: 16.12.2006 16:50
von sen-me
Ich hab 4.00 WinXP
Code: Alles auswählen
11
10
long geht
quad geht
float geht
double geht
ValQ() geht
Aber ich hab doch vor wenigen tagen erst PB neu runtergeladen Oo
Verfasst: 16.12.2006 16:54
von Marvin
> aha... also wohl ein 4.00-Bug...
Anscheinend, ich hab 4.01 (XP SP2) und es klappt.
Debug Output hat geschrieben:11
10
long geht
quad geht
float geht
double geht
Val() geht
ValQ() geht
Typecheck geht