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 :roll:

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.00 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... :lol:

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