Seite 1 von 5
StringGadget VS #PB_String_Numeric
Verfasst: 18.03.2006 15:56
von sharkpeter
Was bedeutet eigentlich numerisch, nur Ganzzahlen oder auch reale Zahlen, also
auch positive, negative und Fließkommazahlen.
Es ist nach wie vor ärgerlich, das man in ein StringGadget mit dem gesetzten Flag
#PB_String_Numeric KEINE solchen Werte eingeben kann.
@André
wenn du die Hilfe vielleicht daraufhin anpassen könntest? Es sollte schon da stehen
das es nur Ganzzahlen sind und keine Fließkommazahlen.
Gruß Jens
Verfasst: 18.03.2006 18:25
von ts-soft
>> Es sollte schon da stehen das es nur Ganzzahlen sind und keine Fließkommazahlen.
Nur positive Ganzzahlen!
Verfasst: 18.03.2006 19:08
von sharkpeter
@TS,
das kann für PB schon sein, aber es gibt eigentlich eine andere Erläuterung
dazu:
in der MS-SDK steht folgendes:
Numeric Literal Syntax
The following syntax is used for numeric literals in ODBC:
numeric-literal ::= signed-numeric-literal | unsigned-numeric-literal
signed-numeric-literal ::= [sign] unsigned-numeric-literal
unsigned-numeric-literal ::= exact-numeric-literal |
approximate-numeric-literal
exact-numeric-literal ::= unsigned-integer [period[unsigned-integer]] |
period unsigned-integer
sign ::= plus-sign | minus-sign
approximate-numeric-literal ::= mantissa E exponent
mantissa ::= exact-numeric-literal
exponent ::= signed-integer
signed-integer ::= [sign] unsigned-integer
unsigned-integer ::= digit...
plus-sign ::= +
minus-sign ::= -
digit ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
period ::= .
© 1998-2004 Microsoft Corporation. All rights reserved.
Gruß Jens
Verfasst: 18.03.2006 19:15
von ts-soft
Bloß das das Ganze mit ODBC nichts zu tun hat, für Controls hat Billy es
anders implementiert (Ich nehme mal an, das es ein natives Feature ist, bin
aber zu Faul da nachzuforschen)
Verfasst: 18.03.2006 19:27
von sharkpeter
@TS,
das mag ja richtig sein, FALSCH ist jedoch, die anderen Zahlentypen von vornherein einfach
unter den Tisch zu kehren und dies nicht einmal zu kommentieren.
Außerdem sollte das nur der Verdeutlichung dienen, was denn NUMERISCH ist.
Gruß Jens
Verfasst: 18.03.2006 19:34
von ts-soft
Ich stimme Dir ja zu, aber:
Wikipedia hat geschrieben:Eine Nummer (Adj.: numerisch) ist die eine Ganzzahl, die vor allem zur Kennzeichnung von - meist geordneten - Objekten verwandt wird.
Verfasst: 18.03.2006 19:49
von edel
das mag ja richtig sein, FALSCH ist jedoch, die anderen Zahlentypen von vornherein einfach
unter den Tisch zu kehren und dies nicht einmal zu kommentieren.
Wozu auch , WinApi heisst nicht "Flag setzen und gut ist". 'Nen
bisschen programmieren muss man ueberall.
Verfasst: 18.03.2006 19:59
von sharkpeter
@TS,
klar, numerisch heíßt auch ordnen, soweit so gut.
@hallodri,
Flag setzten, und gut, davon redet ja gar keiner. Nur der Aufwand der
dafür notwendig ist, ist doch schon was mehr. Solange man nur
Spielstände in so einem Ding anzeigen oder ändern will, ist ja positive
Ganzzahl in Ordnung.
Nur für andere Zwecke muß man u.u. mehr haben und das geht nur mit
einem nicht gesetztem Flag, nur sind dann auch alle anderen Zeichen
erlaubt. Und das ist oft sehr störend.
Gruß Jens
Verfasst: 18.03.2006 20:26
von edel
Code: Alles auswählen
EnableExplicit
Procedure SetCallbackEx(hWnd.l,Proc.l)
Protected OldProc = SetWindowLong_(hWnd,#GWL_WNDPROC,Proc)
If OldProc
SetWindowLong_(hWnd,#GWL_USERDATA,OldProc)
EndIf
ProcedureReturn OldProc
EndProcedure
Procedure callback(hWnd,Msg,wParam,lParam)
Protected OldProc = GetWindowLong_(hWnd,#GWL_USERDATA)
Protected len.l , input.s
Protected Buffer.s = Space(128)
if #WM_KEYUP = Msg
If wParam = #VK_DECIMAL Or wParam = $BC
len = SendMessage_(hwnd,#WM_GETTEXT,30,@Buffer)
If FindString(Buffer,".",0) = 0
If len = 0 or Buffer = "-"
input = "0."
Else
input = "."
EndIf
SendMessage_(hwnd,#EM_REPLACESEL,0,@input)
EndIf
endif
If wParam = #VK_SUBTRACT Or wParam = $BD
len = SendMessage_(hwnd,#WM_GETTEXT,128,@Buffer)
if left(Buffer,1) <> "-"
input = "-"
SendMessage_(hwnd,#EM_SETSEL,0,0)
SendMessage_(hwnd,#EM_REPLACESEL,0,@input)
SendMessage_(hwnd,#EM_SETSEL,len+1,len+1)
endif
endif
endif
ProcedureReturn CallWindowProc_(oldPROC,hWnd,Msg,wParam,lParam)
EndProcedure
Define WindowTitle.s = "Test"
Define CX.l = 120
Define CY.l = 50
Define *hString.long
Define *hWindow.long
Define WindowEvent.l
*hWindow = OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,CX,CY,WindowTitle)
CreateGadgetList(*hWindow\l)
*hString = StringGadget(#pb_any,10,10,100,20,"0",#PB_String_Numeric|#PB_Text_Right)
SetCallbackEx(*hString\l,@callback())
Repeat
WindowEvent = WaitWindowEvent()
if WindowEvent = #PB_Event_Gadget
if EventGadget() = *hString
define result.s = GetGadgetText(*hString)
if FindString(result,".",1)
debug vald(result)
else
debug val(result)
endif
endif
endif
Until WindowEvent = #WM_CLOSE
Verfasst: 18.03.2006 20:37
von ts-soft
@hallodri
Und wie schaltet man jetzt den Ballontip, welcher bei aktivierem XP-Style
kommt, ab
Ansonsten funktioniert es ja!