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?
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?
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::
#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)
While 1
Sleep(100)
WEnd
Func Form1Close()
exit
EndFunc
Func Input1Change()
GuiCtrlSetData($Label2,GuiCtrlRead($Input1))
EndFunc
Func Update()
Local $check
$check = GuiCtrlRead($Input1)
if $check <> $Inhalt then GuiCtrlSetData($Label2,$Check)
$Inhalt = $check
EndFunc
Edit 2: Hier noch ein Beispiel ohne AdlibEnable
#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 ###
While 1
Sleep(100)
$check = GuiCtrlRead($Input1)
if $check <> $Inhalt then GuiCtrlSetData($Label2,$Check)
$Inhalt = $check
WEnd
Func Form1Close()
exit
EndFunc
Func Input1Change()
GuiCtrlSetData($Label2,GuiCtrlRead($Input1))
EndFunc
Edit3: Hier noch ein letztes Beispiel mit GuiGetMsg abfrage
#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 ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
$check = GuiCtrlRead($Input1)
if $check <> $Inhalt then GuiCtrlSetData($Label2,$Check)
$Inhalt = $check
WEnd
GuiCtrlGetData finde ich bei mir in der Hilfe nicht.
Inputbox mit GuiCtrlRead auslesen , Label mit GuiCtrlSetData
Wo steht das was von GUICtrlGetData ^^.
#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)
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
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.)
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>
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
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)
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
Funktion ist glaub ich selbsterklärend. Zu einem eingegebenden ASCII-Zeichen wird seine Dezimalzahl angegeben.
Für Verbesserungsvorschläge bin ich jederzeit offen.
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 :
#include <GUIConstants.au3>
#NoTrayIcon
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)
While 1
If GUICtrlRead($input) > "" Then
GUICtrlSetData($label1, GUICtrlRead($input))
GUICtrlSetData($label2, Asc(GUICtrlRead($input)))
GUICtrlSetData($input, "")
EndIf
$msg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $exitbutton
ExitLoop
EndSelect
WEnd
oder die Version :
#include <GUIConstants.au3>
#NoTrayIcon
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)
While 1
If $buffer <> GUICtrlRead($input) Then
$buffer = StringRight(GUICtrlRead($input), 1)
GUICtrlSetData($label, Asc($buffer))
GUICtrlSetData($input, $buffer)
EndIf
$msg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $exitbutton
ExitLoop
EndSelect
WEnd
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.
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?
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 .
#include <GUIConstants.au3>
#NoTrayIcon
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)
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
$msg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Select
Case $msg = $GUI_EVENT_CLOSE or $msg = $exitbutton
ExitLoop
EndSelect
WEnd
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
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.
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
hab auch noch meinen Post editiert, hatte den Fehler gefunden. Bei mir läuft es jetzt auch super.
hier auch nochmal der fertige Code:
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=icon1.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>
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)
While 1
If $buffer <> GUICtrlRead($input) Then
$buffer = StringRight(GUICtrlRead($input), 1)
GUICtrlSetData($label, Asc($buffer))
GUICtrlSetData($input, $buffer)
EndIf
$msg = GUIGetMsg()
[/autoit] [autoit][/autoit] [autoit]Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $exitbutton
ExitLoop
EndSelect
WEnd