1000er punkte im input/label

  • hallo,
    ich habe ein kleines problem und zwar:
    ich möchte gerne ein input + ein label haben.
    wenn ich im input nun z.b. 1000000 eingebe, dann soll im label 1.000.000 erschreiben, also mit 1000er punkten.
    nun die frage, ist das möglich? wenn ja wie?
    oder ist es sogar möglich dass er sofort punkte im input macht?

    danke für antoworten :D

    5 Mal editiert, zuletzt von Frayzer (25. August 2008 um 13:30)

    • Offizieller Beitrag

    Meinst Du sowas:

    Spoiler anzeigen
    [autoit]


    #include<StaticConstants.au3>
    #include<EditConstants.au3>
    #include<String.au3>
    #include <GUIConstantsEx.au3>
    Global $inp, $out, $old

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate(" My GUI", 320, 120)
    $inp = GUICtrlCreateInput("", 10, 5, 300, 20, $ES_RIGHT)
    $out = GUICtrlCreateLabel('', 10, 40, 300, 20, $SS_RIGHT)
    GUISetState()
    AdlibEnable('_AddThousand', 100)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    AdlibDisable()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _AddThousand()
    Local $string = GUICtrlRead($inp)
    If $string <> $old Then
    GUICtrlSetData($out, _StringAddThousandsSep($string, '.', ','))
    $old = $string
    EndIf
    EndFunc

    [/autoit]
  • ja, genau!
    perfekt, big thx an dich :)

    kann man das auch so machen dass er das gleich im inputfeld anzeigt?

    • Offizieller Beitrag

    Nach etwas rumexperimentieren habe ich auch das geschafft:

    Spoiler anzeigen
    [autoit]


    #include<StaticConstants.au3>
    #include<EditConstants.au3>
    #include<String.au3>
    #include <GUIConstantsEx.au3>
    Global $inp, $out, $old

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate(" My GUI", 320, 120)
    $inp = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    AdlibEnable('_AddThousand', 20)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    AdlibDisable()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Func _AddThousand()
    Local $string = GUICtrlRead($inp)
    If $string <> $old Then
    $string = StringRegExpReplace($string, '[^0123456789,]', '')
    $pos = StringInStr($string, ',', 0, -1)
    $stringR = StringMid($string, $pos)
    $stringL = $string
    If $pos Then $stringL = StringLeft($string, $pos-1)
    $string = ''
    $len = StringLen($stringL)-1
    $count = Int($len/3)
    $rest = Mod($len,3)
    If $count > 0 Then
    For $i = 0 To $count-1
    $stringL = _StringInsert($stringL, '.', $i*4+$rest+1)
    Next
    EndIf
    GUICtrlSetData($inp, $stringL & $stringR)
    $old = $stringL & $stringR
    EndIf
    EndFunc

    [/autoit]
  • wow, spitze, einfach klasse ;)

    nur noch eine nervige frage:
    kann ich es so machen dass ich mehrere input felder habe und nicht jedes mal eine neue funktion machen muss?
    weil irgendwie dieses adlibenable ist etwas neu für mich :)

    • Offizieller Beitrag

    Hi,

    vertrauend auf die Funktion könnte es so aussehen:

    Spoiler anzeigen
    [autoit]

    #include <String.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $inp, $out, $old

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate(" My GUI", 320, 120)
    $inp = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp1 = GUICtrlCreateInput("", 10, 35, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp1 = GUICtrlCreateInput("", 10, 65, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $controlID = _LoWord($wParam)
    Local $string = GUICtrlRead($controlID)
    If $string <> $old Then
    $string = StringRegExpReplace($string, '[^0123456789,]', '')
    $pos = StringInStr($string, ',', 0, -1)
    $stringR = StringMid($string, $pos)
    $stringL = $string
    If $pos Then $stringL = StringLeft($string, $pos - 1)
    $string = ''
    $len = StringLen($stringL) - 1
    $count = Int($len / 3)
    $rest = Mod($len, 3)
    If $count > 0 Then
    For $i = 0 To $count - 1
    $stringL = _StringInsert($stringL, '.', $i * 4 + $rest + 1)
    Next
    EndIf
    GUICtrlSetData($controlID, $stringL & $stringR)
    $old = $stringL & $stringR
    EndIf
    EndFunc ;==>MY_WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit]

    Func _HiWord($x)
    Return BitShift($x, 16)
    EndFunc ;==>_HiWord

    [/autoit] [autoit][/autoit] [autoit]

    Func _LoWord($x)
    Return BitAND($x, 0xFFFF)
    EndFunc ;==>_LoWord

    [/autoit]

    Mega

    • Offizieller Beitrag

    Xeno, so ist es natürlich noch besser. :thumbup:
    Dann braucht man die $old-Variable gar nicht:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $inp1, $inp2, $inp3

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate(" My GUI", 320, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 35, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 65, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $pos, $stringL, $stringR, $len, $count, $rest
    Local $controlID = _LoWord($wParam)
    Local $string = GUICtrlRead($controlID)
    $string = StringRegExpReplace($string, '[^0123456789,]', '')
    $pos = StringInStr($string, ',', 0, -1)
    $stringR = StringMid($string, $pos)
    $stringL = $string
    If $pos Then $stringL = StringLeft($string, $pos - 1)
    $len = StringLen($stringL) - 1
    $count = Int($len / 3)
    $rest = Mod($len, 3)
    If $count > 0 Then
    For $i = 0 To $count - 1
    $stringL = _StringInsert($stringL, '.', $i * 4 + $rest + 1)
    Next
    EndIf
    GUICtrlSetData($controlID, $stringL & $stringR)
    EndFunc ;==>MY_WM_COMMAND

    [/autoit] [autoit][/autoit] [autoit]

    Func _HiWord($x)
    Return BitShift($x, 16)
    EndFunc ;==>_HiWord

    [/autoit] [autoit][/autoit] [autoit]

    Func _LoWord($x)
    Return BitAND($x, 0xFFFF)
    EndFunc ;==>_LoWord

    [/autoit]
  • oh man ey ihr seid einfahc nur derbe.
    super mann es funktioniert prima :D
    vielen vielen dank

  • so, habe dann doch nochmal ne frage dazu und zwar: wenn ich nun mehrere input felder habe aber nur in manchen möchte, dass die punkte kommen mit den zahlen (in den anderen soll text+zaheln stehen)
    würde das auch funktionieren? wenn ja wie?^^
    sry, aber ich weiss nicht wie ichs hinkriege

    Einmal editiert, zuletzt von Frayzer (23. August 2008 um 22:12)

    • Offizieller Beitrag

    Ich hab das Script mal entsprechend angepasst:

    Spoiler anzeigen
    [autoit]


    #include <String.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $inp1, $inp2, $inp3

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate(" My GUI", 320, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 35, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 65, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $pos, $stringL, $stringR, $len, $count, $rest
    Local $controlID = BitAND($wParam, 0xFFFF)
    Switch $controlID
    Case $inp2, $inp3
    Local $string = GUICtrlRead($controlID)
    $string = StringRegExpReplace($string, '[^0123456789,]', '')
    $pos = StringInStr($string, ',', 0, -1)
    $stringR = StringMid($string, $pos)
    $stringL = $string
    If $pos Then $stringL = StringLeft($string, $pos - 1)
    $len = StringLen($stringL) - 1
    $count = Int($len / 3)
    $rest = Mod($len, 3)
    If $count > 0 Then
    For $i = 0 To $count - 1
    $stringL = _StringInsert($stringL, '.', $i * 4 + $rest + 1)
    Next
    EndIf
    GUICtrlSetData($controlID, $stringL & $stringR)
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]

    So werden nur beim 2. und 3. Inputfeld die Tausenderpunkte gesetzt.