# statictext — `u_pbt_statictext` #

← Komponentenreferenz · Inhalt des Handbuchs

> Rich-Text-Block: Auszeichnung, Ausrichtungen, klickbare Links und Aktionen, Kopfzeilen-Optik, Laufschriftmodus (Marquee) und Ablagebereich für Dateien.

> ▶ Live ansehen — Demoanwendung, Kachel Statictext: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.

## Auf einen Blick #

Userobject | `u_pbt_statictext`
Item-Klasse | — (Komponente ohne Items)
Wofür | Ein PowerBuilder-`statictext` durch einen formatierten, klickbaren Textblock ersetzen, der als Kopfzeile, Laufschriftband oder Ablagebereich dienen kann
Opt-in-Optionen | `ib_auto_height`, `ib_track_mouse`, `ib_allow_drop`, `ib_selectable`, `ib_hover_effect`

## Schnellstart #

    // open-Event des Fensters
    uo_texte.is_text = "Willkommen bei [b][accent]PBToolboxAI[/accent][/b][br]" &
                       + "Lesen Sie die [hyperlink=https://pbtoolboxai.net]Dokumentation[/hyperlink]."
    uo_texte.is_align = uo_texte.ALIGN_CENTER
    uo_texte.is_valign = uo_texte.VALIGN_CENTER

Der Text akzeptiert die Rich-Text-Auszeichnung: Diese Komponente holt am meisten daraus heraus, denn sie ist die einzige, die `[hyperlink=…]`- und `[action=…]`-Bereiche wirklich klickbar macht.

## Konstanten #

Konstante | Wert | Für
--- | --- | ---
`ALIGN_START` · `ALIGN_CENTER` · `ALIGN_END` · `ALIGN_JUSTIFY` | `"start"` `"center"` `"end"` `"justify"` | `is_align`
`VALIGN_TOP` · `VALIGN_CENTER` · `VALIGN_BOTTOM` | `"top"` `"center"` `"bottom"` | `is_valign`

`start` und `end` sind logisch: Sie folgen der Schreibrichtung (Sprache und RTL). Die physischen Werte `left` und `right` werden weiterhin als Aliasnamen akzeptiert.

## Eigenschaften #

### Text und Formatierung #

Eigenschaft | Typ | Standard | Zweck
--- | --- | --- | ---
`is_text` | string | `""` | Der angezeigte Text, mit der Rich-Text-Auszeichnung: `[b]`, `[i]`, `[u]`, Farben, `[picture=…]`, `[hyperlink=…]`, `[action=…]`
`is_align` | string | `"start"` | Horizontale Ausrichtung: `ALIGN_START`, `ALIGN_CENTER`, `ALIGN_END`, `ALIGN_JUSTIFY`
`is_valign` | string | `"top"` | Vertikale Ausrichtung innerhalb des Steuerelements: `VALIGN_TOP`, `VALIGN_CENTER`, `VALIGN_BOTTOM`
`ib_wrap` | boolean | `true` | Automatischer Zeilenumbruch. `false` erzwingt eine einzige Zeile
`ib_ellipsis` | boolean | `false` | Kürzt bei `ib_wrap = false` den Überlauf mit Auslassungspunkten, statt ihn hart abzuschneiden
`ib_ellipsis_tooltip` | boolean | `false` | Opt-in: Wenn der Text nicht in das Feld passt, ihn vollständig in einem Tooltip zeigen (Auszeichnung inbegriffen). Ersetzt nie einen Tooltip, den Sie selbst mit `is_tooltip` oder `is_super_tooltip_*` gesetzt haben: Ihrer gewinnt
`is_font_family` | string | `""` | Standardschriftart des Blocks (leer = Schriftart des Designs)
`ii_font_size` | integer | `0` | Standardgröße in Punkt (`0` = Größe des Designs)
`il_text_color` | long | `-1` | Textfarbe als `RGB()` (`-1` = Farbe des Designs). `[color]`-Tags haben für ihren Abschnitt weiterhin Vorrang
`ii_line_spacing` | integer | `0` | Zeilenabstand in Prozent (`150` = 1,5 Zeilen; `0` = Standard)
`ib_enabled` | boolean | `true` | Block aktiv oder ausgegraut (Links und Aktionen sind inaktiv, wenn er ausgegraut ist)
`ib_selectable` | boolean | `false` | Opt-in: erlaubt dem Benutzer, den Text auszuwählen und zu kopieren (standardmäßig ausgeschaltet, wie bei einer Beschriftung)

### Blockoptik (die „Kopfzeilen“-Optik) #

Eigenschaft | Typ | Standard | Zweck
--- | --- | --- | ---
`il_back_color` | long | `-1` | Blockhintergrund als `RGB()` (`-1` = Hintergrund des Designs)
`il_border_color` | long | `-1` | Rahmenfarbe (`-1` = kein Rahmen)
`ii_border_width` | integer | `0` | Rahmenstärke in Pixeln (`0` = kein Rahmen)
`ii_corner_radius` | integer | `0` | Radius der Eckenrundung, in Pixeln
`ii_padding` | integer | `0` | Innenabstand in Pixeln (`0` = Wert des Designs)
`ib_hover_effect` | boolean | `false` | Opt-in: leichte Abdunklung beim Überfahren mit der Maus, für eine Beschriftung, die wie eine Schaltfläche wirkt

### Laufschriftmodus (Marquee) #

Eigenschaft | Typ | Standard | Zweck
--- | --- | --- | ---
`ib_marquee` | boolean | `false` | Verwandelt den Block in ein horizontal laufendes Band
`ii_marquee_speed` | integer | `60` | Laufgeschwindigkeit, in Pixeln pro Sekunde
`is_marquee_direction` | string | `MARQUEE_START` | Laufrichtung: `MARQUEE_START` (zum Anfang der Leserichtung hin) oder `MARQUEE_END`. Die physischen Aliasnamen `"left"` / `"right"` werden akzeptiert
`ib_marquee_overflow_only` | boolean | `false` | Opt-in: nur laufen, wenn der Text zu breit für das Feld ist. Ein Laufband, das einen ohnehin lesbaren Text bewegt, ist reines optisches Rauschen. Standardmäßig aus, damit `ib_marquee = true` weiterhin es läuft bedeutet
`ib_marquee_pause_on_hover` | boolean | `false` | Opt-in: den Lauf anhalten, solange der Zeiger über dem Block steht, damit ein langer Text lesbar bleibt. Die Schleifenposition bleibt erhalten: beim Verlassen springt nichts

### Optionale Interaktionen #

Eigenschaft | Typ | Standard | Zweck
--- | --- | --- | ---
`ib_allow_drop` | boolean | `false` | Opt-in: nimmt aus dem Windows-Explorer abgelegte Dateien an; die vollständigen Pfade kommen über `ue_drop_files` an
`ib_track_mouse` | boolean | `false` | Opt-in: aktiviert `ue_mouse_enter` / `ue_mouse_leave`
`ib_auto_height` | boolean | `false` | Opt-in: der Block misst seine ideale Höhe und passt die Größe des Userobjects an; siehe Gemeinsame Basis
`is_theme_style` | string | `fluent` | Visueller Stil der Komponente (Konstanten `THEME_STYLE_*`)
`is_theme_mode` | string | `light` | Helle oder dunkle Variante (Konstanten `THEME_MODE_*`)
`il_theme_accent` | long | `-1` | Akzentfarbe dieser Komponente (`-1` = Akzent des Designs)
`is_tooltip` | string | `""` | Einfacher Tooltip beim Überfahren der Komponente
`is_super_tooltip_title` | string | `""` | Titel des erweiterten Tooltips (hat Vorrang vor `is_tooltip`)
`is_super_tooltip_text` | string | `""` | Text des erweiterten Tooltips (Rich-Markup zulässig)
`is_super_tooltip_image` | string | `""` | Bild des erweiterten Tooltips

## Methoden #

Methode | Zweck
--- | ---
`of_reset ( )` | Setzt alle Eigenschaften auf ihren Standard zurück und leert den Text
`of_set_redraw (boolean)` | Fasst eine Folge von Änderungen zu einer einzigen Darstellung zusammen
`of_save_as_png (string)` · `of_save_as_jpg (string)` | Exportiert die Darstellung als Bild
`of_scroll_to_end ( )` | Springt an das Ende des Textes. Für ein Protokoll, dessen neueste Zeile unten steht: sonst rutscht sie aus dem Blickfeld, sobald der Text höher wird als der sichtbare Bereich

## Events #

Event | Ausgelöst wenn
--- | ---
`ue_clicked ( )` | Linksklick auf den Block — nicht ausgelöst auf einem `[action]`- oder `[hyperlink]`-Bereich (keine Dopplung)
`ue_hyperlink (string as_url)` | Eine `[hyperlink=url]`-Zone wurde angeklickt. Der Browser öffnet sich von selbst: Das Event erreicht Sie zusätzlich, um den Klick zu protokollieren oder mehr damit zu tun
`ue_action (string as_id)` | Auf einen `[action=id]`-Bereich wurde geklickt: Sie hängen dort Ihren eigenen Code ein
`ue_drop_files (string as_files[])` | Dateien wurden aus Windows abgelegt: vollständige Pfade, ein Eintrag pro Datei. Erfordert `ib_allow_drop = true`
`ue_drag_enter ( )` | Ein Datei-Drag betritt die Komponente (`ib_allow_drop`)
`ue_drag_leave ( )` | Das Datei-Drag verlässt die Komponente
`ue_auto_height (long al_height)` | Der Block hat seine ideale Höhe berechnet — erfordert `ib_auto_height = true`
`ue_rclicked ( )` | Rechtsklick auf den Block
`ue_double_clicked ( )` | Doppelklick auf den Block, wie beim nativen PowerBuilder-`StaticText`. Die vorausgehenden Einfachklicks werden ebenfalls ausgelöst, in derselben Reihenfolge. Nicht auf einer `[action]`- oder `[hyperlink]`-Zone, die einen eigenen Kanal haben
`ue_text_overflow (boolean ab_truncated)` | Der Text passt nicht mehr in das Feld — oder wieder. Nur bei Änderung ausgelöst, nie in Serie: ein umbrechender Block gilt als abgeschnitten, wenn er unten beschnitten wird, ein einzeiliger, wenn er seitlich abgeschnitten wird. Behandeln Sie es, um eine Spalte zu verbreitern, eine Mehr anzeigen-Schaltfläche anzubieten oder einfach `ib_ellipsis_tooltip` einzuschalten
`ue_mouse_enter ( )` | Die Maus tritt ein — erfordert `ib_track_mouse = true`
`ue_mouse_leave ( )` | Die Maus verlässt den Block — erfordert `ib_track_mouse = true`
`ue_cycle ( )` | Nur im Laufschriftmodus: der Text hat gerade einen vollständigen Durchlauf beendet
`ue_ready ( )` | Die Komponente ist fertig geladen; alles zuvor Gesendete wurde nachgespielt
`ue_runtime_missing ( )` | Die WebView2-Runtime fehlt: die Komponente bleibt leer
`ue_bg_color (long al_color)` | Die Komponente hat ihre Design-Hintergrundfarbe berechnet; das Userobject hat sie bereits übernommen (`backcolor`)

## Beispiele #

### Eine Abschnittskopfzeile #

Vollflächiger Hintergrund, zentrierter weißer Text und eine an den Inhalt angepasste Höhe: Der Block liest sich wie eine echte Titelleiste.

    uo_entete.of_set_redraw(false)

    uo_entete.is_text  = "[b]Verkaufs-Dashboard"
    uo_entete.is_align = uo_entete.ALIGN_CENTER

    // Vollflaechiger Hintergrund und gut lesbarer weisser Text
    uo_entete.il_back_color = RGB(/*rot*/ 60, /*gruen*/ 110, /*blau*/ 190)
    uo_entete.il_text_color = RGB(/*rot*/ 255, /*gruen*/ 255, /*blau*/ 255)
    uo_entete.ii_padding = 14

    // Der Block schmiegt sich an seinen Inhalt : er liest sich wie eine Titelleiste
    uo_entete.ib_auto_height = true

    uo_entete.of_set_redraw(true)

    // ue_auto_height-Event von uo_entete
    of_repositionner_sous_entete(al_height)   // verschiebt den Inhalt unter die Kopfzeile

### Rich-Text mit Link und Aktion #

    uo_texte.is_text = "Ihre Lizenz läuft am [b]31.12.[/b] ab. " &
                       + "[hyperlink=https://pbtoolboxai.net]Mehr erfahren[/hyperlink] " &
                       + "oder [action=renew]jetzt verlängern[/action]."

    // ue_action-Event von uo_texte : (string as_id)
    choose case as_id
        case "renew" ; of_ouvrir_renouvellement()
    end choose

`ue_hyperlink` ist für URLs gedacht (der Browser öffnet sich von selbst); `[action=id]` ist die richtige Wahl, wenn der Klick innerhalb Ihrer Anwendung bleiben soll. Die Variante `[invisibleaction=id]` löst dasselbe `ue_action` aus, ohne wie ein Link auszusehen.

### Ein einklappbarer Block #

    uo_recap.is_text = "[b]Bestellung 2026-0148[/b][br]" &
                       + "[foldarea:[b]Lieferung[/b]]Am 12.07. versandt, innerhalb von 48 Stunden.[/foldarea]" &
                       + "[foldarea-closed:[i]Rechtliche Hinweise[/i]]Ruckgabe innerhalb von 14 Tagen moglich.[/foldarea]"

    uo_recap.ib_auto_height = true   // der Block schrumpft, wenn ein Abschnitt eingeklappt wird

Ein `[foldarea:Titel]` setzt eine anklickbare Kopfzeile über seinen Inhalt: Der Leser klappt den Abschnitt mit einem Klick ein, und der Marker wechselt von `−` zu `+`. `[foldarea-closed:Titel]` erzeugt denselben Block, von Anfang an eingeklappt. Blöcke lassen sich verschachteln, und das Einklappen löst kein Event aus: Es ist eine Sache des Lesens, nicht des Codes. Ist `ib_auto_height` aktiv, wird die Höhe bei jedem Ein- und Ausklappen erneut gemeldet. Der Titel ist Auszeichnungstext: `[foldarea:[b][accent]Auftrag 2026-0148[/accent][/b]]` setzt seinen eigenen fett und in Akzentfarbe.

### Ein laufendes Band #

    uo_bandeau.is_text = "[b]Hinweis[/b] -- der Dienst bleibt am Freitag, dem 12., geschlossen."

    // Laufschriftmodus, wie ein Nachrichtenticker
    uo_bandeau.ib_marquee = true
    uo_bandeau.ii_marquee_speed = 90        // Pixel pro Sekunde
    uo_bandeau.is_marquee_direction = uo_bandeau.MARQUEE_START

Der Lauf wiederholt sich ohne Leerlauf. Zum Anhalten setzen Sie `ib_marquee` wieder auf `false`: Der Text nimmt sein normales Layout wieder an.

Bei jedem vollständigen Durchlauf des Textes wird das Event `ue_cycle` ausgelöst — praktisch, um mehrere Meldungen abwechselnd anzuzeigen:

    // In ue_cycle des Bandes : zur naechsten Meldung wechseln
    ii_message = Mod(ii_message, UpperBound(is_messages)) + 1
    uo_bandeau.is_text = is_messages[ii_message]

### Ein Ablagebereich für Dateien #

    // Aus dem Windows-Explorer gezogene Dateien annehmen
    uo_zone.ib_allow_drop = true

    uo_zone.is_text = "[size=32][accent][b]Dateien hier ablegen[/b][/accent][/size][br][br]" &
                      + "Ziehen Sie eine oder mehrere Dateien aus dem Windows-Explorer."
    uo_zone.is_align  = uo_zone.ALIGN_CENTER
    uo_zone.is_valign = uo_zone.VALIGN_CENTER

    // ue_drop_files-Event von uo_zone : (string as_files[])
    integer li

    for li = 1 to UpperBound(as_files)
        of_importer(as_files[li])       // as_files[li] = VOLLSTAENDIGER Pfad der Datei
    next

    // ue_drag_enter-Event von uo_zone : das Ziel waehrend des Ueberfahrens hervorheben
    uo_zone.il_border_color = RGB(/*rot*/ 21, /*gruen*/ 101, /*blau*/ 192)
    uo_zone.ii_border_width = 2

Die empfangenen Pfade sind vollständig: Sie können sie direkt an `FileOpen` oder an Ihre eigene Importroutine übergeben.

### Eine Beschriftung, die sich wie eine Schaltfläche verhält #

    uo_lien.is_text = "Alles auswählen"
    uo_lien.il_text_color = RGB(/*rot*/ 21, /*gruen*/ 101, /*blau*/ 192)
    uo_lien.ii_padding = 8
    uo_lien.ii_corner_radius = 6
    uo_lien.ib_hover_effect = true       // reagiert auf den Mauszeiger wie eine Schaltflaeche

    // ue_clicked-Event von uo_lien
    of_tout_selectionner()

## Best Practices #

- Text ohne Auszeichnung kostet nichts zusätzlich: Ersetzen Sie Ihre PowerBuilder-`statictext`-Steuerelemente ruhig durchgängig, auch für reinen Text.
- Bevorzugen Sie `is_align = uo.ALIGN_START` gegenüber `"left"`: Ihre Maske bleibt korrekt, wenn die Anwendung auf Schreibrichtung von rechts nach links umschaltet.
- `ib_selectable` bleibt standardmäßig ausgeschaltet, wie bei einer Beschriftung. Aktivieren Sie es nur dort, wo Kopieren sinnvoll ist (Vorgangsnummer, technische Fehlermeldung).
- Kombinieren Sie für eine Kopfzeile `il_back_color` + `ii_padding` + `ib_auto_height`: Der Block bemisst sich selbst, wenn der Text seine Länge ändert.
- Aktivieren Sie `ib_track_mouse` nur, wenn Sie `ue_mouse_enter` / `ue_mouse_leave` wirklich skripten.
- Rufen Sie `of_reset()` auf, bevor Sie einen Block für einen anderen Inhalt wiederverwenden: Andernfalls bleiben ein vorheriger Hintergrund, Rahmen oder Laufschriftmodus bestehen.

← Komponentenreferenz · Inhalt des Handbuchs