Vega.Style — Theme-System: Werte, Regeln, Kaskade

Der Grundsatz: ein Control beschreibt Semantik („ich bin ein Knopf, meine Rolle ist primary, ich werde gerade überfahren“), das Thema beschreibt die Darstellung. Der Resolver bringt beides zusammen und liefert einen Stil, in dem jeder Wert feststeht — der Renderer löst nichts mehr auf. Diese Unit ist das Regelwerk; die schlichte Werteschicht daneben ist Vega.Theme.

Quelldatei: Vega/Style.lyx

Alle Units · Alle Steuerelemente · Vega VCL


Klassen

Klasse Basis Zweck
TStyleQuery Die Frage an den Resolver: welcher Typ, welche Klassen, welcher Zustand
TStyleRegistry Namen für Controltypen und Stilklassen, damit Vergleiche über Zahlen laufen
TStyleResolver Löst die Kaskade zu einem fertigen Stil auf
TStyleRule Eine Regel: Auswahl (Typ, Klasse, Zustand) und die Werte dazu
TStyleSet Ein Satz Stilwerte samt Angabe, welche gesetzt sind
TStyleSheet Ein Regelsatz — eine Stufe der Kaskade
TStyleTrace Antwort auf „woher kommt dieser Wert“ — für die Fehlersuche im Thema

Konstanten

Name Typ Wert Bedeutung
SV_UNSET int64 0 Wert ist nicht gesetzt
SV_INHERIT int64 1 Wert kommt vom Elternteil
SV_SET int64 2 Wert steht fest
SP_BACKGROUND int64 0 Hintergrundfarbe
SP_FOREGROUND int64 1 Vordergrund-/Textfarbe
SP_BORDER_COLOR int64 2 Rahmenfarbe
SP_FOCUS_RING_COLOR int64 3 Farbe des Fokusrings
SP_SELECTION_BG int64 4 Hintergrund der Auswahl
SP_SELECTION_FG int64 5 Textfarbe der Auswahl
SP_MARK_COLOR int64 6 Farbe des Hakens bzw. Punktes
SP_INDICATOR_BG int64 7 Hintergrund des Kästchens
SP_INDICATOR_BORDER int64 8 Rahmen des Kästchens
SP_TRACK_COLOR int64 9 Farbe der Laufschiene
SP_ACCENT_COLOR int64 10 Akzentfarbe
SP_SHADOW_COLOR int64 11 Schattenfarbe
SP_FIRST_METRIC int64 12 Grenzmarke: ab hier beginnen die Maße
SP_BORDER_WIDTH int64 12 Rahmenstärke
SP_BORDER_RADIUS int64 13 Eckenrundung
SP_PADDING_LEFT int64 14 Innenabstand links
SP_PADDING_RIGHT int64 15 Innenabstand rechts
SP_PADDING_TOP int64 16 Innenabstand oben
SP_PADDING_BOTTOM int64 17 Innenabstand unten
SP_MARGIN_LEFT int64 18 Außenabstand links
SP_MARGIN_RIGHT int64 19 Außenabstand rechts
SP_MARGIN_TOP int64 20 Außenabstand oben
SP_MARGIN_BOTTOM int64 21 Außenabstand unten
SP_MIN_WIDTH int64 22 Mindestbreite
SP_MIN_HEIGHT int64 23 Mindesthöhe
SP_PREF_WIDTH int64 24 Wunschbreite
SP_PREF_HEIGHT int64 25 Wunschhöhe
SP_MAX_WIDTH int64 26 Höchstbreite
SP_MAX_HEIGHT int64 27 Höchsthöhe
SP_FONT_SIZE int64 28 Schriftgröße
SP_INDICATOR_SIZE int64 29 Größe des Kästchens
SP_GAP int64 30 Abstand zwischen Bild und Text
SP_ICON_SIZE int64 31 Symbolgröße
SP_FOCUS_OFFSET int64 32 Abstand des Fokusrings
SP_SHADOW_X int64 33 Schattenversatz waagerecht
SP_SHADOW_Y int64 34 Schattenversatz senkrecht
SP_SHADOW_BLUR int64 35 Weichzeichnung des Schattens
SP_SHADOW_SPREAD int64 36 Ausdehnung des Schattens
SP_LAST_METRIC int64 36 Grenzmarke: bis hier reichen die Maße
SP_FONT_WEIGHT int64 37 Schriftstärke
SP_OPACITY int64 38 Deckkraft
SP_UNDERLINE int64 39 Unterstrichen
SP_LINE_HEIGHT int64 40 Zeilenhöhe
SP_ANIM_DURATION int64 41 Dauer einer Überblendung
SP_ANIM_EASING int64 42 Verlaufskurve einer Überblendung
SP_FIRST_STRING int64 43 Grenzmarke: ab hier beginnen die Zeichenketten
SP_FONT_FAMILY int64 43 Schriftfamilie (Zeichenkette)
SP_ICON_NAME int64 44 Symbolname (Zeichenkette)
SP_LAST_STRING int64 44 Grenzmarke: bis hier reichen die Zeichenketten
SP_COUNT int64 64 Anzahl der Stileigenschaften
INV_PAINT int64 1 Änderung erfordert nur Neuzeichnen
INV_LAYOUT int64 2 Änderung erfordert neues Layout
INV_MEASURE int64 4 Änderung erfordert neues Ausmessen
ST_NONE int64 0 Zustand: keiner
ST_HOVER int64 1 Zustand: Zeiger darüber
ST_SELECTED int64 2 Zustand: ausgewählt
ST_CHECKED int64 4 Zustand: angehakt
ST_INDETERMINATE int64 8 Zustand: unbestimmt
ST_FOCUSED int64 16 Zustand: hat den Fokus
ST_PRESSED int64 32 Zustand: gedrückt
ST_READONLY int64 64 Zustand: nur lesbar
ST_DRAGGING int64 128 Zustand: wird gezogen
ST_DROP_TARGET int64 256 Zustand: mögliches Ablageziel
ST_SUCCESS int64 512 Zustand: Erfolg
ST_WARNING int64 1024 Zustand: Warnung
ST_ERROR int64 2048 Zustand: Fehler
ST_DISABLED int64 4096 Zustand: gesperrt
ST_COUNT int64 14 Anzahl der Zustände
SEL_ANY int64 0 - 1 Auswahlregel: gilt für jeden Typ bzw. jede Klasse
VEGA_MAX_THEME_DEPTH int64 8 Wie tief Themen einander erweitern dürfen
TOK_NUMBER int64 0 Wertart beim Lesen: Zahl
TOK_COLOR int64 1 Wertart beim Lesen: Farbe
VEGA_MAX_TYPES int64 64 Höchstzahl registrierter Controltypen
VEGA_MAX_CLASSES int64 4 Höchstzahl registrierter Stilklassen
VEGA_MAX_SHEETS int64 8 Höchstzahl der Regelsätze in der Kaskade
SRC_NONE int64 0 Herkunft: keine
SRC_FRAMEWORK int64 1 Herkunft: Framework-Mindestwerte
SRC_SYSTEM int64 2 Herkunft: Systemthema
SRC_APP int64 3 Herkunft: Anwendungsthema
SRC_SCOPE int64 4 Herkunft: Geltungsbereich
SRC_POLICY int64 5 Herkunft: Richtlinie (z. B. Barrierefreiheit)
SRC_EXPLICIT int64 6 Herkunft: am Control ausdrücklich gesetzt
SRC_RUNTIME int64 7 Herkunft: zur Laufzeit gesetzt
VEGA_MAX_SCOPES int64 4 Höchstzahl der Geltungsbereiche
A11Y_NONE int64 0 Barrierefreiheit: nichts
A11Y_HIGH_CONTRAST int64 1 Barrierefreiheit: hoher Kontrast
A11Y_LARGE_TEXT int64 2 Barrierefreiheit: große Schrift
A11Y_REDUCED_MOTION int64 4 Barrierefreiheit: weniger Bewegung

Freie Funktionen

Signatur Zweck
StylePropInvalidation(prop: int64): int64 Was diese Eigenschaft bei Änderung nach sich zieht: neu zeichnen, ausmessen, Layout
StylePropIsMetric(prop: int64): bool Ist die Eigenschaft ein Maß
StylePropIsString(prop: int64): bool Ist die Eigenschaft eine Zeichenkette
StyleStringId(s: pchar): int64 Zeichenkette in der Tabelle ablegen und Nummer liefern
StyleStringAt(id: int64): pchar Zeichenkette zu einer Nummer
StateRank(bit: int64): int64 Rang eines Zustandsbits — entscheidet, welche Regel gewinnt
StateMaskWeight(mask: int64): int64 Gewicht einer ganzen Zustandsmaske
NewStyleSet(): TStyleSet Erzeugt einen leeren Stilsatz
NewStyleSheet(id: pchar): TStyleSheet Erzeugt einen Regelsatz mit dieser Kennung
StyleRegistry(): TStyleRegistry Die Registry der Typ- und Klassennamen
SourceName(src: int64): pchar Klartextname einer Herkunft (SRC_*)
NewStyleQuery(): TStyleQuery Erzeugt eine leere Anfrage
NewStyleTrace(): TStyleTrace Erzeugt eine leere Herkunftsauskunft
ExplainStyle(res: TStyleResolver, q: TStyleQuery, explicitProps: TStyleSet, runtime: TStyleSet, prop: int64): TStyleTrace Sagt für eine Eigenschaft, welche Regel gewonnen hat und warum
ScopeMaySet(prop: int64): bool Darf ein Geltungsbereich diese Eigenschaft überhaupt setzen
AppResolver(): TStyleResolver Der Resolver der laufenden Anwendung
StylePropByName(name: pchar): int64 Eigenschaftsnummer zu einem Namen aus der Themendatei
StylePropName(prop: int64): pchar Name einer Eigenschaftsnummer
StylePropIsColor(prop: int64): bool Ist die Eigenschaft eine Farbe
StyleGetString(s: TStyleSet, prop: int64, fallback: pchar): pchar Zeichenkettenwert aus einem Stilsatz, mit Ersatzwert
StyleStateByName(name: pchar): int64 Zustandsbit zu einem Namen aus der Themendatei

Zu beachten

  • Ein Control setzt keine Farbe, sondern eine Rolle: SetRole(„primary“). Alles Weitere entscheidet die Kaskade.
  • Die Herkunft eines Wertes lässt sich nachschlagen — ExplainStyle beantwortet „warum ist der Knopf hier grau?“, ohne im Thema zu raten.
  • Reihenfolge der Kaskade: Framework, System, Anwendung, Geltungsbereich, Richtlinie, ausdrücklich gesetzt, Laufzeit — später gewinnt.
  • Die ST_*-Zustände sind Bits: eine Regel für ST_HOVER | ST_PRESSED wiegt schwerer als eine für ST_HOVER allein.

Abhängigkeiten