AngleGadget - "Canvas"-Update + mehr Funktionen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

AngleGadget - "Canvas"-Update + mehr Funktionen

Beitrag von STARGÅTE »

UPDATE HIER

Tachchen,

passend zum PB 4.40 Final erscheinen, möchte ich hier mein AngleGadget vorstellen:

AngleGadget.pb - Quellcode mit Beispiel.
(Link veraltet)
wenn man es nicht für Windows nutzt, müssen GetSysColor_() ersetzt werden!)

AngleGadget(Gadget, x, y, Width, Ticks, Flags#False)
  • Gadget - kann eine beliebige Gadget-Nummer sein oder #PB_any]
  • x, y - Position des Gadgets
  • Width - Breite (und damit auch Höhe) des Gadgets (also nur Quadratisch)
  • Ticks - "Einrast"-Stücke des Vollwinkels 360°
  • Flags - kann 0 oder #PB_Angle_Ticks, welches dann an den Ticks eine Linie darstellt.


Die Naden kann nur mit Klick bewegt werden (kein Ziehen!).
Wird ein Gadget mit 4 Ticks erstellt, so gibt es nur 0°, 90°, 180°, 270°. 36 Ticks wären 360° in 10° Schritten.
Auch nur diese Winkel werden einrasten.

GetAngleGadgetState(Gadget) und SetAngleGadgetState(Gadget, State.f) können benutzt werden um den Winkel aus- oder einzulesen. Auch hier gilt das z.B. der Winkel 30° bei einem Gadget mit 4 Ticks zu 0° wird ...


Würde mich freue wenn der eine oder andere es austestet, und ggf. Verbesserungen hat oder Wünsche.


UPDATE HIER
Zuletzt geändert von STARGÅTE am 06.07.2011 14:26, insgesamt 5-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Rokur
Beiträge: 167
Registriert: 29.12.2005 09:58
Computerausstattung: Intel Core2 Quad (4x2,4 GHz), 4096 MB RAM, GForce 8800GTX 786 MB
Windows XP 32 Bit, PureBasic 4.40 (x86)

Re: AngleGadget - "Kreis"-TrackBar für Winkel

Beitrag von Rokur »

Sehr schön, gefällt mir gut. :allright:

Was mir aufgefallen ist:
Bei großen Winkelangaben (>13stellig) wird von dem Zeiger nur noch eine kurze weiße Linie gezeichnet.

Vorschläge für zukünftige Versionen:
- Read-only Modus, wenn man das Gadget nur zur Anzeige verwenden möchte.
- Zeiger mit der Maus ziehen möglich
- Unterstützung für eigene Zeiger-Images / Hintergrundbilder

Mit eigenen Images und einer Ziehmöglichkeit mit der Maus könnte man dein Gadget dann für optisch schöne Drehregler aller Art einsetzen.
WinXP 32 Bit, PureBasic 4.40 (x86)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: AngleGadget - "Kreis"-TrackBar für Winkel

Beitrag von NicTheQuick »

Ohne es zu testen hätte ich auch noch zwei Verbesserungsmöglichkeiten:
- Man könnte einen Start- und Endwert setzen, sodass man nur Winkel zwischen start und ende einstellen kann.
- Außerdem noch ein optisches Start und Ende. Das heißt bei 9 Uhr wäre zum Beispiel -90° (start) und 3 Uhr wäre dann 90° (ende).
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: AngleGadget - "Kreis"-TrackBar für Winkel

Beitrag von STARGÅTE »

Bei großen Winkelangaben (>13stellig) wird von dem Zeiger nur noch eine kurze weiße Linie gezeichnet.
Jo weils dann Unendlich ist ^^, korrigier ich noch ...

Vorschläge für zukünftige Versionen:
- Read-only Modus, wenn man das Gadget nur zur Anzeige verwenden möchte.
- Zeiger mit der Maus ziehen möglich
- Unterstützung für eigene Zeiger-Images / Hintergrundbilder


- Read-only wird geben, geht klar, auch das ein gadget Aktiv sein kann und man mit den Tasten steuern kann.
- Das ich den Zeiger mit der Maus zeihen kann, ist nur schwer möglich, weil das Gadget ein Image ist und bei einer daueraktuallisierung flimmern würde ... mal sehen was ich da machen kann.
- Eigene Zeiger sind unmöglich, weil diese Bilder ja gedreht werden müssten und es gibt noch kein RotateImage für irgendwelche Winkel.

- Man könnte einen Start- und Endwert setzen, sodass man nur Winkel zwischen start und ende einstellen kann.
Hm jo wäre möglich, nur wie sollen das nicht erreichbare Winkel aussehen ? grau ? mal sehn ...
Außerdem noch ein optisches Start und Ende. Das heißt bei 9 Uhr wäre zum Beispiel -90° (start) und 3 Uhr wäre dann 90° (ende).
Du meinst das man das Gadget an sich dreht, sodass 0° nicht immer nach Rechts zeigen ...


Bei diesen ganzen Flags muss ich mal gucken wie ich die Parameter anordne
Oder ob ich n art SetAngleGadgetAttribute(#Gadget, Attribut, Wert) mache, sodass man dann dort alles detailiert einstellt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Crawler
Beiträge: 110
Registriert: 08.02.2009 19:52
Computerausstattung: PB 4.41
Win7 64bit

Re: AngleGadget - "Kreis"-TrackBar für Winkel

Beitrag von Crawler »

Bin zwar noch nicht dazu gekommen, das im Einzelnen zu testen, will aber trotzdem meinen Senf abgeben:

Schönes Gadget! Die Einstellung mit der Maus würde ich so realisieren, dass der Zeiger nur bei den Ticks einrasten kann, daher muss auch nicht ständig der Zeiger neu gezeichnet werden. Wenn die Ticks beispielsweise automatisch im 10°-Raster angeordnet werden könnten, ließe sich der Regler schon gut genug bedienen, fürs Feintuning täte es immer noch die manuelle Eingabemethode.
Sympatisch wäre mir auch die die Variante, wie sie ein herkömmliches Poti bietet: eine Standardabdeckung der Regelstrecke nur über 270°, könnte man ja per Flag ändern.
Und zu guter letzt fänd auch ich alternative Zeigerformen interessant, im einfachsten Fall eine Art Drehknopf mit Positionsmarkierung (Strich oder Punkt).
PB 4.41 | Win7 64bit
Little John

Re: AngleGadget - "Kreis"-TrackBar für Winkel

Beitrag von Little John »

Hallo Stargate,

ich brauche es im Moment nicht, gefällt mir aber gut!
Ich finde, die Anzeige auf dem Gadget sollte eine Nulllinie haben:
Position am besten vom Benutzer frei bestimmbar, default evtl. bei 0 Uhr?

Wirklich tolle Idee. :allright:

Gruß, Little John
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: AngleGadget - "Kreis"-TrackBar für Winkel

Beitrag von STARGÅTE »

Wie angekündigt, möchte ich nun die neue Version des AngleGadgets vorstellen, welche mit dem neuen (4.60) CanvasGadget arbeitet.

Im zuge des Updates bietet das gadget nun auch noch eine Reihe weiterer Funktionen:
  • Orientierung
  • offene oder geschlossne Skalar
  • Tastatur- und Mausfunktionen schon integriert (Fokus, Tab, Hoch, Runter, Mausrad, ...)
  • frei definierbare Beschriftung
  • automatische Ausrichtung (auch mit Beschriftung) zur optimalen Platzausnutzung
Direkt-Link: AngleGadget2.pb

Hier ein Beispiel:
Bild


Syntax:
Der Syntax ist analgo um TrackBarGadget aufgebaut, mit Min und Max kann das Intervall für State festgelegt werden.
AngleGadget(#Gadget, X, Y, Width, Height, Min, Max)

Zusätzlich gibt es verschiedene Attribute für das Gadget welche mit
SetAngleGadgetAttribute(#Gadget, Attribute, Value)
geändert werden können:
Attribute =
  • #AngleGadget_NullState
    Legt fest, in welchem Winkel sich der minimale State-Wert befindet.
    Value = Winkel in Grad
  • #AngleGadget_Length
    Legt fest, wie lang (in Grad) die Skalar ist. 360° entsprechen einem Vollkreis, sodass Min=Max ist.
    Value = Länge in Grad
  • #AngleGadget_MinorTicks
    Legt fest, wie viele kleine Striche gemacht werden sollen. Standard ist die Anzahl der möglichen State-Werte
  • #AngleGadget_MajorTicks
    Legt fest, wie viele große Striche gemacht werden sollen. Standard ist einer bzw. zwei bei Min und Max
  • #AngleGadget_MajorLabel
    Definiert die für die Beschriftung der großen Striche verwendetet Prozedur (Callback).
    Aufbau der Prozedur: Prototype.s AngleGadgetLabel(State.i)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten