Bitte um Bewertung meines zweiten Projektes - Tea Timer

    • Release
    • Open Source

    Es gibt 68 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

      Bzgl. den DLLs: Frag @Trade, wie essentiell die DLLs sind, denn (ich muss gestehen) ich hab's noch nicht verwendet, da ich keine Online-Updates für meine Programme bisher brauchte.

      Es wäre schon sinnvoller, das Programm ohne nUpdate hochzuladen. Wenn wir uns den Code und das Programm anschauen, würde zusätzliche Funktionalität den Blick auf's Wesentliche stören und wir müssten erstmal entweder den nUpdate-Code deaktivieren ( :thumbdown: ) oder die Internetverbindung kappen (auch nicht immer toll, aber einfacher).
      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

      Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
      Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
      Ich weiß jetzt nicht genau, welche DLLs das sind, aber ich tippe mal auf Newtonsoft.Json und diverse System.Threading.Task-Sachen. Die müssen leider mit rein. Wenn Du auf .NET 4.5 kompilierst kannst Du es auch mal ohne letztere probieren, aber keine Garantie. Ist halt leider so wegen der Kompatibilität zu .NET 4.
      Aber in der neuen Version wird das anders.

      So oder so find ich aber die DLLs nicht schlimm. Die gehören ja immer dazu, egal wie groß was ist.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Soho
      Nachdem ich ein paar Tage wegen so ner hässlichen Magen Darm Geschichte, nicht wirklich Lust hatte, hats ein bisschen gedauert.
      Hier nun die aktuellste Version, in der ich auf deine letzte Kritik eingehe (dieser Upload - und auch alle evtl. noch folgende - sind vollkommen frei von nUpload).

      Hier der "Changelog"
      Spoiler anzeigen


      Wenn man bei einer leeren Tee-Liste auf [löschen] klickt, kommt ne Exception -> Vorabprüfung auf leere Liste einbauen. Genauso bei den Gefäßen.

      behoben

      Man weiß instnktiv nicht, was mit [neu] und [löschen] gemeint ist

      Habe das Layout der Hauptform etwas geändert und die Buttons neu bennant.

      HTML-Quellcode



      Das Menü ist mit |Datei| zwar standardbenannt, aber irreführend, da das Programm nichts mit Dateien macht - außer im Hintergrund. Entweder Du benennst es um (ggf. z.B. Aktionen?) oder Du lässt es ganz weg und der Benutzer beendet das Programm nur über [Ende], oder ggf. über das rote [X] rechts oben

      Das ganze Menü Strip habe ich entfernt und dafür in der Hauptform einen Button "Einstellungen" hinzugefügt

      ob man in den DGVs Zeilenhöhe und Zeilenkopfbreite frei wählbar lässt, ist Geschmacksfrage

      Für mich sollten diese Werte fix sein. Als ich die DGVs erstellt habe, hab ich aber die entsprechenden Settings nicht gefunden und später hab ichs vergessen.
      Ist jetzt alles fix.

      Man kann zwar viele Temperaturen (5er Schritte) beim Tee angeben, aber da die Gefäßtemperaturen nur in 10er-Schritten verfügbar ist, gibt es bei Tee mit 85 °C Solltemperatur Probleme

      Tee kann jetzt nur noch mit Temperaturen von 100 / 90 / 80 / 70 / 60 Grad angelegt werden

      die default-Position ist mit "unten rechts" eingestellt. Dann taucht das Fenster aber oben links auf - aber auch nicht ganz; und: in der Liste gibt es als Auswahl den default-Eintrag gar nicht, sondern nur u.a. "rechts unten"

      Keine Ahnung warum - aber ich vermute, weil ich die Startup Position dieser Form nicht auf "Manual" gestellt habe.
      Dies habe ich geändert.

      Zu deiner Interpolation der Temperaturen:
      Du könntest ja alternativ auch ne Interpolation der Temperaturen einbauen. Wenn Du Die Zeiten von 100 °C -> 90 -> 80 -> 70 -> 60 hast, kannst Du ja ausrechnen lassen, wie lange das Wasser im ausgewählten Gefäß stehen muss, bis es ne bestimmte Temperatur erreicht hat. (vielleicht ist es linear, vielleicht nicht)

      Dann muss ich ja einige Reverenzwerte messen und viel ausprobieren. Das ist mir zu lästig.
      Denn immerhin wird ja so ein Gefäß nur ein einzeiges Mal angelegt.


      Darüber hinaus habe ich noch die gesamte Einstellungenform "frmEinstellungen" entfernt.
      Das ganze befindet sich jetzt, etwas schönes geordnet, auf einem unsichtbaren Panel über der Hauptform.
      Ein Klick auf den Button Einstellungen macht hier die Visible Eigenschaft True.
      Ist zwar im Designer furchtbar lästig, weil dieses Panel jetzt immer erst verkleinert werden muss, aber ich finds im Programm dann deutlich angenehmer.
      Gibt es hier einen Trick, dass ich dieses Panel auch im Designer verstecken kann?
      Dateien
      • Tea Timer.zip

        (2,3 MB, 4 mal heruntergeladen, zuletzt: )
      Ok soweit. Ein paar Kleinigkeiten.
      Zu den Gefäßeinstellungen:

      Der Formtitel ist noch "frmneuesGefaess" und der Erstbenutzer weiß auch gar nicht, was er da einstellen soll: Die Abkühlzeiten in Minuten und Sekunden.


      Das P bei Ton abspielen ist etwas abgeschnitten.
      Die default-Einstellung ist noch immer falsch.


      Startet man das Programm zum ersten Mal, wird der Timer immer noch zwischen Zentrum und oben links angezeigt.

      btw: Bevor Du das Programm hochlädst: Lösch den .vs-Ordner - der ist fast 8 MB groß und wird eh beim Tester automatisch neu erzeugt. Also überflüssig.
      Und: Ich mag die Standard-Hintergrundgraufarben nicht. Sieht irgendwie altbacken aus. Aber Ansichtssache.
      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

      Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
      Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
      Ja Perfekt :o)
      Sorry, dass mit der "Default" Einstellung bei Position habe ich nicht gerafft.
      Jetzt mit Bildchen ist alles klar. Das sollte ja dann auch erklären, warum die Timer Form falsch Positioniert wird.
      Denn der Fall "unten rechts" was ja (falscher) Default ist, wird bei der Positionsabfrage ja garnicht berücksichtigt.
      Es kommt also zu zu keinen WHEN Zweig und dementsprechend wird ja dann auch keine Position festgelegt.

      Ich habe übrigens noch zwei Sachen verändert (habe ich gestern vergessen zu erwähnen).
      Beim ersten Zugriff auf die Tee.xml im Form Load erfolgt nun eine Prüfung ob die Datei überhaupt existiert.
      Und die Net Version habe ich auf 4.5 runtergeschraubt.
      nUpdate macht irgendwas Asynchrones - keine Ahnung ob das auch mein Programm betrifft, aber deswegen "nur" 4.5 .

      Dann habe ich mir die installer Extension für mein Visual Studio 2019 installiert und in meinem Tea Timer Projekt ein neues installer Projekt erstellt.
      Mein fertiges Setup meldet aber ein fehlendes Net.Framework 4.6.2 (was glaube ich die ursprüngliche Version des Tea Timer war)
      Ah ich habs gelöst.
      Die benötigte .Net Version lässt sich im Installer einstellen - ist nur ganz schön versteckt.

      Nun gehts weiter :(
      Beim schließen des Programmes wird ja jedesmal die Tee.xml aktualisiert.
      Wenn ich diese, wie bisher, im Hauptverzeichnis des Programmes liegen lasse, müsste ich meinen Tea Timer ja als Admin ausführen - was keine Option ist.
      Ich nehme an ein speichern dieser Datei als Admin, ohne zutun des Benutzers (also ohne Klick auf "Ja", wenns System fragt, ob die Datei als Admin ausgeführt werden soll) geht einfach nicht.
      Also muss die Tee.xml irgendwo anders hin. Gibt es hierfür eine Art Standartordner,der für sowas vorgesehen ist?

      Und eine Frage für die Zukunft:
      Wenn ich Settings meines Programms in externen Dateien speicher, also einer .ini, zum Beispiel, dann sollte diese ja denke ich am besten im Hauptverzeichnis des Programmes liegen. Aber diese kann ich ja dann ohne Adminrechte ebenfalls nicht ändern.
      Wie handlet man so etwas in der Praxis?
      Hallo @DerSmurf ,

      Gibt es hierfür eine Art Standartordner,der für sowas vorgesehen ist?


      die meisten Programme nutzen "Benutzerordner"/AppData/Local oder "Benutzerordner"/AppData/Roaming zum Abspeichern (in einem Unterordner mit Programmnamen). Sollte meines Wissens nach keine Adminrechte erfordern.
      Edit: Übrigens: Falls du den Ordner nicht findest, er ist per Default auf "Versteckt". Schalte in dem Fall Ausgeblendete Objekte anzeigen ein oder navigier über die Adressleiste hin.

      Grüße,
      Felixprogram
      ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
      ● Webseiten-Programmierer aus Leidenschaft
      ● Ich programmiere/kann: HTML, CSS, JavaScript, PHP, (JQuery) und Java

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Felixprogram“ ()

      Felixprogram schrieb:

      ie meisten Programme nutzen "Benutzerordner"/AppData/Local oder "Benutzerordner"/AppData/Roaming zum Abspeichern (in einem Unterordner mit Programmnamen).
      Das kann je nach System und Benutzer variieren.
      Der saubere Weg, auf den AppData-Ordner zu kommen, ist im Framework abrufbar: Environment.SpecialFolder.ApplicationData
      --
      If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
      --