• Offizieller Beitrag

    EDIT 04.03.2022

    v 0.3

    • neu: _StatusbarSetOnEvent
    • neu: $g_iStatusAlignLeft, speichert den Standard-Status eines neu erstellten Parts
    • gefixed: Fehler beim Wechsel zwischen Nicht-Standard-Status (__StatusbarSetPartAlign)

    EDIT 08.04.2020

    Ich habe die UDF noch etwas angepasst:

    Ich habe mir hier eine minimale Statusbar-Funktion erstellt. Die existierende UDF ist mir einerseits etwas zu überladen und andererseits zu unkomfortabel.

    Folgende Funktionen bietet meine UDF:

    • _StatusbarCreate (erstellt die Statusbar optional mit Text und dessen Ausrichtung, sowie Fontname, -größe, -style als extra Parameter)
    • _StatusbarSetText (ändert den Inhalt einer/mehrerer Parts)
    • _StatusbarSetAlign (ändert die Ausrichtung eines/mehrerer Parts)
    • _StatusbarSetColors (ändert die Text- und/oder Hintergrundfarbe einzelner/mehrer Parts)

    Ich habe mich zwar etwas an der bestehenden Statusbar-UDF orientiert, es gibt aber einige markante Unterschiede:

    • Die Breite der Parts wird angegeben (nicht die rechte Position).
    • Es sind nur die Breiten für n-1 Parts anzugeben, der letzte Wert wird aus dem verbleibenden Platz ermittelt!
    • Es sind für die Breite alle Parts anzugeben
    • Es kann als Breite "-1" übergeben werden. Für diese(n) Part(s) wird der verbleibende Platz mit anderen auf "-1" gesetzten Parts gleichmäßig aufgeteilt.
    • Bei der Breitenbestimmung entstehende (Rundungs)Differenzen werden zur Korrektur auf das letzte mit "-1", alternativ auf das letzte Part angewendet. 
    • Es existiert ein extra Parameter beim Erstellen, sowie eine eigene Funktion für die Ausrichtung der Parts.
    • Alle Parameter (Partbreite, Part-Index, Texte, Ausrichtung) können wahlweise als separierter String (Opt("GuiDataSeparatorChar")) oder Array übergeben werden
    • Die Text- und/oder Hintergrundfarbe einzelner/mehrerer/aller Parts kann per Funktion gesetzt werden

    Hier ein Bsp. Skript zur Veranschaulichung. Details sind den Funktionsbeschreibungen zu entnehmen.

    Galerie auf github:BugFix/AutoIt-Scripts

    DL bisher: 143

  • Hallo BugFix ,

    Das erklärt die Frage in der Shoutbox :)
    Ich finde das echt nice. Es ist deutlich kompakter und für mich bei der Drüberschau klarer als die Standard-UDF :thumbup:

    Danke fürs Teilen!

    Grüße autoiter

    • Offizieller Beitrag

    Mir ist gerade was aufgefallen:

    Es kann ja durchaus sein, dass ich für den letzten Part (den ich derzeit automatisch anpassen lasse) einen fixen Wert möchte. Also werde ich das noch ändern und dann für die Partgrößen auch je Part einen Wert pro Part anfordern.

    Aber nicht mehr heute.

    • Offizieller Beitrag

    Aber es fehlt noch eine Funktion "SetFont" (mit Fontgröße und Schriftart).

    Ja, klingt vernünftig.

    Dabei ist mir noch aufgefallen, dass ich einen kleinen Fehler drin habe: Beim Positionieren der Statusbar muss ich ja das Fenster um die Höhe der Statusbar vergrößern. - Das fehlt im Moment noch.

    To-Do:

    - Breitenangabe für alle Parts erledigt

    - Beim Positionieren der Statusbar Fenster um die Höhe der Bar vergrößern gestrichen - s. Hinweis

    - Funktionen für Fontgröße und -art erledigt, aber keine extra Funktion, sondern Parameter beim Erstellen

    - Funktionen für Color und BackColor erledigt

  • Bei Fontgröße frage ich mich wie das realisierbar sein soll, wenn du nicht gleich die Höhe der Statusbar vom benötigten Platz des Strings abhängig machst.

    Wenn man das anbieten möchte, wäre es wohl das einfachste (in der Umsetzung) den User diese Parameter bestimmen zu lassen.

    Grüße autoiter

  • Beim Positionieren der Statusbar muss ich ja das Fenster um die Höhe der Statusbar vergrößern.

    Das wäre m.E. ein grober Fehler!

    Die Statusbar sollte die Größe des Fensters als gegeben nehmen und sich dort einpassen.

    Der Coder muss selbst darauf achten, dass andere Controls dadurch nicht verdeckt werden. Was passiert denn z.B. wenn das Fenster bereits maximiert ist, oder die Größe via WM_GETMINMAXINFO im Script begrenzt wird?

    • Offizieller Beitrag

    Der Coder muss selbst darauf achten, dass andere Controls dadurch nicht verdeckt werden. Was passiert denn z.B. wenn das Fenster bereits maximiert ist, oder die Größe via WM_GETMINMAXINFO im Script begrenzt wird?

    Hmm, das ist wohl war. Stimmt, man sollte nicht versuchen alle Arbeit abzunehmen. Den Weg gehe ich inzwischen auch bei Errorhandling. In einer UDF achte ich darauf, dass es in der Funktion funktioniert, wenn die Parameter, wie im Kopf beschrieben, übergeben werden. Mögliche falsche Übergaben des Anwenders gehen ja den Ersteller einer UDF nichts an, dieses Errorhandling liegt dann in der Verantwortung des Anwenders.

    Also z.B.: If Not IsHwnd($param) ist völlig überflüssig, wenn im Funktionskopf steht, dass $param ein Handle zu sein hat. In dieser Richtung sind fast alle AutoIt-UDF hoffnungslos überfrachtet.

    Aber um auf das eigentliche Thema zurückzukommen, ich werde dann die verwendete Größe der Statusbar mit zurückgeben, dann kann der Anwender selbst für den genauen Platz sorgen.

  • Errorhandling in einer UDF... darüber kann man endlos diskutieren... hat für Anfänger den enormen Vorteil, dass Fehler so viel leichter lokalisierbar sind, für Profis aber eher ein Nachteil, weil diese Prüfungen das Script extrem verlangsamen können. Fehler, die fatale Folgen bei falscher Übergabe auslösen könnten, sollten jedenfalls immer so gut es geht überprüft werden.

    Aber um auf das eigentliche Thema zurückzukommen, ich werde dann die verwendete Größe der Statusbar mit zurückgeben, dann kann der Anwender selbst für den genauen Platz sorgen.

    Das würde ich mir auch sparen... das kann der Anwender doch leicht auch selbst mit ControlGetPos(), wenn er es denn braucht.