Ganz blöde Frage! Habe eine Standard Infobox und will den OK Button im case abfragen! Cancel macht er! OK macht er nicht? Was mache ich da falsch?
Inputbox OK Button gibt keinen Text zurück?
-
BlutigerAnfänger -
12. August 2016 um 11:13 -
Erledigt
-
-
Das Skript macht was du sagst, es geht nach dem Drücken des OK-Buttons in den case Zweig 0 (lag ja kein Fehler vor).
-
wie kann ich dann denn OK Button ansprechen?
-
Edit: Explizit? Garnicht. Aber wenn kein Fehler kommt muss er gedrückt worden sein.
In der Hilfe steht:
1 = The Cancel button was pushed.
2 = The Timeout time was reached.
3 =
The InputBox failed to open. This is usually caused by bad arguments.
4 = The
InputBox cannot be displayed on any monitor.
5 = Invalid parameters width
without height or left without top.Ok hat keinen Errorcode, sondern ist immer, wenn @error=0 ist.
Wenn ichs richtig gedeutet habe dürfte das hier das sein, was du haben willst:
AutoIt
Alles anzeigen#include<Array.au3> Global $GRetoure[20][2] ScanPZN($GRetoure) Exit Func ScanPZN(ByRef $arGRetoure) local $width=400,$height=105 $hGui=GUICreate("Erfassungsmaske",$width,$height) GUICtrlCreateLabel("Tippen Sie die PZN ein und drücken Sie auf OK oder scannen Sie die Artikel ab. Korrekturen können später vorgenommen werden!",5,5,$width-10,35) $inputNumber=GUICtrlCreateInput("",5,$height-65,$width-10,25) GUICtrlSendMsg(-1, 0x1501, 0, "Menge * PZN") $buttonOK=GUICtrlCreateButton("OK",5,$height-35,($width-10)/2) $buttonCancel=GUICtrlCreateButton("Fertig",10+($width-15)/2,$height-35,($width-15)/2) GUISetState() local $count=0 while 1 $msg=GUIGetMsg() Switch $msg Case $buttonOK $arRes=StringRegExp(GUICtrlRead($inputNumber),"(^((?:(?:[0-9]+)(?:-*))+)$)|(?:^([0-9]+)(?:\W*?)\*(?:\W*?)((?:(?:[0-9]+)(?:-*))+)$)",3) ;_ArrayDisplay($arRes) if UBound($arRes)=4 then $arGRetoure[$count][0]=int($arRes[2]) $arGRetoure[$count][1]=int(StringReplace($arRes[3], "-","")) Elseif UBound($arRes)=2 then $arGRetoure[$count][0]=1 $arGRetoure[$count][1]=int(StringReplace($arRes[0], "-", "")) Else MsgBox(16,"Error","Eingabe fehlerhaft!") EndIf _ArrayDisplay($arGRetoure) $count+=1 if $count=UBound($arGRetoure) then ReDim $arGRetoure[UBound($arGRetoure)+20][2] endif Case $buttonCancel ExitLoop Case -3 ExitLoop EndSwitch WEnd ReDim $arGRetoure[$count][2] _ArrayDisplay($arGRetoure) EndFunc
(Code in den Code Tags ist angenehmer! :))
MfG Kanashius
-
Wow! Dein StringRegExp ist der Hammer! Ich kämpfe hier immer!
Ich habe hier nur ein Handhabungsproblem! bei der Inputbox wurde nach Scan bzw. Eingabe mit Return der Datensatz übernommen! hier bleibt er stehen und erst durch OK wird er übernommen. Das wollte ich vermeiden!
Weil es sehr aufhält.ich hatte den OK Button als Rücksprung zur weiteren Verwendung der Daten gedacht! und Abbruch zur Stornierung!
-
Wie sieht denn eine PZN aus?
Gib mal bitte paar Beispiele. -
mit GuiSetAccelerators kannst du einen Button erstellen, der gedrückt wird, wenn eine Taste gedrückt wird.
AutoIt
Alles anzeigen#include<Array.au3> Global $GRetoure[20][2] ScanPZN($GRetoure) Exit Func ScanPZN(ByRef $arGRetoure) local $width=400,$height=105 $hGui=GUICreate("Erfassungsmaske",$width,$height) GUICtrlCreateLabel("Tippen Sie die PZN ein und drücken Sie auf OK oder scannen Sie die Artikel ab. Korrekturen können später vorgenommen werden!",5,5,$width-10,35) $inputNumber=GUICtrlCreateInput("",5,$height-65,$width-10,25) GUICtrlSendMsg(-1, 0x1501, 0, "Menge * PZN") $buttonOK=GUICtrlCreateButton("OK",5,$height-35,($width-10)/2) $buttonCancel=GUICtrlCreateButton("Fertig",10+($width-15)/2,$height-35,($width-15)/2) Local $aAccelKeys[1][2] = [["{ENTER}", $buttonOK]] GUISetAccelerators($aAccelKeys) GUISetState() local $count=0 while 1 $msg=GUIGetMsg() Switch $msg Case $buttonOK $arRes=StringRegExp(GUICtrlRead($inputNumber),"(^((?:(?:[0-9]+)(?:-*))+)$)|(?:^([0-9]+)(?:\W*?)\*(?:\W*?)((?:(?:[0-9]+)(?:-*))+)$)",3) ;_ArrayDisplay($arRes) if UBound($arRes)=4 then $arGRetoure[$count][0]=int($arRes[2]) $arGRetoure[$count][1]=int(StringReplace($arRes[3], "-","")) Elseif UBound($arRes)=2 then $arGRetoure[$count][0]=1 $arGRetoure[$count][1]=int(StringReplace($arRes[0], "-", "")) Else MsgBox(16,"Error","Eingabe fehlerhaft!") EndIf _ArrayDisplay($arGRetoure) $count+=1 if $count=UBound($arGRetoure) then ReDim $arGRetoure[UBound($arGRetoure)+20][2] endif Case $buttonCancel ExitLoop Case -3 ExitLoop EndSwitch WEnd ReDim $arGRetoure[$count][2] _ArrayDisplay($arGRetoure) EndFunc
-
Wenn ich es händisch mache! Wird es wohl funktionieren! Dann drücke ich die <enter> Taste! Wenn ich die PZN scanne! Wird automatisch ein Zeilenvorschub und CReturn gesendet! Da wird keine Taste gedrückt!
Das macht übrigens der Scanner! Die PZN ist nur eine Zahlenfolge! Sowie ein EAN Code auf den Lebensmittelpackungen!
-
Wird automatisch ein Zeilenvorschub und CReturn gesendet!
Dann müsste man doch nur das <Enter> durch ein Zeilenvorschub(@lf) ersetzen oder?
Probier es mal so:
AutoIt: Script von Kanashius (leicht verändert)
Alles anzeigen#include<Array.au3> Global $GRetoure[20][2] ScanPZN($GRetoure) Exit Func ScanPZN(ByRef $arGRetoure) local $width=400,$height=105 $hGui=GUICreate("Erfassungsmaske",$width,$height) GUICtrlCreateLabel("Tippen Sie die PZN ein und drücken Sie auf OK oder scannen Sie die Artikel ab. Korrekturen können später vorgenommen werden!",5,5,$width-10,35) $inputNumber=GUICtrlCreateInput("",5,$height-65,$width-10,25) GUICtrlSendMsg(-1, 0x1501, 0, "Menge * PZN") $buttonOK=GUICtrlCreateButton("OK",5,$height-35,($width-10)/2) $buttonCancel=GUICtrlCreateButton("Fertig",10+($width-15)/2,$height-35,($width-15)/2) Local $aAccelKeys[1][2] = [["{" & @lf &" }", $buttonOK]] GUISetAccelerators($aAccelKeys) GUISetState() local $count=0 while 1 $msg=GUIGetMsg() Switch $msg Case $buttonOK $arRes=StringRegExp(GUICtrlRead($inputNumber),"(^((?:(?:[0-9]+)(?:-*))+)$)|(?:^([0-9]+)(?:\W*?)\*(?:\W*?)((?:(?:[0-9]+)(?:-*))+)$)",3) ;_ArrayDisplay($arRes) if UBound($arRes)=4 then $arGRetoure[$count][0]=int($arRes[2]) $arGRetoure[$count][1]=int(StringReplace($arRes[3], "-","")) Elseif UBound($arRes)=2 then $arGRetoure[$count][0]=1 $arGRetoure[$count][1]=int(StringReplace($arRes[0], "-", "")) Else MsgBox(16,"Error","Eingabe fehlerhaft!") EndIf _ArrayDisplay($arGRetoure) $count+=1 if $count=UBound($arGRetoure) then ReDim $arGRetoure[UBound($arGRetoure)+20][2] endif Case $buttonCancel ExitLoop Case -3 ExitLoop EndSwitch WEnd ReDim $arGRetoure[$count][2] _ArrayDisplay($arGRetoure) EndFunc
-
Ich probiere es aus! Müsste so klappen!
Ist ja ein irres Teil geworden!Dank Dir
BlutigerAnfänger