Während Suche Splashtext anzeigen, Splashtext geht nicht mehr zu

  • In der Firma ist der PC langsam, die Suche mit _FO_FolderSearch läuft länger, deswegen würde ich gerne,
    während der Suche ein Splashtext anzeigen lassen, das geht auch, aber es schließt nicht mehr!
    Nur was ist falsch?

    2 Mal editiert, zuletzt von Fintan (26. Februar 2016 um 18:20) aus folgendem Grund: .

  • Wie soll splashoff() auch ausgeführt werden? Du bleibst für immer in deiner Schleife gefangen, weil deine Abbruchbedingung niemals erfüllt wird. Du schreibst zwar in dein Splashtext, dass die Suche läuft, das tut sie aber nicht, denn du machst rein garnichts in deiner Schleife. Es macht auch keinen Sinn den Splashtext tausendemale pro Sekunde in der Schleife zu aktivieren, das macht man wenn dann einmalig vor Beginn der Schleife. Wozu du gleich zwei Schleifen (while und do) mit der selben Abbruchbedingung brauchst ist mit auch nicht klar.

  • Hm ok, äh so bleibt der Splashtext auch da...
    Wie müßt man das schreiben, dass der Splashtext zu geht?

  • Poste am besten ein lauffähiges Skript, wo die Fehler auch auftreten. Was mach z.B. die Func _FO_FolderSearch? Wenn dies die Suche ist währenddessen der SplashScreen gezeigt werden soll, kommt er wohl zu spät. Da du auch ShellExecute verwendest solltest du auch Testdaten beilegen (Zip-File).

  • Ja, während der Func _FO_FolderSearch soll der SplashScreen gezeigt werden, weil bei der Funktion in der Firma langsam läuft und nichts angezeigt wird.

    2 Mal editiert, zuletzt von Fintan (26. Februar 2016 um 20:24) aus folgendem Grund: .

  • Du willst also, dass der Spalshtext immer dann angezeigt wird, wenn dein Script innerhalb dieser Suchfunktion ist? Warum baust du diesen dann nicht genau dort ein? Einfach ein splashtext am Anfang der Funktion und ein splashoff am Ende (vor dem "return").

    Alternativ baust du das ganze direkt vor bzw. direkt nach jedem Aufruf der Funktion ein (z.B. wenn du bei jeder Suche einen anderen Text anzeigen willst). Du brauchst für den splashtext weder Schleifen noch sonst irgendwas.

    Einfaches Beispielscript:

    AutoIt
    SplashTextOn("", "Suche läuft...", 220, 40, 730, 388, 21)
    sleep(10000) ; macht irgendwas was 10 Sekunden dauert, hier eben schlafen
    SplashOff()
    
    
    ; fertig.... es wurde für 10 Sekunden dein Text angezeigt

    EDIT:

    Ich würde davon abraten den Splashtext direkt in die Funktion einzubauen, da die Funktion Rekursion beinhaltet und sich selbst aufrufen kann. Außerdem müsste man auch im Fehlerfall ein splashoff vor dem entsprechenden return einbauen. Wesentlich einfacher und weniger Problematisch ist also die Variante in meinem sleep() Beispiel.

    Einmal editiert, zuletzt von misterspeed (26. Februar 2016 um 19:34)

  • Ich habe doch eine IF.. Then.. Else Schleife.
    Dann müßte ich ja 2 SplashOffs machen, 1. vor der MSBox und die 2. vor der ShellExecute, weil ich weiß ja nicht ob überhaupt ein Ordner gefunden wird!

  • Ich meine so natürlich...

    4 Mal editiert, zuletzt von Fintan (26. Februar 2016 um 19:54)

  • Erstmal gibt es keine IF Schleife, das ist eine Bedingung und keine Schleife.

    Bei 600 Zeilen Code mit mehr oder weniger kryptischen Variablennamen fehlt mir auch der Überlick was du da überhaupt tust. Vermutlich könnte man deinen Code auf ein fünftel zusammenkürzen. Davon mal abgesehen verstehe ich deine Frage nicht.

    Wenn du splashtext einschaltest musst du auch sicherstellen, dass es wieder ausgeschaltet wird. Endweder in dem du das in jedem Bedingungszweig entsprechend tust oder deinen Code etwas geschickter strukturierst um unnötige Redundanz zu vermeiden. Wenn ich mir deinen Code ansehe sehe ich da erstmal jedemenge Copy&paste Die Code Blöcke sind nahezu identisch, was den Code unübersichtlich, fehleranfällig und schwieriger zu handlen macht wie du ja selbst schon bemerkt hast.

    Dein Problem liegt vermutlich hier
    ;~ 4 AUFTRAG 2014\02-????-14\01-8888-14
    Da du dort noch eine überflüssige endlos while Schleife hast, die evtl. niemals verlassen wird. Grundsätzlich kommt dein splashoff auch erst nach der if Bedingung, in einem Zweig der if Bedingung verlässt du die Funktion aber vorzeitig mit return, das splashoff wird also niemals oder endlos ausgeführt.

  • Ich meine so natürlich...

    Prinzipiell sollte das doch so funktionieren. Ich verstehe aber nicht warum du den splashtext nicht einfach vor und nach der Suchfunktion einfügst, denn du willst doch signalisieren, dass dein Script gerade eine lange Suche durchführt.

    Code
    SplashTextOn("", "Suche läuft...", 220, 40, 730, 388, 21)
    Local $SuchOrdAngAlt = _FO_FolderSearch($OrdAngAlt2, '*' & $AngAltGanzNum, True, 3, 0, 0)
    SplashOff()