Vega.Control — Wurzel aller sichtbaren Elemente

Das Herz der VCL: Baum, Geometrie, Zeichnen, Ereignisse, Fokus, Anker. Vega arbeitet im Retained Mode — der Baum bleibt bestehen und wird neu gezeichnet, wenn sich etwas ändert; die Anwendung beschreibt nicht jedes Bild neu. Hier stehen außerdem die Handler-Typen, die jedes Control benutzt.

Quelldatei: Vega/Control.lyx

Alle Units · Alle Steuerelemente · Vega VCL


Klassen

Klasse Basis Zweck
TControl TComponent Basisklasse und zugleich roher Container

Schnittstellen

Name Zweck
IControlProps Kleiner Vertrag über Lage, Größe und Elternteil — damit Layoutcode nicht die ganze Klasse kennen muss

Typaliase

Name Ist Zweck
TNotifyEvent fn(sender: TControl): void Handler ohne Zusatzangaben: fn(sender: TControl): void
TMouseEvent fn(sender: TControl, x: int64, y: int64, button: int64): void Maus: Position, Taste, Zusatztasten
TKeyEvent fn(sender: TControl, key: int64, modifiers: int64): void Taste gedrückt oder losgelassen
TCharEvent fn(sender: TControl, cp: int64): void Eingegebenes Zeichen
TWheelEvent fn(sender: TControl, delta: int64): void Mausrad mit Drehrichtung
TPaintEvent fn(sender: TControl, canvas: TCanvas): void Zeichnen auf einem übergebenen TCanvas
TDragOverEvent fn(sender: TControl, source: TControl, x: int64, y: int64): bool Über einem möglichen Ziel; Rückgabe true nimmt an
TDragDropEvent fn(sender: TControl, source: TControl, x: int64, y: int64): void Etwas wurde abgelegt
TDragEndEvent fn(sender: TControl, target: TControl, x: int64, y: int64): void Ziehgeste beendet; target ist 0 bei Abbruch
TFocusFn fn(c: TControl): bool Haken, über den Vega.Dispatch das Fokussetzen einträgt

Konstanten

Name Typ Wert Bedeutung
VEGA_MAX_CHILDREN int64 64 Höchstzahl der Kinder eines Controls

Freie Funktionen

Signatur Zweck
SetFocusSetter(f: TFocusFn): void Trägt die Funktion ein, die den Fokus setzen kann — gerufen von Vega.Dispatch beim Start
NewControl(): TControl Erzeugt ein rohes TControl als Container

Zu beachten

  • Setter zeichnen neu, Felder nicht. c.Left := 20 verschiebt still, c.SetLeft(20) zeichnet neu. Für Berechnungen ist der direkte Feldzugriff richtig.
  • Handler sind freie Funktionen, keine Methodenzeiger: b.OnClick := AufKlick — ohne Klammern. Ein nicht gesetzter Handler ist 0.
  • Ein Control kennt den Fokus nicht selbst; deshalb der Umweg über SetFocusSetter. Derselbe Haken-Mechanismus trägt auch Kontextmenüs ein.
  • TFocusFn steht im Quelltext vor seiner ersten Verwendung — sonst macht lyxc still zwei Variablen daraus (#1665).
  • Kinder liegen in einer TObjectList mit Adressen, nicht in einem Inline-Array: ein [64]TControl würde Kopien statt Referenzen ablegen (#1646).

Abhängigkeiten