Neuling hat einige Fragen

  • Und wieder muss ich dir danken Bernd, genau so wie ich es mir vorgestellt habe. Vielen Danke

  • Und wieder habe ich eine kleine Frage. Ich würde gerne abhängig vom ausgelesenen Wert den Titel des Fenster ändern. Soweit habe ich das auch mit

    [autoit]

    ;...
    If GUICtrlRead($controlZeny) <> $varZeny_format Then GUICtrlSetData($controlZeny, $varZeny_format)
    WinSetTitle($Gui, "", $varName_read)
    Sleep(500)
    WEnd
    ;...

    [/autoit]

    hinbekommen. Doch nun habe ich hier das Problem das es ja bei jedem Durchlauf neu geschrieben wird und so die Anzeige flackert. Ich habe schon verschiedenes versucht, aber ohne Erfolg. Habt ihr eine Idee wie ich das flackern minimieren kann, weil theoretisch muss er das nur neu schreiben, wenn sich auch der Wert varName_read bzw. der Prozess ändert. Irgendwo muss da bestimmt eine Abfrage rein, aber genau daran bin ich gescheitert.


    Vielen Dank und Mfg

    • Offizieller Beitrag

    Hallo,

    [autoit]

    If WinGetTitle($Gui) <> $varName_read Then WinSetTitle($Gui, "", $varName_read)

    [/autoit]
  • Danke Bernd, wie zu erwarten war, genau das was ich gebraucht habe. Ich habe aber gleich noch ein Problem und zwar möchte ich mir einen Wert grafisch in einer Progressbar anzeigen lassen. Der Wert ändert sich relativ häufig und kann sowohl steigen als auch fallen.

    [autoit]

    $Progress = GUICtrlCreateProgress(..., $PBS_SMOOTH)

    [/autoit]

    Rein die Progressbar zu erstellen ist noch einfach, aber ich bekomme sie einfach nicht richtig gefüllt. Ich habe sowohl den aktuellen Wert, den Endwert und beginnen tut es immer bei 0.

    [autoit]

    Func
    For ... = 0 To ...
    GUICtrlSetData(...)
    Next
    EndFunc

    [/autoit]

    In verschiedenen Beispielen habe ich sowas wie oben gesehen, bekomme es aber nicht zum laufen. Danke im voraus für eure Hilfe.

    • Offizieller Beitrag

    Hier mal ein Bsp. für Progressbar.
    Die Variable $vor dient hier nur als Krücke um in die Case-Auswahl zu gelangen.
    Beim Richtungswechsel wird mit ContinueCase ja ohne Wertprüfung in den folgende Case zur Abarbeitung gewechselt.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $vor = True

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("My GUI Progressbar",220,100, 100,200)
    $progressbar = GUICtrlCreateProgress (10,40,200,20,$PBS_SMOOTH)
    $button = GUICtrlCreateButton ("Vorwärts",75,70,70,20)
    GUISetState ()

    [/autoit] [autoit][/autoit] [autoit]

    $wait = 20; wait 20ms for next progressstep
    $s = 0 ; progressbar-saveposition
    Do
    $msg = GUIGetMsg()
    If $msg = $button Then
    Select
    Case $vor
    GUICtrlSetData($button, 'Rückwärts')
    For $i = $s To 100
    $m = GUIGetMsg()
    If $m = $button Then ContinueCase
    GUICtrlSetData($progressbar, $i)
    $s = $i
    Sleep($wait)
    Next
    Case Not $vor
    GUICtrlSetData($button, 'Stop')
    For $i = $s To 0 Step -1
    $m = GUIGetMsg()
    If $m = $button Then ExitLoop
    GUICtrlSetData($progressbar, $i)
    $s = $i
    Sleep($wait)
    Next
    EndSelect
    GUICtrlSetData($button, 'Vorwärts')
    EndIf
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • Wochenende und etwas Zeit mich damit zu beschäftigen. Zuerst danke für das Beispielt mit der Progressbar aber ganz Schlau werde ich daraus nicht. Mir geht folgende Vorgehensweise im Kopf rum. Kann man nicht sagen Startpunkt ist X (immer Null), Endpunkt ist Y (fixer Wert, ändert sich nur wenn bei 100% bzw. die neue Runde beginnt) und aktueller Wert ist Z (aktueller Wert der sich natürlich auch ändert). Nun prüfe ich alle ... Sekunden wie der aktuelle Wert ist und schreibe den einfach in die Bar rein. Geht das bzw. funktioniert das Beispielt so und ich habe es einfach nicht verstanden!?


    Danke vorab und genießt den sonnigen Samstag

  • Inzwischen habe ich es hinbekommen und musste auch feststellen, das ich einen total komplizierten Weg im Kopf hatte. Gestern ist es mir dann wie Schuppen von den Augen gefallen und es war eigentlich ganz einfach. Ich habe aber wieder 2-3 kleinere Fragen. Wie kann ich es bewerkstelligen, das das Programm nach dem Start erstmal pausiert und seinen Dienst erst nach dem Klick auf einen Knopf aufnimmt? Und wie kann ich die Anzeige der ausgelesenen Werte komplett leeren, also quasi auf den pausierenden Anfangszustand zurücksetzten? Muss ich die Variablen da irgendwie mit 0 auffüllen oder sowas?


    Mfg und Danke
    Bill

  • Zu Frage 1

    Spoiler anzeigen
    [autoit]

    $button = ...
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $button
    ;HIER dein Script rein
    EndSelect
    Wend

    [/autoit]


    Zu zweitens:
    Entweder nach beendigung deines vorgangs , deine variable wieder in den anfangszustand versetzen oder
    mit guictrlsetdata.

    gruß