Stundenplaner

  • Nettes Programm, sicherlich sehr hilfreich wenn meine Jungs in die Schule kommen.

    Ich habe es mal etwas umgestrickt, verschlankt, verbessert, verändert... :party:



    Hauptänderungen (und sicherlich nicht die Letzte :Face: ) :

    - Abfrage beim Start ob eine INI geöffnet werden soll oder man neu beginnen möchte

    - 1D und 2D Arrays für den GUI Aufbau, die OnEvent Aktionen und das wieder in die INI schreiben
    - GUI wird nicht ständig neugeladen, sondern nur nach einem Event
    - die Haupt-Schleife besteht nur noch aus einem Sleep (500) :)
    - Diverse Optische Veränderungen (z.B. werden die Texte jetzt X/Y Centered im Label angezeigt)
    - Default Werte auf den OnEvent Flächen
    - Stundenplanname wird per Default aus dem Dateinamen extrahiert (kann aber immer noch nachträglich verändert werden)
    - Werte verschwinden nicht, wenn man die Abfragebox abbricht
    - geöffnete INI Datei wird unten in der GUI angezeigt

    Nachtrag 22.12.16:

    - Programm öffnet die letzte Datei, keine Abfrage mehr beim Starten
    - Wenn die Datei noch nicht gespeichert wurde und man eine andere öffnen oder eine neue erstellen, kommt eine Nachfrage
    - Code weiter aufgeräumt und versucht die Variablen sinnvoll zu benennen

    Hhhmmm...er mag meinen Code nicht mehr, eigentlich sollte er ihn für AutoIt formatieren...sorry!

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2

    15 Mal editiert, zuletzt von Cape-City (24. Dezember 2016 um 00:41)


  • Schön, dass du dir die Mühe gemacht hast! Jetzt wird es Zeit für Kritik! :D

    Konventionen bei Variablennennungen sind gerne gesehen.
    $TagStunde[$Day][$Hour] ließt sich irgendwie komisch und gibt keine gute Auskunft über den Inhalt und die Typen des Inhaltes an. Besser wäre da $aTagStunde[$iDay][$iHour].

    An einigen Stellen kannst du das Switchen auch sein lassen, weil du ja nur einen Case abfragst.

    Also statt:

    AutoIt
    Switch @GUI_CtrlId
    	Case $TagStunde[$Day][$Hour]
    		;...
    EndSwitch

    lieber gleich:

    AutoIt
    If @GUI_CtrlId = $TagStunde[$Day][$Hour] Then
    	;...
    EndIf

    Die Sache mit $MenuItem11 will ich gar nicht erst ansprechen, denn ich denke du siehst was daran blöd ist :D

    Außerdem wäre es glaube ich eine super Anwendungsmöglichkeit für Enums gewesen (Local Enum $iMontag = 1, $iDienstag, $iMittwoch, ...)

    Zu guter Letzt solltest du den Code noch ein wenig auflockern, wenn man alles untereinanderschreibt dann findet man sich nach langer Zeit nicht mehr so gut ein.
    Das ist wie beim Brief tippen, Sätze die zusammengehören bilden einen Absatz und so sollte es bei Funktionen sein.

    Also statt

    lieber:

  • @alpines

    Uuumpffff :D

    Ja, das Script bedarf noch etlicher Aufräumarbeit, aber da ich mittlerweile soviel geändert hatte, wollte ich den Charme des
    Originals noch etwas durchblicken lassen :ironie:

    Im ersten Schritt wollte ich eigentlich das Script nur in eine logische Reihenfolge bringen und einige Variablen sinnvoller umbenennen.
    Der Versuche mit MenuItem10/11/12/.../20/21... war eine logische Zusammenfassung, des Hauptmenüpunktes und der darunter liegenden
    Unterpunkte. Auch der Start mit der direkten Abfrage was man machen möchte gefällt mir noch nicht, aber vorher ging das Programm auf
    und man musste dann erst abspeichern um etwas Dauerhaftes zu haben.

    Es steckt noch viel Potential darin, selbst in so einem banalen Programm. Stolz bin ich aber auf die Verschachtelungen mit den ForNext
    Schleifen, welche zum einen die GUI dynamisch aufbauen/füllen und zum Anderen auch die OnEvents setzen. Vorher war es ja mehr oder
    weniger eine Batch-Datei.

    Allerdings hat mir das System gezeigt, das es nicht überall gleich reagiert. So habe ich ja beim GUI Aufbau, den $Tag[0] bzw. $Stunde[0] als
    Zähler für meine ForNext-Schleife verwendet. Sieht im Nachhinnein zwar blöd aus $Tag[$Tag[0]], aber das Arrayfeld war eh da und ich wollte
    mit 1-5 bzw. 1-8 arbeiten um einen besseren Bezug zu Mo-Fr und 1h-8h zu bekommen. Ich werde das aber auch noch umbauen.

    Das mit den Variablennamen $aTag oder $iDay habe ich allerdings noch nicht zu ganz verstanden, warum man das macht, bzw. was es einem
    damit erleichtert.

    So...ich werde dann nochmal ein wenig strippen und strecken :)

    Nachtrag 22.12.16:

    Vorherigen Thread den Code aktualisiert.

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2

    2 Mal editiert, zuletzt von Cape-City (22. Dezember 2016 um 10:42)

  • Das mit den Variablennamen $aTag oder $iDay habe ich allerdings noch nicht zu ganz verstanden, warum man das macht, bzw. was es einem
    damit erleichtert.

    Ganz einfach, wenn man sich mal das aktuelle Scope ansieht und sich alle Variablen betrachtet die es so gibt, dann sollte der Name der Variable einen Titel tragen der aussagekräftig ist und direkt Einblick bietet wofür die Variable genutzt wird. Wir haben schließlich nicht 5 Variablen sondern dutzende, wenn nicht sogar hunderte.

    Bei $Tag habe ich (meine persönliche Meinung) absolut keine Ahnung was das sein soll. Ist da ein String gespeichert? Ist das ein Array? Ist das der Wochentag als Index?
    Aus diesem Grund verwendet man die sogenannte ungarische Notation. Aus $Tag wird ein $aTag und schon weiß ich etwas mehr über die Variable.
    Jetzt kann ich auf Anhieb sehen das es sich um ein Array handelt also kann ich beim scripten nicht auf die Idee kommen das Array als Standardvariable zu verwenden.

    Bei $iDay wird das ganze noch besser.
    $Day selbst sagt mir nur das es sich um einen Tag handeln muss, aber wie bei dem Array zuvor habe ich absolut keine Kenntnis (zumindest als fremder Leser) was in der Variable enthalten ist.
    Ich muss erstmal ein wenig hochscrollen um zu sehen das es eine Zählervariable für eine For-Schleife ist, also warum packe ich nicht direkt ein i(nteger) davor?
    Wenn ich mir jetzt $iDay angucke sehe ich auf direkt das die Variable einen Integer hält der einen Tag spezifiziert. Ich kann also davon ausgehen, dass $iDay einen Wert von 0 bis 6 bzw. 1 bis 7 hat.

    Man kann das ganze natürlich noch auf die Spitze treiben und sowas schreiben $as_Tag (Array String, Tag) aber das ist dann geschmackssache und variiert von Coder zu Coder.


    Letzendlich ist es deine Entscheidung wie du deinen Code schreiben möchtest. Ich kann dir nur empfehlen dich an solche Konventionen zu halten, da es das Arbeiten in größeren Projekten enorm erleichtert und man nicht sinnlos Debuggen muss weil man ein Array wie einen String handhabt.
    Das mit dem Code auseinanderziehen ist mein persönlicher Stil, ich finde das lockert das schön auf und man kann das einfacher lesen.
    Das soll widerum nicht heißen, dass man jede zweite Zeile freilässt sondern seinen Code sinnvoll in Absätze gliedert.

    Nebenbei, wenn dein Code im Post nicht richtig angezeigt wird, dann nimm die <Code-Tags> und wähle AutoIt aus (falls du das nicht gemacht hast)!

  • Ich habe die Code-Tags verwendet, auch mal gelöscht und neu angelegt. Will einfach nicht mehr in dem Post....
    Quelltext ist auch auf dem neusten Stand, schon krass das ich immer wieder kleinere Bugs finde :D

    ~~~~~~~~~~~~~~~~~~~~~~~~
    Grüße
    Cape-City

    Grafik/Sound Demo (InfoBox)

    OS: Windows 10 Pro - System: Intel Core i5-3320M CPU @ 2.60GHz - AutoIt-Version: 3.3.14.2