Beiträge von Oscar

    Ich würde gerne das abdunkeln des Hintergrunds abschalten.

    Hmm...das Auswahlrechteck soll ja halbtransparent sein. Im Moment fällt mir dazu keine Lösung ein.


    Ist es möglich die Lupe ohne das Fadenkreuz darzustellen?

    Wozu? Ich finde es gerade hilfreich, wenn man das Fadenkreuz auch in der Lupe sieht.

    Das "nachlaufen" kann man einfach beheben. Außerdem habe ich mal noch ein paar Fehler beseitigt (Script im Anhang).

    Ich habe mal ein Beispiel erstellt:

    Bei mir flackert dann das rechte untere Eck.

    Bei euch auch?

    Ja, dafür war das Script nicht vorgesehen. Das Label muss verschoben und in der Größe angepasst werden. Das flackert zwangsläufig.

    Ich habe mal eine Version mit GDI+ geschrieben, die dann auch mit mehreren Monitoren zurechtkommt (Anhang).

    Da kannst Du das Auswahlrechteck sowohl von links-oben als auch von rechts-unten starten.

    Funktioniert exakt, aber von Verstehen bin ich weit entfernt

    Naja, es ist etwas trickreich, weil hier der Umstand benutzt wird, dass die Funktionen der Timer-UDF quasi parallel weiter laufen, auch wenn das Script durch das ArrayDisplay eigentlich angehalten wird.

    So kann man in der Timer-Funktion die Spalten des ArrayDisplay verstecken.

    Aber statt hier rumzutricksen oder das Array umzukopieren, wäre es hilfreicher einfach eine eigene ArrayDisplay-Funktion zu schreiben.

    Du verwendet auch die neue Version. Bei dir flackert mein Skript nicht?

    Dein Script "flackert" mal kurz, wenn man die linke Maustaste das erste Mal drückt und das Label aufzieht.



    Dummy -GUI. Ich habe den Kommentar gelesen aber nicht verstanden.

    Die Dummy-Gui verhindert, dass man mit dem Auswahlkreuz in ein darunter liegendes Fenster etwas auswählen kann. Wenn SciTE mit dem Script drunter ist, kann man das sehen.


    Du verwendest GUIGetCursorInfo statt _Ispressed. Warum?

    Ist einfach zum einsparen von _IsPressed und MouseGetPos. Mit GUIGetCursorInfo bekommst Du beides gleichzeitig.


    Du verwendest 1 GUI mit Auswahl, 2x Fadenkreuz und veränderst die Position immer mit GUICtrlSetPos.

    Ja, eine GUI und Fadenkreuz und Auswahl sind Label.

    Vielleicht liegt darin auch schon der Grund für das "flackern", weil bei mir nicht mehrere Fenster "übereinander" liegen!?

    Ok, bei Windows sind alles Fenster, aber eben Childs vom Hauptfenster.

    Mit dem ArrayRange sind AFAIR nur zusammenhängende Bereiche möglich.

    Es gibt aber einen etwas trickreichen Workaround (mit der Timer-UDF):

    Woran könnte dies liegen?

    Weiß ich nicht. Ist bei mir auch nicht so, aber ich habe mal eine Alternative erstellt:

    Immer noch nicht sehr elegant das ganze

    Wäre es nicht sinnvoller ein transparentes Fenster mit den Informationen anzuzeigen?

    Jede Minute das Hintergrundbild zu ändern (inkl. speichern auf Festplatte), lässt die Festplatte nie in den Ruhemodus wechseln.


    Hier mal ein Beispiel, wie das mit einem transparenten Fenster aussehen kann:

    Ist es möglich, dass dieser FTP-Server nicht mehr (allgemein) zugängig ist ?

    Es scheint den Server nicht mehr zu geben! Bereits die IP-Auflösung schlägt fehl:

    AutoIt
    TCPStartup()
    $sUrl = 'ftp.csx.cam.ac.uk'
    $sIP = TCPNameToIP($sUrl)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sIP = ' & $sIP & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
    TCPShutdown()

    Edit: Die Beispiele sind übrigens auch in AutoIt v3.3.16.0 noch enthalten.

    Ich wollte mal testen, wie die MAPS gegenüber dem ScriptingDictionary-Objekt abschneiden.

    Also habe ich die BucketSort-Funktion (oben aus Post#1) 1:1 auf das ScriptingDictionary-Objekt umgestellt.

    Ergebnis: Die neuen MAPS sind mehr als doppelt so schnell (0.175 s <-> 0.362 s, auf meinem Rechner und mit AutoIt v3.3.16.0).

    Und die Performance dabei ist bei mir um ca. Faktor 4 schneller.

    Nunja, kommt darauf an. Meine Funktion sortiert bei gleich langen Strings noch nach dem Alphabet.

    Wenn ich bei Deinem Script die Sortierfunktion umstelle:

    AutoIt
    Func cbByLength(ByRef $A, ByRef $B)
        Local $nA = StringLen($A), $nB = StringLen($B)
        If $nA = $nB Then Return -StringCompare($nA, $nB, 1)
        Return $nA > $nB ? -1 : 1
    EndFunc

    Dann passt es fasst. Allerdings treten ein paar Merkwürdigkeiten auf:



    Manche Einträge werden aufsteigend sortiert und manche absteigend.

    Ich brauchte eine Sortierfunktion, um Strings der Länge nach zu sortieren.

    Mir war schon klar, dass es auf eine Quicksort-Funktion hinauslaufen würde, aber ich wollte auch mal sehen, wie sich andere Sortierverfahren schlagen.

    BubbleSort ist zwar einfach zu programmieren, aber grottenlahm. InsertionSort war dann schon schneller, aber mit vielen String (mehreren Tausend) auch nicht wirklich brauchbar.

    Meine Quicksort-Funktion schlägt sich schon ganz gut (über 13.000 Strings in ca. 1.8 s, InsertionSort braucht fast 5 Minuten).

    Vielleicht kann ja noch jemand so eine Funktion gebrauchen oder es findet jemand noch Optimierungsmöglichkeiten.

    Im ZIP-Archiv (Anhang) befindet sich neben dem Script auch die Testdatei mit den 13.071 Strings.


    Edit1 17.03.2022:

    Dank Lambdax und AspirinJunkie musste ich feststellen, dass Quicksort hier nicht die schnellste Variante ist, sondern BucketSort.

    Und dank MAPS (ab AutoIt v3.3.16.0 oder Beta-Version) kann man eine recht kleine BucketSort-Funktion damit erstellen.


    Edit2 17.03.2022:

    Die BucketSort-Funktion konnte man noch optimieren (_ArrayConcatenate war überflüssig, das kann man gleich in das Quell-Array schreiben).

    Und _ArraySort mit DualPivot ist auch noch etwas schneller.

    Mit 0.178 s (auf meinem Rechner) ist das wohl jetzt das Optimum.


    Edit3 06.04.2022:

    Ich habe mal eine UDF daraus erstellt. Man kann die Buckets beim BucketSort auch mit einem Array abbilden, was nur geringfügig langsamer als die MAPS-Variante ist.

    Hat aber den Vorteil, dass es auch mit älteren AutoIt-Versionen funktioniert.

    Im Anhang befindet sich das ZIP-Archiv "_ArraySortStringLen.zip", mit der UDF, einem Example und zwei Teilwörterbüchern (107.632 und 538.160 Wörter) zum testen.

    Auf meinem Rechner benötigt die Funktion für das große Wörterbuch nur ca. 7 Sekunden zum sortieren (inkl. Alphabetisch).


    BucketSort mit Arrays:


    BucketSort:


    Quicksort: