Beiträge von Bitnugger

    Alina


    So... bin ich zu dir... jetzt mit Edit-Control... 8o


    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.

    fehlt ein #include <GUIConstantsEx.au3>

    Oh ja, habe ich nun hinzugefügt...


    Eine RNS-Datei in einen andernen Dateityp umbenennen würde erkannt werden, umgekehrt jedoch nicht.

    Ja, will man das, muss die Abfrage entsprechen angepasst werden... den alten Namen bekommst du mit "Item1", den neuen mit "Item2".


    $SHCNE_UPDATEITEM tritt laut Beschreibung nur bei Veränderung des Inhaltes eines Elementes auf, hier also nicht nötig.

    Wir benötigen ja nicht nur den Namen des Pfades, sondern vor allem auch den Inhalt der Datei... den es aber evtl. noch nicht gibt, nachdem die Datei erstellt wurde ($SHCNE_CREATE) - z.B. mit FileOpen("filename.rns", $FO_OVERWRITE) - hier greift dann $SHCNE_UPDATEITEM, nachdem die Daten geschrieben wurden!


    Da die Aufgabenstellung nur das Erkennen von neuen *.rns vorgibt, brauchen wir $SHCNE_CREATE und $SHCNE_UPDATEITEM, jedoch kein $SHCNE_ASSOCCHANGED. Das kann man natürlich auch noch abfragen, genauso wie $SHCNE_RENAMEITEM, wenn die Datei umbenannt wurde und nun vielleicht keine *.rns mehr ist. Das war aber nicht gefragt.


    Den ersten Zitatsatz weiß ich leider nicht vollständig umzusetzen.

    So habe ich das verstanden:

    Durch $SHCNRF_NEWDELIVERY wird für empfangene Nachrichten gemeinsam genutzter Speicher verwendet. SHChangeNotification_Lock rufst du auf, um auf die eigentlichen Daten zuzugreifen. SHChangeNotification_Unlock rufst du auf, um den Speicher wieder freizugeben, wenn du fertig sind.


    Schau mal hier, wie KaFu das gelöst hat.


    Ansonsten... sehr schön umgesetzt. :rock:


    Hier noch meine Version - die *.rnt wird hiermit auch erstellt:

    Am Anfang schriebst du, dass die Eingabezeichenfolge nur zweistellige Zahlen enthält. ...

    Genau...


    Ordnerüberwachung ist auch nicht schwierig...

    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

    Und wie erledigst du dann die Umwandlung des Arrays in einen String ohne zweite Schleife, vor allem wenn die Anzahl der Doppelziffern ungerade ist?

    So würde ich es dann machen:

    So geht es auch:

    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

    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...

    Mir ist noch ein ähnlicher Effekt aufgefallen,

    den du sebst verursachst... du hast da ein paar fette Fehler drin... hier mal eine "leicht" korrigierte Version...

    PS: GuiCtrlSetOnHover_UDF.au3 ist bei mir GuiCtrlOnHover.au3


    GUIDelete($hGui)

    Nach dieser Zeile muss ein Exit folgen... denn ohne GUI gibt es auch keine Msg und dein Script funktioniert somit nicht mehr korrekt.


    local $gMsg = GUIGetMsg()

    Außerhalb einer Funktion sind alle Variablen Global und es ist dabei völlig egal, ob du sie mit Local oder Global deklarierst!


    Zudem sollte die Deklaration besser vor dem While stehen. In deinem Fall ist die Variable aber eh überflüssig, weil du sie ja lediglich einmalig für Switch benötigst... da kannst du es besser so machen:

    Switch GUIGetMsg()

    das lauffähige Beispiel hatte ich doch gepostet, ich habe es doch auch entsprechend den Vorschlägen von Mombass gepostet! Da er ja gesagt hatte, er konnte das Problem nachvollziehen, kann ich nun Deine Einlassung nicht ganz nachvollziehen. Soll ich den Inhalt von den UDFs posten, meinst Du das? Oder das Hintergrundbild? Ich hatte es mit meheren Bildern und Formaten probiert,

    ...aber es hat nicht funktioniert.


    Hm, ja, das ist dann natürlich schwierig bis unmöglich für dich und auch nicht dein Vergehen, wenn das Forum Zicken wegen zu großer Dateianhänge macht.


    Solange Gun-Food das nicht gefixt hat, geht das wohl nicht so, wie Musashi es empfohlen hat. Bis dahin kannst du als Workaround einfach den Inhalt der UDFs posten; aber setzte sie in Code-Tags! Mit Bildern ist es schwieriger... verkleinere sie einfach, damit der Upload klappt, oder verwende Bilder, die mit AutoIt installiert wurden, z.B.: "c:\Program Files (x86)\AutoIt3\Examples\Helpfile\Extras\Compass.bmp"

    AutoIt
    $BG = ('C:\Windows\Temp\hg.bmp', 0, 25, 920, 660)
        GUICtrlCreatePic ($BG)

    Hust... was soll dass denn werden? :/


    So macht es Sinn:

    $BG = GUICtrlCreatePic('C:\Windows\Temp\hg.bmp', 0, 25, 920, 660)



    AutoIt
    global $combo1 = GUICtrlCreateCombo ("Scripte", 300, 557, 150, 120)
    global $btnStart = GUICtrlCreateButton("🟥", 450, 557, 23, 23)

    Die Deklarationen von globalen Variablen gehören nicht in eine Funktion!

    er bemeckert aber aus irgend einem Grunde eine angeblich fehlende Klammer,,

    Wie Oscar dir schon angeraten hat: Poste bitte lauffähige Beispiele!


    Andernfalls bürdest du den freiwilligen Helfern unnötige Arbeit auf, die wohl kaum einer leisten will. Dazu gehören importierte UDFs und sonstige benutzte Funktionen bzw. Variablen oder Daten.


    Folgendes fehlt:

    GUIBkImage.au3, Services.au3, GuiCtrlSetOnHover_UDF.au3, _fu1(), _fu2()

    und die hier verwendeten *.bmp...

    FileInstall("C:\Users\user\Pictures\scr09082022-084252.bmp", "C:\Windows\Temp\hg.bmp", 1)

    Danke Velted , dass du mir die Arbeit abgenommen hast. ;)

    Solche 'Komfortfunktionen' machen für mich allerdings nur Sinn, wenn auch bereits bei derEingabe geprüft wird, ob die Daten 'sinnvoll' sind (z.B. Pause-Beginn nach Arbeit-Beginn oder Pause-Ende nach Pause- Beginn oder Pause nicht länger als 10 Stunden oder ...).

    Genau... ich habe das in einem meiner größeren Projekte gelöst, indem ich die Tastatureingaben in einem Input mit einem Hook* abfange und nur dann zulasse, wenn sie korrekt sind. Zudem kann man bei mir die Zeiten auch via Mousewheel ($WM_MOUSEWHEEL) ändern. Das ist sehr bequem und Fehleingaben sind somit ausgeschlossen.

    *_WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, ...)

    Chris_pac

    Es macht übrigens wenig Sinn, Begin u. Ende der Pausenzeit/en manuell einzugeben, da diese von der Arbeitszeit abhängig sind und der Arbeitgeber verpflichtet ist, diese entsprechend einzuberechnen, unabhängig davon, ob du sie eingehalten hast, oder nicht.

    Zitat

    Bei einer Arbeitszeit von mehr als sechs bis zu neun Stunden muss die Pausenzeit mindestens 30 Minuten betragen. Bei mehr als neun Stunden Arbeitszeit sind 45 Minuten vorgeschrieben. Die Lage der Ruhepausen ist gesetzlich in § 4 Arbeitszeitgesetz - ArbZG nur rahmenmäßig vorgeschrieben.

    Code
    <= 6 Std.          = keine Pause
    >  6 Std. - 9 Std. = 30 min Pause
    >  9 Std.          = 45 min Pause

    Es gibt aber auch Sonderregelungen... z.B. wenn extrem schwierige/anstrengende Arbeiten (100% Erschwerniszulage) verrichtet werden... da ist/war es zumindest auf dem Bau so, dass nach 15 min Arbeit eine Pause von 15 min folgen muss/te, die in dem Fall aber als Arbeitszeit verbucht wird.


    Soll-Arbeitzeit: 07:48 ...so krumme Zeiten kenne ich nicht... 07:45, 07:30 und 07:15 wohl.


    Es macht wirklich Spaß, AutoIT zu lernen!

    AutoIt!


    PS: Habe mom. leider wenig Freizeit...

    @Kanashius - sehr schön... ich habe allerdings andere Ergebnisse.



    Und noch etwas: die Zeit wird auch in Dezimalzahlen berechnet. Pro Tag muss man 07,48 Stunden arbeiten oder 07,80 Stunden in Dezimalzahlen.

    Industrieminute – Wikipedia


    So sieht das in Excel aus:

    Da hast du einen Schreibfehler drin: Pause nach 6 Stundnen


    Hier mal ein Ansatz: