1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Kanashius

Beiträge von Kanashius

  • Java-Seite Quelltext

    • Kanashius
    • 18. Februar 2021 um 15:39

    Ah, ich hatte nur geschaut, ob überhaupt quelltext ankommt.

    Die Seite wird mit JavaScript geladen und der IE unterstützt das scheinbar nicht mehr.

    Hab auf die schnelle auch nur ne adresse finden können, die ausschaut als wär sie nicht fix.

    Ich würde dir empfehlen, stattdessen den Quelltext der Releasenotes anzusehen und dort zu parsen:

    https://www.oracle.com/java/technolog…l-relnotes.html

    Dort sollte dann die erste h4 überschrift, in der JDK steht, die aktuelle (empfohlene) sein. (=>Build releases ignorieren)

    Zumindest wenn ich es richtig verstehe, dass du nur die empfohlene Versionsnummer haben möchtest.

  • Java-Seite Quelltext

    • Kanashius
    • 16. Februar 2021 um 19:42

    Bei mir funktioniert es.

    Falls du Windows 10 nutzt hilft das hier vielleicht: https://support.microsoft.com/de-de/topic/ve…43-d9427c42d60f

    Wenn ich mich gerade nicht irre hat der IE ja keinen support mehr. Vielleicht wird er jetzt nach und nach deaktiviert.

    Ich hab meine updates im moment pausiert, vllt. funktioniert es deshalb bei mir noch.

  • Viewlist Checkboxen, Array Container

    • Kanashius
    • 11. Februar 2021 um 19:39

    Hi :)

    Ich denke, das hier dürfte etwa das sein, was du haben möchtest:

    AutoIt
    #include <array.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    
    Global $iWidth=800, $iHeight=600
    Global $arCols=["Data","SIM","TYP","BS"]
    $hGui=GUICreate("???",$iWidth,$iHeight)
    $hDataListView=GUICtrlCreateListView(_arToString($arCols),5,5,$iWidth-10, $iHeight-40,BitOR($WS_BORDER,$LVS_SINGLESEL,$LVS_SHOWSELALWAYS), BitOr($LVS_EX_FULLROWSELECT,$LVS_EX_CHECKBOXES))
    For $i=0 to UBound($arCols)-1 step 1
        _GUICtrlListView_SetColumnWidth($hDataListView,$i,($iWidth-10)/UBound($arCols))
    Next
    $hButtonOpenNext=GUICtrlCreateButton("Open Next (from current selection)",5,$iHeight-30,$iWidth-10,25)
    
    GUISetState(@SW_SHOW, $hGui)
    
    _loadFileIntoListview("Test.bbdb")
    
    While 1
        $msg=GUIGetMsg()
        Switch $msg
            case -3
                exit
            case $hButtonOpenNext
                _openNext()
        EndSwitch
    WEnd
    
    Func _openNext()
        If NOT _selectNextChecked() Then return false
        local $sel=_GUICtrlListView_GetSelectedIndices($hDataListView,true)
        If UBound($sel)>1 Then
            If _GUICtrlListView_GetItemChecked($hDataListView,$sel[1]) Then
                ConsoleWrite("OPEN: "&_GUICtrlListView_GetItemTextArray($hDataListView,$sel[1])[1]&@crlf)
                ShellExecute("http://www.google.com?q="&_GUICtrlListView_GetItemTextArray($hDataListView,$sel[1])[1])
            EndIf
        EndIf
        return true
    EndFunc
    
    Func _selectNextChecked()
        local $iSize=_GUICtrlListView_GetItemCount($hDataListView)
        local $sel=_GUICtrlListView_GetSelectedIndices($hDataListView,true)
        local $iStart=UBound($sel)=1?-1:$sel[1]
        local $iDone=false
        for $i=$iStart+1 to $iSize-1 step 1
            If _GUICtrlListView_GetItemChecked($hDataListView,$i) Then
                _GUICtrlListView_SetItemSelected($hDataListView,$i,true,true)
                $iDone=true
                ExitLoop
            EndIf
        next
        If NOT $iDone Then
            _GUICtrlListView_SetItemSelected($hDataListView,0,true,true)
            return false
        EndIf
        return true
    EndFunc
    
    Func _loadFileIntoListview($sFile)
        local $arData=_getDataArrayFromFile($sFile), $sTmp
        For $i=0 to UBound($arData)-1 step 1
            GUICtrlCreateListViewItem(_arToString($arData, $i),$hDataListView)
        Next
    EndFunc
    
    Func _getDataArrayFromFile($sFile)
        local $arData=FileReadToArray($sFile)
        local $arResult[UBound($arData)][UBound($arCols)]
        local $count=0
        For $i=0 to UBound($arData)-1 step 1
            $arTmp=StringRegExp($arData[$i],"<data>(.*?)</data>=<SIM>(.*?)</SIM><TYP>(.*?)</TYP><BS>(.*?)</BS>",3)
            If @error Then
                ConsoleWrite("Error parsing line: """&$arData[$i]&""""&@crlf)
            Else
                For $j=0 to UBound($arResult,2)-1 step 1
                    $arResult[$count][$j]=$arTmp[$j]
                Next
                $count+=1
            EndIf
        Next
        ReDim $arResult[$count][UBound($arCols)]
        return $arResult
    EndFunc
    
    Func _arToString(Byref $arData, $iIndex=-1)
        local $iDim=UBound($arData,0)
        local $sTmp=""
        For $i=0 to UBound($arData,$iDim)-1 step 1
            If UBound($arData,0)=1 Then
                $sTmp&=$arData[$i]
            ElseIf UBound($arData,0)=2 Then
                $sTmp&=$arData[$iIndex][$i]
            EndIf
            If $i<UBound($arData,$iDim)-1 Then $sTmp&="|"
        Next
        return $sTmp
    EndFunc
    Alles anzeigen

    MfG Kanashius

  • Systemweit ermitteln, ob ein "(" per Tastatur eingegeben wurde - UNABHÄNGIG vom Tastaturlayout

    • Kanashius
    • 10. Februar 2021 um 15:57

    Y und z ist leider auch nicht überall gleich... Ich benutz US layout und da ist es vertauscht... Bei den beiden Zeichen merkt man auch oft, wenn sich programmierer keine Gedanken über layouts gemacht haben...

    Ich bin extra zum US-Layout gewechselt, weil Standartmäßig in vielen IDEs STRG+Z für undo und STRG+SHIFT+Z für redo genutzt wird. Und STRG+SHIFT+Z ist echt ungut im DE layout :)

  • Verhindern, dass Fenster Größe ändert bei Ziehen an Bildschirmrand

    • Kanashius
    • 6. November 2020 um 19:31

    Hier steht etwas von einem Event für WinProc (SC_MOVE), welches das verschieben verhindert, falls es nicht weitergegeben wird.

    https://stackoverflow.com/questions/9078…rom-being-moved

    Es gehört zum gleichen Typ, wie WM_NCLBUTTONDOWN, was du ja schon verarbeitest.

    Wenn man dann schaut, ob das Fesnter in eine der Ecken verschoben wird und dabei mehrere Pixel springt könnte man das verhindern.

    Ist aber zugegebenermaßen nicht die schönste Methode.

  • Verhindern, dass Fenster Größe ändert bei Ziehen an Bildschirmrand

    • Kanashius
    • 6. November 2020 um 15:07

    Ich würde die Minimale/Maximale größe des Fensters mit WM_GETMINMAXINFO begrenzen. Immer, wenn die Maus ziehend am Rand ist, einfach die Begrenzung dort setzen.

    Siehe https://www.autoitscript.com/forum/topic/14…sizes-of-a-gui/

  • Geheimnis "scripting.dictionary" AutoIt 3.3.14.5

    • Kanashius
    • 5. November 2020 um 21:07

    Ich hab das ganze mal auf _FileListToArrayRec umgeschrieben. Du bekommst jetzt ein 2Dimensionales Array mit den sortierten Dateien zurück.

    In dem Code steht auch, wie du den neuen Ordner vorher ausgeben kannst.

    Der zweite Parameter ist zum filtern der Extensions.

    Der dritte Parameter sorgt für das Hinzufügen der Extrainfos (TimeLastModified, TimeCreated, TimeLastAccessed, FileSize, FileSizeFormatted).

    AutoIt
    #include <File.au3>
    
    Global $sFileSelectFolder = FileSelectFolder("Verzeichnis auswählen", "c:\")
    If @error Then exit
    
    Local $arFiles = _getFiles($sFileSelectFolder, ".xls|.doc|.pdf|.jpg", BitOR(4, 16))
    ConsoleWrite(@CRLF & @CRLF)
    ConsoleWrite(UBound($arFiles) & " Dateien" & @CRLF)
    
    If Not @error Then
        local $sOldFolder=""
        For $i=0 to UBound($arFiles)-1 step 1 ; iterate all files
            If $arFiles[$i][0]<>$sOldFolder Then ; Print new folders
                $sOldFolder=$arFiles[$i][0]
                ConsoleWrite($arFiles[$i][0]&@CRLF)
            EndIf
            ConsoleWrite($arFiles[$i][0]&"\"&$arFiles[$i][1]&@CRLF) ; print file
        Next
    EndIf
    
    _ArrayDisplay($arFiles)
    
    ;sExtensions: All extensions seperated by | (example: .xls|.doc|.pdf|.jpg)
    ;iFileInformation: 0 Nothing, 1 TimeLastModified, 2 TimeCreated, 4 TimeAccesed, 8 Size, 16 ByteSuffixSize
    Func _getFiles($sFolder, $sAllowedExtension=".*", $iFileInformation = 0)
        local $arStoreInfo[5], $iStoreAmount=0, $sPattern="(?m)("&(($sAllowedExtension=".*")?(".*"):(StringReplace($sAllowedExtension,".","\.")))&")$"
        for $i=0 to UBound($arStoreInfo)-1 step 1
            $arStoreInfo[$i]=(BitAND($iFileInformation,2^$i)>0)?(true):(false)
            If $arStoreInfo[$i] Then $iStoreAmount+=1
        next
        local $arFiles=_FileListToArrayRec($sFolder, "*", 1, 1, 1, 2)
        if @error Then SetError(1,@extended,-1)
    
        local $arFilteredFiles[UBound($arFiles)][2+$iStoreAmount], $iCount=0, $iExtInfoCount=0
        local $sDrive, $sDir, $sFileName, $sExtension
        for $i=0 to UBound($arFiles)-1 step 1
            If StringRegExp($arFiles[$i], $sPattern, 0) Then
                _PathSplit($arFiles[$i], $sDrive, $sDir, $sFileName, $sExtension)
                $arFilteredFiles[$iCount][0]=StringTrimRight($sDrive&$sDir,1)
                $arFilteredFiles[$iCount][1]=$sFileName&$sExtension
                If $arStoreInfo[0] Then __addInformation($arFilteredFiles, $iCount, $iExtInfoCount, FileGetTime($arFiles[$i], 0, 1))
                If $arStoreInfo[1] Then __addInformation($arFilteredFiles, $iCount, $iExtInfoCount, FileGetTime($arFiles[$i], 1, 1))
                If $arStoreInfo[2] Then __addInformation($arFilteredFiles, $iCount, $iExtInfoCount, FileGetTime($arFiles[$i], 2, 1))
                If $arStoreInfo[3] Then __addInformation($arFilteredFiles, $iCount, $iExtInfoCount, FileGetSize($arFiles[$i]))
                If $arStoreInfo[4] Then __addInformation($arFilteredFiles, $iCount, $iExtInfoCount, __FileSize_ByteSuffix(FileGetSize($arFiles[$i])))
                $iExtInfoCount=0
                $iCount+=1
            EndIf
        next
        ReDim $arFilteredFiles[$iCount][UBound($arFilteredFiles,2)]
        return $arFilteredFiles
    EndFunc
    
    Func __addInformation( ByRef $array, $iIndex, ByRef $iCounter, $information)
        $array[$iIndex][2+$iCounter]=$information
        $iCounter+=1
    EndFunc
    
    Func __FileSize_ByteSuffix($iBytes)
        Local $iIndex = 0, $aArray = [' bytes', ' kB', ' MB', ' GB', ' TB', ' PB', ' EB', ' ZB', ' YB']
        While $iBytes > 1023
            $iIndex += 1
            $iBytes /= 1024
        WEnd
        Return Round($iBytes) & $aArray[$iIndex]
    EndFunc   ;==>__FileListToDict_ByteSuffix
    Alles anzeigen
  • Geheimnis "scripting.dictionary" AutoIt 3.3.14.5

    • Kanashius
    • 5. November 2020 um 12:03

    Nach dem Beispiel gehend würde ich sagen:

    Bei deiner Sortierung kommen Zahlen vor Buchstaben und Ordner vor Dateien, deshalb sind die Dateien bei dir hinter den Ordnern.

    Dementsprechend musst du umsortieren.

    Dictionaries hab ich aber auch noch nicht genutzt, deshalb kann ich dir da nicht weiterhelfen...

  • Im Internet jumpen

    • Kanashius
    • 3. November 2020 um 12:27

    Mouseover wird meistens mit Javascript geladen (manchmal auch css). Wenn du die Webseite im Browser offen hast einfach mal einen rechtsklick auf das element machen, bei dem der Text erscheint und auf "Element untersuchen" klicken. Dort sollte dann so etwas erscheinen wie auf dem Screenshot.
    Dann musst du dort schauen und nach der ersten grauen Box mit "event", in der hierarchie hoch, suchen (In dem Screenshot steht dort auch oft flex). In dem Screenshot steht das z.B. ein paar Zeilen über dem markierten.

    Ich kenn die WebDriver UDF nicht, aber mit der JavaFX WebView (Java) kann man javascript code ausführen. Also den HTML-DOM durchlaufen, das Element herausfinden und das jeweilige Event auslösen, sollte möglich sein.

    Je nach webseite kannst du auch einfach den JavaScript Code des Events anschauen und herausfinden, wo der beim mouseover geladene Text herkommt und das nachbauen.

    Es gibt wie immer einige Möglichkeiten, die beste/einfachste hängt natürlich von der Webseite ab, die du bedienen möchtest, also schaust du am besten mal, wie der Text dort geladen wird.

    pasted-from-clipboard.png

    MfG Kanashius.

  • IE aus Win10 entfernt

    • Kanashius
    • 19. August 2020 um 09:01

    Da der Internet Explorer 11 jetzt aus Windows 10 entfernt wurde, sollten in AutoIt auch die IE.au3 Funktionen nicht mehr funktionieren, oder?

    Vielleicht sollte man anfangen, an einer version für Edge/mit Chromium zu arbeiten.

    Was denkt ihr dazu?

  • Yjuq's File Format - *.yff

    • Kanashius
    • 17. August 2020 um 19:16

    Da du ja so nett fragst 8o

    Hier die kurze/schnelle Variante mit RegExp:

    AutoIt
    #include <Array.au3>
    Global $text="--------------------------------------------------------------------------------" & @CRLF & @CRLF & _
                    "Die ""="" Zeichen im Dokument dienen nur für die Lesbarkeit des Menschen. Sie" & @CRLF & _
                    "haben für den Parser absolut keine Bedeutung da diese außerhalb der Delimeter" & @CRLF & @CRLF & _
                    "--------------------------------------------------------------------------------" & @CRLF & @CRLF & _
                    "<Ke\>y 1> = <Value 1>" & @CRLF & _
                    "<Key 2> = <Value 2>" & @CRLF & @CRLF & _
                    "<Key 3>        Kommentar zu ""Key 3""" & @CRLF & _
                    "<Value 3>      Kommentar zu ""Value 3""" & @CRLF & @CRLF & _
                    "--------------------------------------------------------------------------------"
    
    local $result=_parseYff($text)
    If @error Then MsgBox(16,"Error","Error parsing given yff file: "&@extended)
    _ArrayDisplay($result)
    
    ; #FUNCTION#==============================================================================
    ; Name...........: _parseYff
    ; Description ...: Parse a yff config file
    ; Syntax.........: _parseYcf($data, $sDelims="<>", $sEscapes="\")
    ; Parameters ....: $sData        - The string of the config to parse
    ; ...............: $sDelims        - All delimeter characters listed in one string (no sequences)
    ; ...............: $sEscapes    - All escape characters listed in one string (no sequences)
    ; Errors.........: 1            - If there was an RegExp error parsing the config file
    ; return.........: An array with all found config data
    ; Author ........: Yjuq
    ; Modified.......: Kanashius
    ; ===============================================================================================================================
    Func _parseYff($sData, $sDelims="<>", $sEscapes="\")
        $sDelims="["&StringRegExpReplace($sDelims,"([\[\]\^\-])","\\$1")&"]"
        $sEscapes="["&StringRegExpReplace($sEscapes,"([\\\[\]\^\-])","\\$1")&"]"
        $arRegExp=StringRegExp($sData,"(?<!"&$sEscapes&")"&$sDelims&"(.*?)(?<!"&$sEscapes&")"&$sDelims,3)
        If @error>1 Then SetError(1,@error,-1)
        return $arRegExp
    EndFunc
    Alles anzeigen

    Ich hatte mal wieder lust auf etwas RegExp ^^

    MfG Kanashius :)

  • Tastatur Hardware - strg alt - vmware verlassen

    • Kanashius
    • 7. Mai 2020 um 11:11

    Du musst diese Funktionen (Tastenkürzel) auf dem Hostsystem ausführen, da kein Programm vom Gast-System auf das Host-System oder VMWare zugreifen darf.

    Normal weis ein Programm nichteinmal, dass es in einer VM läuft.

    Das Einzige was mir einfällt wäre ein geteilter Ordner/Clipboard und ein Programm beim Host reagiert dann auf Änderungen dort und sendet die Tastenkürzel.

    Dabei solltest du dann aber aufpassen, dass auf keinen Fall die Sicherheit des Host-Systems ein Problem bekommt. Hängt natürlich auch vom Anwendungsfall ab. Du benötigst dann natürlich auch Zugriff auf das Host-System.

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • Kanashius
    • 16. April 2020 um 21:35

    Na, er nimmt nur manchmal variablen/makros als funktionsnamen... da weiss ich nur nicht wie ich das verhindern soll... :thinking:

    Dann wuerde ich wieder normale klammerung ausschliessen, oder wenn ich das wieder bedenke auch return (code) als code werten,...

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • Kanashius
    • 16. April 2020 um 20:22

    Ich denke, ich hab das Problem groesstenteils in den Griff bekommen... Der Regulaere Ausdruck (um den ich jetzt nicht so wirklich drumherum gekommen bin, weils sonst echt komplex wird) scheint zu funktionieren.

    Die neue Funktion gibt -1 zurueck, wenn keine Funktion gefunden wurde, andernfalls wird der Funktionsname sowie die Anzahl Zeichen (mit Einbeziehung der Tabs) bis zu dem Funktionsnamen berechnet.

    Vllt. testet ihr den Ausdruck ja auch noch und findet noch Fehler, wobei das fixen etwas schwieriger sein duerfte :D

    AutoIt
    #include <Array.au3>
    $testData="ConsoleWrite(StringFormat(""%10d"",    StringLen($arTestData[$i]))&    StringFormat(""%10d"",UBound(    StringSplit($arTestData[$i],@TAB,1+2))-1)&StringFormat(""%10d"",$iLen)&StringFormat("&@crlf _
            &"ConsoleWrite (    StringFormat"&@crlf _
            &"$iLenNoRegExp=    _getLengthNoRegExp($arTestData[$i]"&@crlf _
            &" just some random stuff    "&@crlf _
            &"    "&@crlf
    
    $arTestData=StringSplit($testData,@CRLF,1+2)
    ConsoleWrite( _
        StringFormat("%10s","charCount")& _
        StringFormat("%10s","tabs")& _
        StringFormat("%10s","counted")& _
        StringFormat("%12s","countNoReg")& _
        StringFormat("%17s","LenWithoutFuncAR")& _
        StringFormat("%15s","LenWithoutFunc")& _
        StringFormat("%10s","FuncName")& _
        @crlf _
        )
    For $i=0 To UBound($arTestData)-1 Step 1
        $iLen=_getLength($arTestData[$i])
        $iLenNoRegExp=_getLengthNoRegExp($arTestData[$i])
        $iLenLastFunc=_getLengthFromLastFunc($arTestData[$i])
        $arLenAndFuncName=_getLengthAndFuncName($arTestData[$i])
        ConsoleWrite( _
            StringFormat("%10d",StringLen($arTestData[$i]))& _
            StringFormat("%10d",UBound(StringSplit($arTestData[$i],@TAB,1+2))-1)& _
            StringFormat("%10d",$iLen)& _
            StringFormat("%12d",$iLenNoRegExp)& _
            StringFormat("%17d",$iLenLastFunc)& _
            StringFormat("%15d",$arLenAndFuncName[0])& _
            @TAB&$arLenAndFuncName[1]& _
            @crlf _
            )
    Next
    
    Func _getLength($string,$iTabLength=4)
        local $arResult=StringRegExp($string,"([^\t\r\n]{0,"&$iTabLength-1&"}.)",3)
        ;_ArrayDisplay($arResult)
        If UBound($arResult)=0 Then return 0
        return (UBound($arResult)-1)*$iTabLength+(StringInStr($arResult[UBound($arResult)-1],@TAB)<>0?$iTabLength:StringLen($arResult[UBound($arResult)-1]))
    EndFunc
    
    Func _getLengthNoRegExp($string,$iTabLength=4)
        local $arChars=StringSplit($string,"",1+2)
        local $iCount,$iSubCount
        For $i=0 to UBound($arChars)-1 step 1
            If $arChars[$i]=@TAB Then
                $iSubCount=$iTabLength
            Else
                $iSubCount+=1
            EndIf
            If $iSubCount=$iTabLength or $i=UBound($arChars)-1 Then
                $iCount+=$iSubCount
                $iSubCount=0
            EndIf
        Next
        return $iCount
    EndFunc
    
    Func _getLengthFromLastFunc($string,$iTabLength=4)
        return _getLengthAndFuncName($string,$iTabLength)[0]
    EndFunc
    
    Func _getLengthAndFuncName($string,$iTabLength=4)
        local $arResult=StringRegExp($string,"(.*?)(?:([a-zA-Z_][a-zA-Z0-9_]*)(?:(?:\s*(?:\({1}[^()]*)|$)|$)){1}$",3)
        If IsArray($arResult) Then
            $arResult[0]=_getLengthNoRegExp($arResult[0],$iTabLength)
            return $arResult
        EndIf
        local $ret[]=[-1,""]
        return $ret
    EndFunc
    Alles anzeigen

    Ich fueg auch mal wieder einen Screenshot an um die Funktionsweise besser darzustellen:

    pasted-from-clipboard.png

    Der Ausdruck scheint auch teilweise fuer Macros zu funktionieren... ein netter nebeneffekt :P

    MfG Kanashius

    PS: Sorry fuer die fehlenden Sonderzeichen der Deutschen Sprache, ich bin grad dabei auf US-Tastaturlayout umzusteigen und dort gibt es die Tasten nunmal nicht :D

  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • Kanashius
    • 16. April 2020 um 16:45

    Ich hab das ganze gerade auch noch mal ohne Regulaeren Ausdruck umgesetzt, da du die ja scheinbar nicht magst ;)
    Ist natuerlich etwas laenger+komplexer, fuer die Laufzeit aber evtl. sogar besser :P

    AutoIt
    #include <Array.au3>
    $testData="Some sample code with    many t    ab    s!!    here"&@crlf _
            &"and     we    sell    it    here  t    oo) =)     ds"&@crlf _
            &"and     we    sell    it    here  t    oo) =)     sss"&@crlf _
            &"    "&@crlf
    
    $arTestData=StringSplit($testData,@CRLF,1+2)
    ConsoleWrite(StringFormat("%10s","charCount")&StringFormat("%10s","tabs")&StringFormat("%10s","counted")&StringFormat("%12s","countNoReg")&@crlf)
    For $i=0 To UBound($arTestData)-1 Step 1
        $iLen=_getLength($arTestData[$i])
        $iLenNoRegExp=_getLengthNoRegExp($arTestData[$i])
        ConsoleWrite(StringFormat("%10d",StringLen($arTestData[$i]))&StringFormat("%10d",UBound(StringSplit($arTestData[$i],@TAB,1+2))-1)&StringFormat("%10d",$iLen)&StringFormat("%12d",$iLenNoRegExp)&@crlf)
    Next
    
    Func _getLength($string,$iTabLength=4)
        local $arResult=StringRegExp($string,"([^\t\r\n]{0,"&$iTabLength-1&"}.)",3)
        ;_ArrayDisplay($arResult)
        If UBound($arResult)=0 Then return 0
        return (UBound($arResult)-1)*$iTabLength+(StringInStr($arResult[UBound($arResult)-1],@TAB)<>0?$iTabLength:StringLen($arResult[UBound($arResult)-1]))
    EndFunc
    
    Func _getLengthNoRegExp($string,$iTabLength=4)
        local $arChars=StringSplit($string,"",1+2)
        local $iCount,$iSubCount
        For $i=0 to UBound($arChars)-1 step 1
            If $arChars[$i]=@TAB Then
                $iSubCount=$iTabLength
            Else
                $iSubCount+=1
            EndIf
            If $iSubCount=$iTabLength or $i=UBound($arChars)-1 Then
                $iCount+=$iSubCount
                $iSubCount=0
            EndIf
        Next
        return $iCount
    EndFunc
    Alles anzeigen
  • Screen-PosX von bestimmtem Zeichen, wenn Text Tabs enthält

    • Kanashius
    • 16. April 2020 um 16:26

    Ich hab das hier gerade gebastelt... das sollte alle Probleme recht simpel loesen, bis auf das, wo aus dem Bereich gescrollt wird. Dort solltest du mal schauen, ob du herausbekommst, wie weit gescrollt wird,... das folgt dort auch festern regeln... duerfte aber unschoen werden...

    AutoIt
    #include <Array.au3>
    $testData="Some sample code with    many t    ab    s!!    here"&@crlf _
            &"and     we    sell    it    here  t    oo) =)     ds"&@crlf _
            &"and     we    sell    it    here  t    oo) =)     sss"&@crlf _
            &"    "&@crlf
    
    $arTestData=StringSplit($testData,@CRLF,1+2)
    ConsoleWrite(StringFormat("%10s","charCount")&StringFormat("%10s","tabs")&StringFormat("%10s","counted")&@crlf)
    For $i=0 To UBound($arTestData)-1 Step 1
        $iLen=_getLength($arTestData[$i])
        ConsoleWrite(StringFormat("%10d",StringLen($arTestData[$i]))&StringFormat("%10d",UBound(StringSplit($arTestData[$i],@TAB,1+2))-1)&StringFormat("%10d",$iLen)&@crlf)
    Next
    
    Func _getLength($string,$iTabLength=4)
        local $arResult=StringRegExp($string,"([^\t\r\n]{0,"&$iTabLength-1&"}.)",3)
        ;_ArrayDisplay($arResult)
        If UBound($arResult)=0 Then return 0
        return (UBound($arResult)-1)*$iTabLength+(StringInStr($arResult[UBound($arResult)-1],@TAB)<>0?$iTabLength:StringLen($arResult[UBound($arResult)-1]))
    EndFunc
    Alles anzeigen

    Der Ansatz ist der, mit dem regulaeren Ausdruck die Zeichen in Gruppen von 4 (tablength) zeichen zu zerlegen. Die Anzahl wird am Ende gezaehlt und entsprechend multipliziert. Der letzte Eintrag im array ist so lang, wie viele Zeichen enthalten sind, oder wenn ein Tab enthalten ist wieder (4).

    Somit musst du nur den Text vom Anfang der Zeile bis zur CaretPosition/Anfang des Wortes dort bekommen.

    In regex101 kann man das sehr schoen sehen:

    pasted-from-clipboard.png

    Zum regex: [^\t\r\n] matcht alle Zeichen ausser tab und zeilenumbruch. mit {0,3} wird dies 0 bis 3 mal gemacht und am ende mit dem Punkt ein beliebiges zeichen (also auch tab).

    Ich hoffe du kannst das verwenden und das Scrollproblem loesen.

    Viel Glueck :)

  • Problem mit ControlGetPos + WinMove

    • Kanashius
    • 3. April 2020 um 12:08

    Zum Fenster gehört auch der Rahmen, die Titelleiste,... Wenn du also das Fenster auf die Labelgröße setzt, wird das Label angepasst, damit es trotzdem weiterhin in das Fenster passt.

    Du kannst das resizen des labels deaktivieren, wie paul_p_meier bereits vorgeschlagen hat, dabei wird aber dann ein Teil des labels abgeschnitten.

    Deshalb würde ich empfehlen, dass du der Fenstergröße den Clientbereich des Fensters abziehst und den unterschied dann beim resizen des Fensters mit einberechnest (Ich weiß den Befehl fürs abfragen des Clientbereichs grad nicht auswendig, sollte in der WinAPi sein...).

    MfG Kanashius

  • Warum schreibt AutoIT mein RAM voll ?

    • Kanashius
    • 31. März 2020 um 12:41

    Wenn so viele Daten geschrieben werden, wird deine Festplatte das vmtl. auch nicht sehr lange mitmachen... ich würd empfehlen, dass du, wenn du unbedingt bei Dateien zur übertragung bleiben willst, zumindest eine RamDisk verwendest (Wie ein normaler Ordner, nur dass er komplett im Arbeitsspeicher liegt und als Drive eingebunden wird). Die Dateien sind ja vmtl. nicht so groß, sodass ca. 1 GB ausreichen sollte... Dadurch würde die Geschwindigkeit des lesens/schreibens natürlich auch steigen ;)

    Ansonsten braucht man halt den Code und mehr Infos über die Datenmenge,... um bessere Tipps zu geben

  • Tv Steuerung

    • Kanashius
    • 24. Februar 2020 um 00:19

    Für das Ändern des Namens musst du als ersten Parameter den Eintrag des Arrays nehmen, also so:

    C
    $arTvListControls[$i][0][0]=GUICtrlCreateButton($arTvList[$i][2],$arPointTvListStart[0]+($i*($iTvListItemWidth+$iTvListButtonSpace)),$arPointTvListStart[1],$iTvListItemWidth,$iTvListButtonHeight)

    Die Position kannst du natürlich auch mit in das Array geben und dann beim erstellen der Buttons entsprechend nutzen.

    Was das Profil angeht: Ja du kannst auch ein Array in ein anderes Speichern und somit die $arContextMenuButtons dort angeben. Meist speichert man dort aus performance gründen eher den Index und ruft dann mit dem Index die passenden Daten aus einem anderen Array, da dann weniger Daten gespeichert werden,... sollte für deinen Anwendungszweck aber nicht relevant sein, denke ich :thinking:

  • ContentMenu auf Button über einer Liste

    • Kanashius
    • 23. Februar 2020 um 03:55
    C
    #include <array.au3>
    
    local $sData= _
            '<?xml version="1.0" encoding="ISO-8859-15" standalone="yes" ?>'&@crlf& _
            '<channels_list>'&@crlf& _
            '    <channel id="1" name="Test Channel 1" command="1;0;1" />'&@crlf& _
            '    <channel id="2" name="Test Channel 2" command="1;1;1" />'&@crlf& _
            '    <channel id="3" name="Test Channel 3" command="2;4;6" />'&@crlf& _
            '    <channel id="4" name="Test Channel 4" command="1;1;3;4" />'&@crlf& _
            '    <channel id="5" name="Test Channel 5" command="1;1;4;5" />'&@crlf& _
            '</channels_list>'
    local $arResult[0][0]
    If StringInStr($sData,"<channels_list>") Then
        local $arData=StringRegExp(StringSplit($sData,"<channels_list>",1+2)[1],"(?s)(<channel\s+id=""(?<id>.*?)""\s+name=""(?<name>.*?)""\s+command=""(?<command>.*?)""\s*/>)(?=.*</channels_list>)",3)
        ReDim $arResult[UBound($arData)/4][3]
        For $i=0 to UBound($arData)-1 step 4
            $arResult[$i/4][0]=$arData[$i+1]
            $arResult[$i/4][1]=$arData[$i+2]
            $arResult[$i/4][2]=$arData[$i+3]
        Next
    EndIf
    _ArrayDisplay($arResult)
    Alles anzeigen

    Das wird funktionieren, Reguläre Ausdrücke sind aber nicht sehr gut dazu geeignet, xml zu parsen. Besonders wenn es komplexere XML-Dateien sind is das immer schwerer.

    MfG Kanashius.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™