In dem Screenshot hast du den kram in einem Case (GuiClose) hinter exit stehen. Der Quellcode kann also garnicht erreicht werden.
Gib uns doch den gesamten Sourcecode, dann kann man dir besser helfen
Beiträge von Kanashius
-
-
Du lädst java herunter und installierst es, dann kannst du die .jar mit doppelklick starten.
Im src-Ordner ist der Quellcode, damit könntest du selbst kompilieren, sachen ändern und gucken, wies umgesetzt wurde. -
Sieh dir mal GuiSetState($Button,$GUI_HIDE) an. Du musst noch GuiConstants inkludieren
-
Ich hab es jetzt fertig umgesetzt. Sollte das sein, was du haben möchtest.
Ich hab den Quelltext auch hinzugefügt, falls es dir hilft :).
Ich weiß ja nicht, ob du Java schon benutzt hast.Kannst ja schreiben, wie schnell es angezeigt wird :).
MfG Kanashius
-
Ich muss wissen, was rein soll (das muster muss in den daten erkennbar sein, muss also nicht die ganze datei sein.) und was raus soll, und so, dass ich weiß, wie die ausgabe entstehen soll
-
Wenns eine CSV ist, ja.
Wenns auf Geschwindigkeit ankommt würde ich aber Java nehmen. Ist dabei etwas schneller.
Kannst mir auch die Details geben, dann würd ich dir das mit Erklärung schreiben. Je nachdem, wie gut du bist -
aber trotzdem irgendwie perfide dass es in der MsgBox "abbrechen" und in der inputBox "cancel" heißt
Die Erklärung ist recht einfach. Die MsgBox ist von Windows und wird über DLLCalls erstellt und wird dann übergeben.
Die InputBox ist von AutoIt. Das ist eine Gui, die von AutoIt erstellt wird und deshalb die Beschriftung der AutoIt-Entwickler hat, welche Englisch nutzen. Die haben dabei nicht andere Sprachen bedacht -
Ah, Weitergeleitet. Von wo weitergeleitet. Wenn das über eine zwischenseite geht, wird diese geladen, ist fertig geladen ->ieloadwait sagt, es ist fertig. Und danach wird erst die andere geladen. Dann musst du die seite direkt aufrufen.
$_IESTATUS_NoMatch sagt nur, dass er keinen IE gefunden hat, an den er sich anhängen kann, und deshalb einen neuen startet.
-
Probier das mal:
AutoIt
Alles anzeigen#include <ie.au3> $oIE=_IECreate("about:blank",1) _IENavigate($oIE,"INTRANETADRESSE",0) $timer=TimerInit() _IELoadWait($oIE) if @error then msgbox(16,"Error","Errorcode: "&@error&@crlf&"1 ($_IEStatus_GeneralError) - General Error"&@crlf&"3 ($_IEStatus_InvalidDataType) - Invalid Data Type"&@crlf&"4 ($_IEStatus_InvalidObjectType) - Invalid Object Type" _ &@crlf&"6 ($_IEStatus_LoadWaitTimeout) - Load Wait Timeout"&@crlf&"8 ($_IEStatus_AccessIsDenied) - Access Is Denied"&@crlf&"9 ($_IEStatus_ClientDisconnected) - Client Disconnected ") _IEQuit($oIE) else $neededTime=TimerDiff($timer) _IEQuit($oIE) MsgBox(48,"Result","Needed Time: "&Round($neededTime/1000,2)) endif
So wird auf jedenfall nur das Laden gezählt. das öffnen des IE kostet ja auch Zeit.
Mit der 1 hinter der Adresse wird probiert an einen anderen IE zu attachen. Musst mal sehen, ob es klappt.MfG Kanashius
-
-
EDIT: Oder man geht einfach rückwärts durch das Array... Das vergess ich immer
AutoItFor $s = UBound($temp) - 1 To 0 Step -1 For $x = UBound($excludes) -1 To 0 Step -1 If $temp[$s] = $excludes[$x] Then ;wenn array $temp in $excluded liste dann _ArrayDelete($temp, $s) ; lösche element ; hier crashed es wenn die excludes komplett in $temp enthalten sind. Also das array komplett geleert wird
Das Problem findest du in dem _ArrayDelete. Was passiert, wenn alle gelöscht wurden und $temp keine Elemente mehr enthält? Die 2te Schleife kann da immernoch laufen.
AutoItFor $s = UBound($temp) - 1 To 0 Step -1 For $x = UBound($excludes) -1 To 0 Step -1 If $temp[$s] = $excludes[$x] Then ;wenn array $temp in $excluded liste dann _ArrayDelete($temp, $s) ; lösche element ; hier crashed es wenn die excludes komplett in $temp enthalten sind. Also das array komplett geleert wird $s-=1 ExitLoop EndIf Next Next
Durch das $s-=1 sorgst du dafür, dass keine Spalte ausgelassen wird und durch das ExitLoop wird der aktuelle Schleifendurchlauf beendet-> du kommst nicht in den Fall, dass das $ste Element gelöscht wurde, keine weiteren dahinter sind und das ArrayDelete später auf eine nicht existente Zeile zugreift.
_ArrayDelete in eine Schleife aufzurufen ist was performence angeht auch eine blöde Idee. Stattdessen einen sonst nicht vorhandenen Wert eintragen (z.b. -1) und später alle -1 löschen:AutoIt
Alles anzeigenlocal $deleteCount=0 For $s = UBound($temp) - 1 To 0 Step -1 For $x = UBound($excludes) -1 To 0 Step -1 If $temp[$s] = $excludes[$x] Then $temp[$s]=-1 $deleteCount+=1 ExitLoop EndIf Next Next for $i=0 to UBound($temp)-1 step 1 local $count while $i<UBound($temp)-1 and $temp[$i]=-1 $i+=1 $count+=1 WEnd if NOT $i<UBound($temp)-1 then ExitLoop local $tmp=$temp[$i] $temp[$i]=-1 $i-=$count $temp[$i]=$tmp next ReDim $temp[UBound($temp)-$deleteCount]
Spielt aber bei der geringen Array-Größe keine Rolle, schätz ich. Aber das $s-1 wird nicht benötigt, da erst am Ende gelöscht wird.
Bsp. deines Problems (-> entspricht $s):
0: "Wert1" 0: "Wert1"
1: "Wert2" 1: "Wert2"
2: "Wert3" 2: "Wert3"
->3: "Wert4" ;Hier löschen ==>3: "Wert5" ;und du läuft das $excludes weiter durch, löscht wieder und wieder, bis dort kein Eintrag mehr ist.
4: "Wert5" 4: "Wert6"
5: "Wert6"
Außerdem Überspringst du dadurch, dass du kein $s-1 machst, Werte. Die nächste For-Schleife von $temp sähe so aus:0: "Wert1"
1: "Wert2"
2: "Wert3"
3: "Wert5"
->4: "Wert6"
Auf "Wert5" wird nie die gesamte Schleife $excludes angewendet, da die for-Schleife nie dafür aufgerufen wird.Also immer Vorsicht mit _arraydelete. Ich benutze es NIE bei mehr als 1 Value die gelöscht werden soll, weil es 1.Imperformant ist und man 2. Auf den Index achten muss.
-
Soweit ich weiß sind Excel-Dateien eine Art ZIP-Datei. Vielleich musst du erst entpacken... Kann ja gut sein, dass dies Programm das intern macht...
Je nach kompression wird dort dann nichts gefunden. -
Du kannst es gefahrlos installieren. Der Virenscanner schlägt bei AutoIt-Scripten oft falsch an.
Im Zweifelsfall kannst du auch den Sorucecode herunterladen, durchsehen und selbst kompilieren.MfG Kanashius
-
-
Die UDF von mir macht die Listview editierbar. Da ist auch ein Beispiel bei.
-
-
Wenn ich das mit dem HTML aus dem "unbekannten, bösen" Forum von dir mache sieht es so aus:
Wenn das nicht gewünscht ist, wie genau soll es denn dann aussehen?
Verstehe nicht ganz, was du meinst.Wenn die Boxen Nebeneinander sollen probier mal das einzufügen:
MfG Kanashius -
-
-
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
-
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