"Label" durch "Input" aktualisieren, aber wie?

  • Hallo wieder,

    folgendes, ich habe ein GUI mit "Input Box". Den Text, den ich eintippe, möchte ich gleichzeitig in einem "Label" anzeigen. D. h. in gewissen Zeitabständen, z.B. 10ms, aktualisieren. Weiss jemand wie das geht?

    Einmal editiert, zuletzt von m-obi (26. Dezember 2008 um 00:04)

    • Offizieller Beitrag

    Inputbox mit GuiCtrlRead auslesen , Label mit GuiCtrlSetData die Daten setzen. Das ganze Würde ich mit AdlibEnable machen .Schau dir mal die Hilfe von den 3 Befehlen an . Und als Abfragezeitraum würde ich nicht gerade alles 10 ms wählen, da hat der Proz nur noch mit dem lesen der Inputbox und schreiben des Labels zu tun .

    Edit hier ein Beispiel mit GuiOnEvent Mode und AdlibEnable::

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Global $Inhalt =""
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 501, 244, 193, 125)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Label1 = GUICtrlCreateLabel("Gib deinen Text ein :", 32, 24, 102, 17)
    $Input1 = GUICtrlCreateInput("", 32, 48, 121, 21)
    GUICtrlSetOnEvent(-1, "Input1Change")
    $Group1 = GUICtrlCreateGroup("Hier kommt dein Text ", 32, 96, 313, 65)
    $Label2 = GUICtrlCreateLabel("", 40, 120, 180, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    AdlibEnable("Update",100)

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

    While 1
    Sleep(100)
    WEnd

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

    Func Form1Close()
    exit
    EndFunc

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

    Func Input1Change()
    GuiCtrlSetData($Label2,GuiCtrlRead($Input1))
    EndFunc
    Func Update()
    Local $check
    $check = GuiCtrlRead($Input1)
    if $check <> $Inhalt then GuiCtrlSetData($Label2,$Check)
    $Inhalt = $check
    EndFunc

    [/autoit]


    Edit 2: Hier noch ein Beispiel ohne AdlibEnable

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Global $Inhalt =""
    Opt("GUIOnEventMode", 1)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 501, 244, 193, 125)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
    $Label1 = GUICtrlCreateLabel("Gib deinen Text ein :", 32, 24, 102, 17)
    $Input1 = GUICtrlCreateInput("", 32, 48, 121, 21)
    GUICtrlSetOnEvent(-1, "Input1Change")
    $Group1 = GUICtrlCreateGroup("Hier kommt dein Text ", 32, 96, 313, 65)
    $Label2 = GUICtrlCreateLabel("", 40, 120, 180, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    Sleep(100)
    $check = GuiCtrlRead($Input1)
    if $check <> $Inhalt then GuiCtrlSetData($Label2,$Check)
    $Inhalt = $check
    WEnd

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

    Func Form1Close()
    exit
    EndFunc

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

    Func Input1Change()
    GuiCtrlSetData($Label2,GuiCtrlRead($Input1))
    EndFunc

    [/autoit]


    Edit3: Hier noch ein letztes Beispiel mit GuiGetMsg abfrage

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    Global $Inhalt = ""
    #Region ### START Koda GUI section ### Form=
    $Form1_1 = GUICreate("Form1", 494, 211, 194, 126)
    $Label1 = GUICtrlCreateLabel("Gib deinen Text ein :", 32, 24, 102, 17)
    $Input1 = GUICtrlCreateInput("", 32, 48, 121, 21)
    $Group1 = GUICtrlCreateGroup("Hier kommt dein Text", 32, 96, 313, 65)
    $Label2 = GUICtrlCreateLabel("", 40, 120, 180, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    $check = GuiCtrlRead($Input1)
    if $check <> $Inhalt then GuiCtrlSetData($Label2,$Check)
    $Inhalt = $check
    WEnd

    [/autoit]
  • Inputbox mit GuiCtrlRead auslesen , Label mit GuiCtrlSetData

    Wo steht das was von GUICtrlGetData ^^.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $buffer = ''

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

    $Form1 = GUICreate("test", 140, 54, 489, 421)
    $Input1 = GUICtrlCreateInput("", 8, 8, 121, 21)
    $Label1 = GUICtrlCreateLabel("", 8, 32, 100, 100)
    GUISetState(@SW_SHOW)

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

    While 1
    If $buffer <> GUICtrlRead($Input1) Then GUICtrlSetData($Label1, GUICtrlRead($Input1))

    $buffer = GUICtrlRead($Input1)

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Geht auch noch auf tausend andere Möglichkeiten (wie Raupi gemeint hat mit Adlibenable, wenn es darum geht gleichzeitig noch andere Sachen auszuführen, aber mit WMCommand gehts auch.)

    • Offizieller Beitrag

    anno2008 er hat schon recht, hatte erst GuiCtrlGetData geschrieben , hab es aber editiert .
    @m-obi siehe meine 1. Post. Da hab ich en Beispiel reineditiert.

  • ok das kommt davon, wenn man vor dem Edit postet, tja ..

    nun hab ich noch eine frage, wozu brauche ich die Includes:

    [autoit]

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

    [/autoit]
    • Offizieller Beitrag

    Die wurden von Koda automatisch eingefügt .Brauchst eigentlich nur

    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit]


    Habe meiner 1. Post noch 2 Beispiele angefügt .

  • ok jetzt funktioniert es, hab das Beispiel von anno2008 genommen, funzt super.

    Hier mein vollständiger Code:

    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon

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

    Global $buffer = ''

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

    GUICreate("ASCII-Zeichen in Dezimal", 280, 120, -1, -1)
    GUICtrlCreateLabel("ASCII-Zeichen:", 80, 20)
    $input = GUICtrlCreateInput("", 160, 17, 20)
    GUICtrlCreateLabel("Dezimal:", 80, 50)
    $label = GUICtrlCreateLabel("", 160, 50, 50)
    $exitbutton = GUICtrlCreateButton("Exit", 65, 85, 150, 20)
    GUISetState (@SW_SHOW)

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

    While 1
    If $buffer <> GUICtrlRead($input) Then GUICtrlSetData($label, Asc(GUICtrlRead($input)))

    $buffer = GUICtrlRead($input)

    $msg = GUIGetMsg()

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $exitbutton
    ExitLoop
    EndSelect
    WEnd

    [/autoit]

    Funktion ist glaub ich selbsterklärend. Zu einem eingegebenden ASCII-Zeichen wird seine Dezimalzahl angegeben.

    Für Verbesserungsvorschläge bin ich jederzeit offen.

    • Offizieller Beitrag

    Dein Prog hat ein Fehler. Das Label wird nicht richtig angezeigt und es wird nach eingabe von mehr als 1 Zeichen der Dezimalwert nicht richtig angezeigt.
    Hier mal ein Verbesserungvorschlag :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon

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

    Global $buffer = ''

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

    GUICreate("ASCII-Zeichen in Dezimal", 280, 160, -1, -1)
    GUICtrlCreateLabel("ASCII-Zeichen:", 80, 20)
    $input = GUICtrlCreateInput("", 160, 17, 20)
    GUICtrlSetLimit(-1, 1)
    GUICtrlCreateLabel("ASCII :", 80, 50)
    $label1 = GUICtrlCreateLabel("", 160, 50, 50, 17)
    GUICtrlCreateLabel("Dezimal:", 80, 80)
    $label2 = GUICtrlCreateLabel("", 160, 80, 50, 17)
    $exitbutton = GUICtrlCreateButton("Exit", 65, 115, 150, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    If GUICtrlRead($input) > "" Then
    GUICtrlSetData($label1, GUICtrlRead($input))
    GUICtrlSetData($label2, Asc(GUICtrlRead($input)))
    GUICtrlSetData($input, "")
    EndIf

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

    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $exitbutton
    ExitLoop
    EndSelect
    WEnd

    [/autoit]


    oder die Version :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon

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

    Global $buffer = ''

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

    GUICreate("ASCII-Zeichen in Dezimal", 280, 120, -1, -1)
    GUICtrlCreateLabel("ASCII-Zeichen:", 80, 20)
    $input = GUICtrlCreateInput("", 160, 17, 13)
    GUICtrlSetLimit(-1, 2)
    GUICtrlCreateLabel("Dezimal:", 80, 50)
    $label = GUICtrlCreateLabel("", 160, 50, 50, 17)
    $exitbutton = GUICtrlCreateButton("Exit", 65, 85, 150, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    If $buffer <> GUICtrlRead($input) Then
    $buffer = StringRight(GUICtrlRead($input), 1)
    GUICtrlSetData($label, Asc($buffer))
    GUICtrlSetData($input, $buffer)
    EndIf

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

    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $exitbutton
    ExitLoop
    EndSelect
    WEnd

    [/autoit]
  • also bei mir wird das Label richtig angezeigt, und das mit dem Eingeben wollt ich noch ändern, das man nur ein Zeichen eingeben kann, aber ich weiß nur noch nicht wie. Beschreib mal deine Fehler ein bissl genauer bitte.

    • Offizieller Beitrag

    Probier mal die 2 Beispiele aus und dann weißt du wie das geht.

  • ok sry hab grade, hab das mit dem Limit gemacht, funzt jetzt. aber deine Fehler mit dem Label passiert bei mir trotzdem nicht. achja und wieso hast du bei deiner 2. version

    [autoit]

    GUICtrlSetLimit(-1, 2)

    [/autoit]


    also warum die 2? Obwohl du später in der If-Anweisung, doch nur ein Zeichen anzeigen lässt mit diesen StringRight?

    • Offizieller Beitrag

    Wie du vielleicht gesen hast, hat die 1. Version noch den Fehler das die Taste die du gerade gedrückt hast nicht in der Input erscheint. In der 2. Version Wird es richtig angezeigt und deshalb brauch ich nicht mehr das 2. Label habe dir mal ein Komment in das Script eingebaut . Das mit dem Anzeigefehler des Labels hat was mit meinr Grafikeinstelllung zu tun. Mach dir da mal keinen Kopf drum .

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon

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

    Global $buffer = ''

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

    GUICreate("ASCII-Zeichen in Dezimal", 280, 120, -1, -1)
    GUICtrlCreateLabel("ASCII-Zeichen:", 80, 20)
    $input = GUICtrlCreateInput("", 160, 17, 13)
    GUICtrlSetLimit(-1, 2);voheriges Control anwählen, Eingabelimit 2 Zeichen
    GUICtrlCreateLabel("Dezimal:", 80, 50)
    $label = GUICtrlCreateLabel("", 160, 50, 50, 17)
    $exitbutton = GUICtrlCreateButton("Exit", 65, 85, 150, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    If $buffer <> GUICtrlRead($input) Then
    $buffer = StringRight(GUICtrlRead($input), 1); 1 Zeichen von rechts lesen aus $Input in dei Var $Buffer
    GUICtrlSetData($label, Asc($buffer))
    GUICtrlSetData($input, $buffer); Input mit letzten Zeichen füllen damit das letzte Zeichen wieder angezeigt .
    EndIf

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

    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE or $msg = $exitbutton
    ExitLoop
    EndSelect
    WEnd

    [/autoit]


    GuiCtrlSetLimit steht auf den Wert 2 damit nachdem ich in die Inputline das letzte Zeichen eingefügt habe noch 1 Zeichen platz hat .
    Kannst ja mal den Wert auf 1 setzen dann weißt du warum .

  • ok hab es jetzt kapiert, damit ich nicht nach jeder Eingabe eines Zeichens, diese nicht immer Löschen muss, für ein neus Zeichen....macht sinn. Danke für deine Erklärung. Jetzt funzt es aber richtig richtig

    • Offizieller Beitrag

    Wenn das alles war. Kannst du das Thema als gelöst markieren.

  • ich hab noch einen klitzekleinen Fehler gefunden, aber der ist verkraftbar. Unzwar wenn du viele Tasten hintereinander drückst, dann kommt er nicht hinterher und schreibt zwei Zeichen und dann musste nämlich Backspace drücken.

    EDIT: Hab den Fehler gefunden, hab vergessen eine Zeile zu löschen. Dann ist das Thema gelöst, gute Nacht.

    • Offizieller Beitrag

    Ich denk das ist ja auch nicht der Sinn deines Progs wilde Tastendrückerei zu verarbeiten. Autoit ist zu langsam solche rumhackerei zu verarbeiten. Oder vielmehr wird dein Proz nicht schnell genug sein. Hab des eben getestet. Bei Quadcore kommt der Fehler net :rock:

  • hab auch noch meinen Post editiert, hatte den Fehler gefunden. Bei mir läuft es jetzt auch super.

    hier auch nochmal der fertige Code:

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=icon1.ico
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstants.au3>

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

    Global $buffer = ''

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

    GUICreate("ASCII-Zeichen in Dezimal", 280, 120, -1, -1)
    GUICtrlCreateLabel("ASCII-Zeichen:", 80, 20)
    $input = GUICtrlCreateInput("", 160, 17, 20)
    GUICtrlSetLimit(-1, 2)
    GUICtrlCreateLabel("Dezimal:", 80, 50)
    $label = GUICtrlCreateLabel("", 160, 50, 50, 17)
    $exitbutton = GUICtrlCreateButton("Exit", 65, 85, 150, 20)
    GUISetState(@SW_SHOW)

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

    While 1
    If $buffer <> GUICtrlRead($input) Then
    $buffer = StringRight(GUICtrlRead($input), 1)
    GUICtrlSetData($label, Asc($buffer))
    GUICtrlSetData($input, $buffer)
    EndIf

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

    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $exitbutton
    ExitLoop
    EndSelect
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von m-obi (26. Dezember 2008 um 13:11)