Background Bild und GUI Elemente

  • hi und danke erstmal,


    stimmt das mit dem weglassen war sehr effektiv. blinkt nicht mehr wenn Bedingung nicht erfüllt ist.


    Dafür is der schwarze Balken wieder da, wenn die BEdingung erfült ist und er das Label zeigen soll.


    lgund schönen Abend

  • Dafür is der schwarze Balken wieder da, wenn die BEdingung erfült ist und er das Label zeigen soll.

    Klar, wenn du 10 x pro Sekunde den Text des Labels änderst, dann flackert es... in meinem letzten Script habe ich es so geändert, das nur dann der neue Text (bzw. Zahl) geschrieben wird, wenn er sich geändert hat. Ist dir wohl entgangen...

  • ich hatte Deinen Ansatz auch probiert Bit, ebenfalls das selbe. Ich hatte ja gesagt, die kurze Zeit war nur um es zu verdeutlichen, wenn ich die Zeit höher stelle ist der Effekt aber auch zu sehen. Ist jetzt nicht direkt ein Funktionsfehler, aber schaut halt blöd aus. Ich habe keinen schwatzen Hintegrund für das Lebel gesetzt.


    lg

  • ich hatte Deinen Ansatz auch probiert Bit, ebenfalls das selbe.

    Ich hatte AdlibRegister auf 1000 gesetzt und bei mir ist der Effekt nicht zu sehen... das Label wird bei mir auch nur etwa 1x / Std. geändert.

    AutoIt
    Func _Testspace()
        Local $iFree = Round(DriveSpaceFree($sSystemDrive) / 1024, 2)
        If $iFreeSpace <> $iFree Then
            ConsoleWrite('_Testspace('&$iFree&' GB)' & @CRLF)
            $iFreeSpace = $iFree
            GUICtrlSetData($idLabelSpace, 'Freier Speicher auf SystemDrive ('&$sSystemDrive&')' & ($iFree < $SW ? ' wird knapp!: ' : ' : ') & $iFree & ' GB')
        EndIf
    EndFunc   ;==>_Testspace


    Wenn das bei dir viel öfter passiert, dann ändere die Funktion so ab:

    AutoIt
    ;~     If $iFreeSpace <> $iFree Then ; Zwei Stellen hinter dem Komma vergleichen
        If Int($iFreeSpace) <> Int($iFree) Then ; Nur Ganzzahlen vergleichen
    ;~     If Round($iFreeSpace, 1) <> Round($iFree, 1) Then ; Eine Stelle hinter dem Komma vergleichen
  • HI,


    also nun bin ich ein bisl verwirrt, welchje Zeilen muss ich denn nun ersetzen,


    Code
      If $iFreeSpace <> $iFree Then ; Zwei Stellen hinter dem Komma vergleichen    If Int($iFre
    ;~     If Round($iFreeSpace, 1) <> Round($iFree, 1) Then ; Eine Stelle hinter dem Komma ve

    Diese beiden Zeilen sind in dem Script nicht vorhanden, ich denke wir reden von 2 verschiednen Scripten


    lg und schönes WE noch

  • Diese beiden Zeilen sind in dem Script nicht vorhanden

    Das bezieht sich natürlich auf die Funktion in Post #24... wobei dein Quote so nicht richtig ist.


    Welche Zeile? Eine von diesen hier; welche, ist deine Wahl.

    If $iFreeSpace <> $iFree Then ; Zwei Stellen hinter dem Komma vergleichen

    If Int($iFreeSpace) <> Int($iFree) Then ; Nur Ganzzahlen vergleichen

    If Round($iFreeSpace, 1) <> Round($iFree, 1) Then ; Eine Stelle hinter dem Komma vergleichen

  • Hallo,


    ja ich beziehe mich ja auch auf diesen Post, zumidest diese Zeile:



    If Round($iFreeSpace, 1) <> Round($iFree, 1) Then ; Eine Stelle hinter dem Komma vergleichen



    ist weder in deinem Vorschlag, noch in meinem Post, das hatte mich nur stutzig gemacht;)



    Übrigens noch mal zu Deinem freundlcihen Umbau des Scripts, was ist in dieser Form denn nun der konkrete Vorteil, bzw. was hätte ich für Macken in der Ursprungsform erwarten dürfen? Also dass mit meinem Problem lassen wir mal aussen vor, das dieses Problem ja dadurch auch nicht behoben wurde. Will ja schliesslich auch etwas lernen;)



    lg und schönen Sonntag noch

  • ja ich beziehe mich ja auch auf diesen Post, zumidest diese Zeile:

    If Round($iFreeSpace, 1) <> Round($iFree, 1) Then ; Eine Stelle hinter dem Komma vergleichen

    ist weder in deinem Vorschlag, noch in meinem Post, das hatte mich nur stutzig gemacht;)

    Verstehe dich nicht... die Zeile ist doch in Post #24... und davon reden wir doch, oder?


    Es geht doch lediglich darum, das GUICtrlSetData nur dann ausgeführt wird, wenn sich der freie Speicher geändert hat. Wenn das zu oft passiert, flackert das Label. Damit also nicht jede kleine Änderungen erfasst wird, kann man die Abfrage auf zwei oder nur eine Stelle hinter dem Komma begrenzen, oder auch nur die Zahlen vor dem Komma nehmen.

  • Noch zum Punkt Aktualisierungsintervall:

    100 ms ist der letzte Wert, bei dem noch ohne Flackern aktualisiert werden kann. Aber trotzdem ist das wenig sinnvoll. Du musst ja noch die Zeit hinzurechnen um den Wert wahrnehmen zu können. Wenn Du sehr gut drauf ist, passiert das in weiteren 100 ms, d.h. wirklich lesbar ist die Anzeige erst bei einer Aktualisierung alle 200 ms.

    Kannst du in diesem Bsp. mal selbst probieren, ob du bei 100 ms wirklich jeden neuen Wert erfassen kannst. 8o


    Für Anzeigen von Statusmeldungen, die sich an Schwellwerten orientieren in der Art: "OK", "Geht Noch", "Gefahr", ist m.M.n. die Hintergrundfärbung der Label in Grün/Gelb/Rot viel intuitiver als ein Zahlenwert.

  • WIe gesagt, das niedrige Intervall hatte ich nur um es zu verdeutlichen, der schwarze Flackerbalken ist aber in jedem Falle vorhanden, auch bei einem MinutenIntervall. Mich stört es im Prinzip nicht, aber erfahrungsgemäß ist das das erste was den Leuten unangenehm auffält, oft noch vor funktionellen Fehlern. Aber ich gehe halt mal davon aus dass das noch ein Bug von Autoit ist und hoffe mal darauf dass es in der nächsten Version behoben sein wird. Viellen Dank noch mal füpr den Input, werde die Vorschläge bei weiteren Scripten gerne berücksichtigen



    Vielen Dank und schöne Restwoche noch

  • Aber ich gehe halt mal davon aus dass das noch ein Bug von Autoit ist und hoffe mal darauf dass es in der nächsten Version behoben sein wird.

    Moin,


    da irrst Du gewaltig. AutoIt verändert zwar den Inhalt der Controls durch das Senden entsprechender Nachrichten, um die Darstellung auf dem Bildschirm kümmert sich aber das System, in diesem Fall höchstwahrscheinlich der Desktop Window Manager (DWM), zusammen mit den vom System bereitgestellten Fensterprozeduren für die Windows Standardcontrols. Man kann das nur durch das setzen von Styles bzw. Exstyles beeinflussen.

  • Moin,


    wenn Du nichts Anderes bestimmst, werden Label-Controls mit der Hintergrundfarbe des Fensters gezeichnet.

    Global $GUIBKCOLOR = 0x738599

    Das ist zwar kein Schwarz, erweckt aber beim kurzen Flackern einen recht dunklen Eindruck.

    Wenn Du den Fensterhintergrund auf Weiß setzt, siehst Du den Unterschied.


    Für GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) muss AutoIt in den Zeichenprozess eingreifen. Wie das geschieht, bleibt bei "Closed Source" ein Geheimnis.


    Das Folgende funktioniert hier recht gut bei 10 Hz (100 ms);


    Einmal editiert, zuletzt von Velted () aus folgendem Grund: Korrektur der Frequenzangabe.