| |
|
|
Thomas Freier | Mit una alten Code bin Yo no bastante glücklich. Tiene una de euch algo Besseres oder una Concepto? Mein Hauptproblem war esta, dass si la Inhalt por "BackSpace" gelöscht se, kein Punkt después de el vorgegebenen Signo antes el Punkt (=Komma) mehr gesetzt se.
Def GetSysColor(1) !"USER32","GetSysColor"
cls GetSysColor(15)
UseFont Arial,15,0,0,0,0
SETDIALOGFONT 1
CreateText(%hwnd,"num. Eingabe max.: nn.nn",30,120,200,22)
var Ed&=Crear("Edit",%hwnd,"",30,165,80,20)
@sendmessage(Ed&,$00C5,5,0)'y en 5 Stellen (nn.nn) begrenzt
SetFocus(Ed&)
Mientras que 1
WaitInput
caso %key=2 : BREAK
caso GETFOCUS(Ed&): NUMWERT Ed&,2'Handle, Signo vorm Komma
EndWhile
End
Proc NUMWERT' AUSWERTUNG en Signo y Stellen
Parámetros ED.N&,ED.N%
var a$="abcdefghijklmnopqrstuvwxyz"
a$=a$+Upper$("abcdefghijklmnopqrstuvwxyz")
a$=a$+"!§$%&/()=?''*':;,-_²³{[]}\^°<>|++-"
var c$=""
WhileLoop len(a$)
c$ = MID$(a$,&Loop,1)' c$= el nte Stringteil
Settext ED.N&,@Translate$(gettext$(ED.N&),c$,"")' unzulässige löschen
Settext ED.N&,@Translate$(gettext$(ED.N&),"..",".")' doppelte löschen
EndWhile
a$=trim$(gettext$(ED.N&))
WhileLoop ED.N%+1
@Match$("~.", a$)
If (%MatchPos>0) AND (%MatchPos<ED.N%+1)
a$="0"+a$
EndIf
EndWhile
If len(a$)=ED.N%
casenot @IsKey(8):a$=left$(a$,ED.N%)+"."
EndIf
SetText ED.N&,a$
sendmessage(ED.N&,$00B1,len(gettext$(ED.N&)),len(gettext$(ED.N&))+1)'Cursor en Ende
SetFocus(ED.N&)
ENDPROC
|
|
|
| |
|
|
|
| Vlt. ungefähr algo como:
var erlaubteZeichen$="abcdefghijklmnopqrstuvwxyz"+Upper$("abcdefghijklmnopqrstuvwxyz")+"!§$%&/()=?''*':;,-_²³{[]}\\^°<>|++-"
Def GetSysColor(1) !"USER32","GetSysColor"
cls GetSysColor(15)
UseFont Arial,15,0,0,0,0
SETDIALOGFONT 1
var nix&=CreateText(%hwnd,"num. Eingabe max.: nn.nn",30,120,200,22)
var Ed&=Crear("Edit",%hwnd,"",30,165,80,20)
SetFocus(Ed&)
subclass ed&,1//true
Mientras que 1
WaitInput
caso %key=2 : BREAK
EndWhile
End
subClassProc
if &sWnd=ed&
if %sMessage=258//wm_char
var p&=hiWord(sendMessage(ed&,$B0,0,0))//em_getSel
var s$=getText$(ed&)
var ch$=chr$(&swParam)
ifnot instr(ch$,erlaubteZeichen$)
if &swParam=8
if p&
if p&=3
s$=del$(s$,p&,1)
dec p&,1
endif
s$=del$(s$,p&,1)
dec p&,1
endif
endif
s$=translate$(s$,".","")
caso len(s$)>1 : s$=en el$(".",s$,3)
setText ed&,s$
sendMessage(ed&,$B1,p&,p&)//em_setSel
más
s$=en el$(ch$,s$,p&+1)
s$=translate$(s$,".","")
caso len(s$)>1 : s$=en el$(".",s$,3)
s$=mid$(s$,1,5)
setText ed&,s$
caso p&=1 : add p&,1
sendMessage(ed&,$B1,p&+1,p&+1)//em_setSel
endif
set("winproc",0)
endif
endif
endProc
|
|
|
| |
|
|
|
Thomas Freier | @IF, una SubClassProc Yo quería zwar no nehmen. Im Moment kann Yo en deinem Script no Pagar eingeben. Fehler Todavía no gesucht. Ferner debería führende Nullen ergänzt voluntad. Andernfalls puede mehr Nachkommastellen como zulässig eingegeben voluntad oder lo muß cada veces el zulässige Anzahl el Signo je después de Kommalage adaptado voluntad. Z.B.: zul. nnnn.nn = 7 -> Eingabewert= 1.22 -> después de el letzten 2 darf no weitere Eingabe mehr posible ser. Jetzt also sólo todavía max. 4 Signo. Und como siehts en unterschiedlichen Edits de?
PS. Fehler es beim Zulässigen, dass muß en deinem Script natürlich voluntad: var erlaubteZeichen$="1234567890" . |
|
|
| |
|
|