Grafische Darstellung von Messwerten

  • Etwas ist mir beim rummspielen schon aufgefallen und zwar wenn die Balken ihre Farbe ändern oder auch kurz davor verschwinden die "Zahlen"

    Zeilen 171, 172 und 172 auskommentieren/löschen, Zeilen 164, 165 und 166 aktivieren.

    Das Verschwinden beruht auf der einfachen Tatsache, dass ein Control in den Vordergrund geholt wird, sobald es angesprochen wird und somit alle darunterliegenden Controls an den überlappenden Stellen überdeckt.

    Ich kenne ein paar Methoden, die dem entgegenwirken:

    • Die Hintergrundfarbe eines Controls auf "unsichtbar" setzen, damit darunterliegende Controls durchscheinen können
    • Die Transparenz eines Controls ändern, damit darunterliegende Controls durchscheinen können
    • Über den Controls ein Child-Window mit transparentem Hintergrund erstellen, in diesem dann die Control mit transparenter Hintergrundfarbe erstellen, die nicht überdeckt werden sollen.

    Hier wird auf einen Blick erkennbar, dass der Kernpunkt bei allen Methoden die Transparenz ist, welche naturbedingt aber (leider) auch den (unerwünschten) Nebeneffekt mit sich bringt, dass sie sich auf die Farben der sich überlappenden Controls auswirkt. Hier muss man also mit den Transparenzen/Farben experimentieren, um ein ansprechendes Ergebnis zu erhalten.

    Ein völlig anderer Weg wäre, die komplette Progressbar mit GDIplus zu erstellen, wofür es bereits eine UDF von @progandy gibt. Leider stürzen beide Examples bei mir (Windows 10 X64) schon nach kuzer Zeit ab.

    Ich experimentiere noch...

    Und dann hätte ich noch gern die Farbe der Anzeige geändert

    Anzeige --> Progressbar
    Farben und Transparenzen kannst du in der Demo mit den globalen Variablen $g_aColors, $g_iProgressWinTransparency und $g_iProgressBarTransparency bestimmen. Beim Erzeugen des Child-Windows für die Progressbars besorge ich mir nun die Hintergrundfarbe des Parent-Windows. Die brauchst du also nur dann ändern, wenn es nicht dieselbe Hintergrundfarbe haben soll.

    Im Laufe des Abends, spätestens aber morgen, schiebe ich eine aktualisierte Version der Demo hoch... muss da aber erst noch ein paar Sachen korrigieren.

    Jetzt noch mal zu den Werten. Müssen diese fest programmiert werden von Dir zwegs Umrechnung?

    Nein... in der Demo verwende ich der Einfachheit halber fixe Werte, in der fertigen Version ist die Umrechnung selbstverständlich anpassbar - die Sensorwerte werden dann entweder an eine Funktion übergeben, welche die korrigierten Werte als Ergebnis liefert, oder die Umrechnungsfaktoren werden als globale Variablen/Konstanten deklariert.

    Und das es so eine Herausforderung ist war mich echt nicht bewusst

    Wenn du für die Progressbars keine Skala brauchst, würde sich die Herausforderung damit auf 30% reduzieren... :D

    3 Mal editiert, zuletzt von Bitnugger (25. Mai 2017 um 01:00)

  • Also das mit den Farben hab ich schon mal hinbekommen, für mich ist das schon ein Erfolg :rofl:


    So sieht es jetzt aus und so gefällt es mir :D

    Das mit den Werten hört sich gut an :thumbup:


    Jetzt hab ich noch eine Frage zur späteren anzeige des Fensters:

    Ist es möglich dieses Fenster auch später so darzustellen wie im Screenshot oben von mir? Also ich meine ohne diesen "Rand" mit dem X zum Fenster schließen? Ich hoffe Du weist was ich meine :rolleyes:

  • Also ich meine ohne diesen "Rand" mit dem X zum Fenster schließen?

    Du kannst die Styles rausnehmen. $WS_POPUP und $WS_POPUPWINDOW
    So hast du die Schließen-Knöpfe nicht mehr


    So hast du absolut keinen Rand mehr:


    Wenn du die Styles später im Programm verändern möchtest kannst du https://www.autoitscript.com/autoit3/docs/f…GUISetStyle.htm nutzen.

  • Ist es möglich dieses Fenster auch später so darzustellen wie im Screenshot oben von mir?

    Ja sicher doch... in der Demo habe ich das Fenster mit Rahmen erstellt, damit du es auch mit der Maus schließen kannst. Du kannst es auch einfach mit GuiDelete($g_hGuiProgressbars) schließen.

    Wenn die Progressbars mit Skala angezeigt werden, muss das Fenster aber etwas breiter sein.

  • So, ich habe nun alle echten Probleme in den Griff bekommen, der Rest ist nur noch Routine und Fleißarbeit. Nun überlege ich, wie ich dir das Erstellen der Progressbars am einfachsten gestalten kann, aber auch, ob ich nicht doch besser eine UDF daraus mache.

    Entgegen dem was ich in Post #21 sagte, ist Transparenz nur für die Hintergrundfarbe nötig, um die Labels immer sichtbar zu halten, kann bei Bedarf aber auch für die GUI verwendet werden.

    Was wäre dir lieber... eine Version speziell zugeschnitten auf deine Anfrage, oder eine Version in Form einer UDF, um die Progessbars auch für andere Scripte nutzbar zu machen?

    Die spezielle Version hätte ich in 2-3 Tagen fertig, die UDF in 1-2 Wochen.

  • Das hört sich ja sehr gut an :klatschen:

    Also mir würde es eigentlich schon reichen wenn es einfach auf die Anfrage hin zugeschnitten wäre weil das ja nur eine Verbrauchsanzeige an der Maschine sein soll, und ich die Werte nicht weiterverarbeiten will.

    Daher würde ich sagen das Du dir den Aufwand das ganze als UDF zu Programmieren nicht machen brauchst ;)

  • Ok, dann mache ich erst deine spezielle Version fertig... und später, wenn die letzten Details der "Mineraldatenbank" fertig sind, die ich dem User @Neight versprochen habe, werde ich das als UDF umsetzen. Er wartet schon ewig darauf, dass ich endlich fertig werde... besonders witzig ist, dass ich durch die Lösung für die Progressbar nun auch eine fiesen Bug in der Mineraldatenbank, mit dem ich schon seit Wochen zu kämpfen hatte, fixen konnte. :)

    Jetzt nochmal kurz zu den Details für die Progressbars... ich zähle mal in groben Zügen auf, was ich wie gedenke einzubauen... wenn etwas fehlt/nicht so ist wie du es dir gedacht hast/du noch Fragen hast, dann gib Bescheid.

    Progressbars erstellen:

    • Progressbars erstellen - mit oder ohne Skala
      Entsorgen kannst du die Progressbars dann einfach mit GuiDelete() - oder wenn es dir angenehmer ist, mit einer eigenen Funktion.
    • Schriftart, Farben und Transparenz für GUI und Controls frei wählbar.
      Die Schriftgröße der Controls (Labels) ist abhängig von der Größe des GUI, in dem die Progressbars erstellt werden und wird automatisch berechnet.
    • Progressbars/Skalen anzeigen/verstecken, Labeltexte, Position, Größe, Transparenz und Farben kannst du jederzeit mit einem Funktionsaufruf ändern.
      Die Größe der Skalen wird automatisch berechnet, der Marker (eg. ^) ist allerdings frei wählbar, kann aber nachträglich nicht geändert werden.
    • Für jeden Sensor gibt es eine eigene Funktion, mit der die übergebenen Werte vor dem Setzen der Progressbars (bei Bedarf korrigiert und) umgerechnet werden.

    Zwingend erforderliche Parameter:

    • $iWidth, $iHeight, $iLeft, $iTop - Position und Größe des GUI, in dem die Progresbars erstellt werden.

    Optionale Parameter:

    • $hWnd - Handle des Parent Windows
    • $bSkala (True|False) (Default = False), Schriftart (Default = Courier New), Farben und Transparenz für GUI und Controls - kann als Array oder String ("|" als Trennzeichen) übergeben werden
    • Bereiche für die verschiedenen Farben der Progressbalken (Rot/Gelb/Grün) (max. 10 Bereiche)
      $aRangeCurrent[$iMin01, $iMax01, $iColor01, $iMin02, ...]
      $aRangeFlow[$iMin01, $iMax01, $iColor01, $iMin02, ...]

    Hinzu kommen noch ein paar Variablen, die du als Rückgabewert beim Erstellen der Progressbars bekommst, von denen du dann evtl. auch einige per Funktionsaufruf ändern kannst.
    Das Setzen der Progressbalken wird ebenfalls per Funktionsaufruf erledigt - wenn es nicht zu kompliziert wird, für jeden Label (Strom/Temp/Flow) separat.

    Updatefrequenz für die Progressbalken:
    Das Progress-Control ist relativ "träge" und braucht mindestens 20 ms, um seine Position zu ändern. Bei Werten darunter nimmt das Flackern der Labels deutlich zu! Empfohlener Wert: 50+ ms

    So, und jetzt bist du dran... :D

  • Na dann hat das ganze ja jetzt auch was positives wenn Du damit ein anderes Problem lösen konntest :thumbup:


    Zitat von Bitnugger

    So, und jetzt bist du dran...


    Ehrlich gesagt ist mir nicht so recht klar was Du jetzt hier von mir willst ?(
    Durch meine Ausreichende nicht vorhandenen Kenntnisse des Programmierens versteh ich hier nur mehr oder weniger Bahnhof :rolleyes:

  • Ehrlich gesagt ist mir nicht so recht klar was Du jetzt hier von mir willst

    Lies dir einfach den Text von mir aus Post #28 noch mal gut durch und wenn du dazu noch Fragen oder Änderungswünsche hast, kannst du sie äußern, bevor ich alles fertig habe.

    Wenn aber soweit alles ok ist, dann mache ich es so wie beschrieben und anschließend können wir dann noch mal darüber reden, ob noch Änderungen nötig sind. :D

  • Ja, dachte ich mir schon... bin in etwa zu 50% fertig... aber momentan habe ich viel um die Ohren... Bruder im Krankenhaus, mein bester Freud auch... mir geht es auch nicht sonderlich gut... gedulde dich noch ein paar Tage. :whistling:

  • Hi, doch, aber mit Lust hat es wenig zu tun, denn ich bin leider noch einige Zeit ausser Gefecht... bin nun zum zweiten Mal an den Bandscheiben operiert worden. Momentan kann ich nur kurze Zeit vor dem PC sitzen... aber ich denke mal, in 1-2 Wochen bin ich wieder fit genug, um dir dein Script fertig zu schreiben.

  • Bitnugger sorry das wusste ich nicht. Wünsche Dir natürlich gute Besserung :thumbup:

    Es ist immer noch nicht so eilig mit dem Programm also nur kein Stress. Wenns bei Dir geht dann machste was und wenn nicht dann nicht ganz einfach.

    Ich bin ja froh drumm das Du mir hilfst ;)

    Xenobiologist das sieht auch sehr interessant aus werde ich mir bei Gelegenheit mal anschauen. Danke für den Tipp