Zählen während der Eingabe

  • Moin Moin.

    Also ich habe da mal eine Frage bezüglich des Inputfeldes.

    Wie zähle ich während der Eingabe die Anzahl der eingegebenen Zahlen / Buchstaben / Zeichen?

    Das war es schon wieder.

    LG,
    Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Meinst du alles zusammenzählen oder getrennt nach Zahlen, Buchstaben, ...???

    Habe mal alles zusammengezählt

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    $len_1_alt = 0

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

    GUICreate(" My GUI input acceptfile", 320, 120)
    $file = GUICtrlCreateInput("", 10, 5, 300, 20)
    $btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)
    $label = GUICtrlCreateLabel("", 10, 50, 50)

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

    GUISetState()

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

    $msg = 0
    While $msg <> $GUI_EVENT_CLOSE
    $msg = GUIGetMsg()
    Select
    Case $msg = $btn
    ExitLoop
    EndSelect

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

    $len_1 = StringLen(GUICtrlRead($file))
    If $len_1_alt <> $len_1 Then
    GUICtrlSetData($label, $len_1)
    $len_1_alt = $len_1
    EndIf
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Oder so:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Global $inp1

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

    GUICreate(" My GUI", 320, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    ToolTip(StringLen(GUICtrlRead($inp1)))
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    If BitAND($wParam, 0xFFFF) = $inp1 Then ToolTip(StringLen(GUICtrlRead($inp1)))
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • Hi,
    weiß einer, ob meine oder Oscars Version besser bzw. schneller ist?

    Was bedeutet bei Oscars Variante "0xFFFF" ?(

  • Also ich finde beide Versionen haben etwas !!!

    Beide arbeiten fehlerfrei bei mir und welche schneller ist? Ich will dazu mal sagen, wenn Frau sehr schnell an der Tastatur ist, dann kann auch mal eine Anzeige nicht hinterher kommen. Nein, Spaß bei Seite. Also, es war Spaß! Ich kann gar kein Unterschied sehen bzw. feststellen.
    Da stellt sich mir die Frage, wie soll man das denn feststellen können? Also mit beiden Versionen den gleichen Text abtippen, bringt gar nicht? Doch, genauso kann man es messen.
    Jungs, bleibt ruhig, ich es erkläre es euch. ;) Oder sagen wir besser, ich erkläre Euch meine Gedanken die ich dann umgesetzt habe.
    Sicherlich wollt ihr nämlich gerade schreiben, das man nie den gleichen Text in der gleichen Zeit abschreiben kann. Das habe ich mir auch gedacht, aber im Kopf nach einer Lösung gesucht. Eine Lösung, die sogar vor Gericht stand haben würde. Ich habe sie gefunden. Ich tippe einmal einen Text von 150 Zeichen aus einen Buch ab. Okay es ware bei mir die TV Zeitung. ;) Das ganze habe ich mit dem Macrorecorder aufgezeichnet. Dann das erste Script seine Arbeit machen lassen. Das erste Tool startete, öffnete der Script, startete es, schrieb 150 Zeichen in das Inputfeld, und so weiter. Das gleiche nochmals mit dem zweiten Script.
    Und was war das Ergebnis ? Nun, an PC's getestet und unterschiedliche Sieger. 1x das erste Script, 2x das zweite Script. Das ist jetzt das, was ich nicht verstehe?

    Kann mir jemand das erklären?

    LG,
    Alina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Tweaky: Wenn man in einem LONGWORD ($wParam) zwei Parameter "einbettet", dann kann man mit BitAND($wParam, 0xFFFF) das LOW WORD und mit BitAND($wParam, 0xFFFF0000) das HIGH WORD ansprechen. Die jeweils anderen Bits werden ausgeblendet. Im Falle von WM_COMMAND befindet sich im LOW WORD die Control-ID der letzten User-Aktion.

    Edit: Man kann mein Beispiel auch noch auf mehrere Inputs ausbauen:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    GUICreate(" My GUI", 350, 120)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 25, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 45, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $label1 = GUICtrlCreateLabel("0", 320, 5, 30, 20)
    $label2 = GUICtrlCreateLabel("0", 320, 25, 30, 20)
    $label3 = GUICtrlCreateLabel("0", 320, 45, 30, 20)

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

    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)
    Switch BitAND($wParam, 0xFFFF)
    Case $inp1
    GUICtrlSetData($label1, StringLen(GUICtrlRead($inp1)))
    Case $inp2
    GUICtrlSetData($label2, StringLen(GUICtrlRead($inp2)))
    Case $inp3
    GUICtrlSetData($label3, StringLen(GUICtrlRead($inp3)))
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]
  • AHH Oscar DANKE DANKE DANKE :D :D :D

    Auf so eine Erkärung habe ich schon so lange gewartet :) Jetzt kapier ich erstmal das prinzip :D Davor habe ich es einfach nur Angewandt, jetzt versteh ich es auch *juhu* :D
    Jetzt noch eine kleine Frage, z.b. bei ner Combobox kann man ja auch noch ne "aktion" abfragen z.b. dropdown scroll eingabe usw usw, In den ganzen beispielscripten stand das dann immer nur so:

    Spoiler anzeigen
    [autoit]

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    $aktion = BitAND($wParam, 16) ;hiword
    Switch BitAND($wParam, 0xFFFF)
    Case $inp1
    Switch $aktion
    Case $CBN_DROPDOWN
    GUICtrlSetData($label1, StringLen(GUICtrlRead($inp1)))
    EndSwitch
    Case $inp2
    GUICtrlSetData($label2, StringLen(GUICtrlRead($inp2)))
    Case $inp3
    GUICtrlSetData($label3, StringLen(GUICtrlRead($inp3)))
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]

    Wo wird denn diese Variable ($CBN_DROPDOWN) definiert bzw. gibt es eine Liste was für "aktionen" es bei bestimmten GUICtrl sachen gibt? z.b. für checkboxen, inputs usw usw
    Ich hab es soweit verstanden das das HIWORD wohl die Aktion ist, ist das überall so?
    desweiteren kann man eigentlich überall noch sowas finden:
    If Not IsHWnd($hCombo) Then $hWndCombo = GUICtrlGetHandle($hCombo)
    Bei mir hat das sonst auch nie funktioniert, aber was bringt das?

    Tweaky & Lina
    Also ich habe da ein script in dem es mehr als nur eine Input box gibt, genauer gesagt 200 x 16 + nochn paar :D :O Tjoar und da hat sich der WM_COMMAND als sehr viel schneller erwiesen :). Weil bei dem anderen Prinzip läuft ja quasi die ganze zeit eine schleife und prüft ob das Input focused ist oder nicht...

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

    4 Mal editiert, zuletzt von FireFlyer (27. Oktober 2008 um 08:17)

  • da dein Windows im Hintergrund eine ganze Menge tut - und da wahrscheinlich noch einige "andere Applikationen" offen sind, ist es ganz normal das du immer verschiedene Ergebnisse bekommst (selbst wenn beide Programme "gleich schnell" sind)

    kompilier doch einfach 10 mal hintereinander das gleiche Skript oder lass eine komplexe Schleife laufen - und guck dir die Zeit in der Cmdline an - die ist immer anders ...

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

    • Offizieller Beitrag

    FireFlyer: In dem Fall musst Du erst das HIWORD in den unteren Bereich "shiften", um es dann mit $CBN_DROPDOWN zu vergleichen. Oder um es mit meinem Beispielscript zu erklären:

    Spoiler anzeigen
    [autoit]


    #include<ComboConstants.au3>
    #include<EditConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<WindowsConstants.au3>

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

    Global $count
    GUICreate(" My GUI", 350, 180)
    $inp1 = GUICtrlCreateInput("", 10, 5, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp2 = GUICtrlCreateInput("", 10, 25, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $inp3 = GUICtrlCreateInput("", 10, 45, 300, 20, BitOR($ES_AUTOHSCROLL, $ES_RIGHT))
    $combo = GUICtrlCreateCombo("item1", 10, 100, 80, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "item2|item3", "item3")

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

    $label1 = GUICtrlCreateLabel("0", 320, 5, 30, 20)
    $label2 = GUICtrlCreateLabel("0", 320, 25, 30, 20)
    $label3 = GUICtrlCreateLabel("0", 320, 45, 30, 20)

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

    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    If BitShift($wParam, 16) = $CBN_DROPDOWN Then
    $count += 1
    ToolTip($count & ' ' & GUICtrlRead($combo))
    EndIf
    Switch BitAND($wParam, 0xFFFF)
    Case $inp1
    GUICtrlSetData($label1, StringLen(GUICtrlRead($inp1)))
    Case $inp2
    GUICtrlSetData($label2, StringLen(GUICtrlRead($inp2)))
    Case $inp3
    GUICtrlSetData($label3, StringLen(GUICtrlRead($inp3)))
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]

    Ob es eine Liste gibt, kann ich nicht sagen. Entzieht sich meiner Kenntnis, aber auf den msdn-Seiten (msdn.microsoft.com) findet man eine ganze Menge dazu. Google ist auch immer wieder Dein Freund. ;)

    Bei "IsHWnd" wird geprüft, ob die Variable ein Handle enthält. Wenn nicht wird mit GUICtrlGetHandle das Handle der Combobox geholt und der Variablen zugewiesen. Das ist oft bei den ganzen UDFs (beginnen mit einem Unterstrich) nötig. Die funktionieren oft nur, wenn das Handle angegeben wird. Die "normalen" Befehle geben ja immer "nur" eine Control-ID zurück. Im Gegensatz zu den meisten UDFs reicht denen die ID aber auch aus.

  • okay... ja auf msdn hatte ich auch schon geschaut (in letzter zeit treibe ich mich da oft rum :rolleyes: ) Aber irgendwie hatte ich nix zu diesen variablen gefunden aber mir ist da grade son gedanke gekommen :)

    Spoiler anzeigen
    [autoit]

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Switch BitAND($wParam, 0xFFFF)
    Case $inp1
    ConsoleWrite(BitShift($wParam, 16)&@LF)
    EndSwitch
    EndFunc

    [/autoit]

    Und dann mal gucken und sich selbst ne liste erstellen, funktioniert sowas? Also ich meine wird da dann irgendein wert (ich hab keinerlei schimmer was für ein wert^^) in die console geschrieben wenn man eine bestimmte aktion ausführt? Also ich nehme jetzt mal das Input:
    Wenn man reinklickt (focused) kommt dann z.b. der wert 1
    Wenn man schreibt bzw. den inhalt ändert 2 usw usw?
    Klar dass das jetzt nich 1 & 2 sind sondern was anderes aber so in der art halt?

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Zitat

    welcher Wert wann wo angezeigt wird, finde ich zu mühsam

    Naja das WO ist schonmal einfach :D: da wo du ihn ausgiebst *sichinsfäustchenlacht* :rofl:

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D