PBToolboxAI v4 ← Site

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 #

Userobjectu_pbt_statictext
Item-Klasse— (Komponente ohne Items)
WofürEin PowerBuilder-statictext durch einen formatierten, klickbaren Textblock ersetzen, der als Kopfzeile, Laufschriftband oder Ablagebereich dienen kann
Opt-in-Optionenib_auto_height, ib_auto_width, ib_follow_end, ib_track_mouse, ib_track_cycle, ib_allow_drop, ib_selectable, ib_hover_effect

Schnellstart #

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

Der Text akzeptiert die Rich-Text-Auszeichnung: Diese Komponente holt am meisten daraus heraus, denn sie ist die einzige, die [action=…]-Bereiche klickbar macht (ein [hyperlink=…] öffnet sich überall).


Konstanten #

KonstanteWertFü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 #

EigenschaftTypStandardZweck
is_textstring""Der angezeigte Text, mit der Rich-Text-Auszeichnung: [b], [i], [u], Farben, [picture=…], [hyperlink=…], [action=…]
is_alignstring"start"Horizontale Ausrichtung: ALIGN_START, ALIGN_CENTER, ALIGN_END, ALIGN_JUSTIFY
is_valignstring"top"Vertikale Ausrichtung innerhalb des Steuerelements: VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM
ib_wrapbooleantrueAutomatischer Zeilenumbruch. false erzwingt eine einzige Zeile
ib_ellipsisbooleanfalseKürzt bei ib_wrap = false den Überlauf mit Auslassungspunkten, statt ihn hart abzuschneiden
ib_ellipsis_tooltipbooleanfalseOpt-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_familystring""Standardschriftart des Blocks (leer = Schriftart des Designs)
ii_font_sizeinteger0Standardgröße in Punkt (0 = Größe des Designs)
il_text_colorlong-1Textfarbe als RGB() (-1 = Farbe des Designs). [color]-Tags haben für ihren Abschnitt weiterhin Vorrang
ii_line_spacinginteger0Zeilenabstand in Prozent, von 50 bis 400 (150 = 1,5 Zeilen; 0 = Standard). Ein Wert außerhalb dieser Grenzen wird auf die nächste Grenze gesetzt und so zurückgelesen, wie er angewendet wurde
ib_enabledbooleantrueBlock aktiv oder ausgegraut (Links und Aktionen sind inaktiv, wenn er ausgegraut ist)
ib_selectablebooleanfalseOpt-in: erlaubt dem Benutzer, den Text auszuwählen und mit Strg+C zu kopieren (standardmäßig ausgeschaltet, wie bei einer Beschriftung). Das Loslassen der Maus nach einer Auswahl löst kein ue_clicked aus

Blockoptik (die „Kopfzeilen“-Optik) #

EigenschaftTypStandardZweck
il_back_colorlong-1Blockhintergrund als RGB() (-1 = Hintergrund des Designs). Mit ii_corner_radius folgt er der Rundung, und außerhalb der Ecken zeigt der Block die Farbe des Objekts, auf dem er liegt
il_border_colorlong-1Rahmenfarbe (-1 = kein Rahmen)
ii_border_widthinteger0Rahmenstärke in Pixeln (0 = kein Rahmen)
ii_corner_radiusinteger0Radius der Eckenrundung, in Pixeln. Rahmen UND Hintergrund il_back_color folgen ihm
ii_paddinginteger-1Innenabstand in Pixeln: -1 = der des Designs (Standard), 0 = kein Abstand (der Text steht bündig mit dem Rand eines benachbarten Feldes), darüber = Pixel
ib_hover_effectbooleanfalseOpt-in: leichte Abdunklung beim Überfahren mit der Maus (Aufhellung bei einem dunklen Design), für eine Beschriftung, die wie eine Schaltfläche wirkt

Laufschriftmodus (Marquee) #

EigenschaftTypStandardZweck
ib_marqueebooleanfalseVerwandelt den Block in ein horizontal laufendes Band
ii_marquee_speedinteger60Laufgeschwindigkeit, in Pixeln pro Sekunde (0 = Standardgeschwindigkeit, 60)
is_marquee_directionstringMARQUEE_STARTLaufrichtung: MARQUEE_START (zum Anfang der Leserichtung hin) oder MARQUEE_END. Die physischen Aliasnamen "left" / "right" werden akzeptiert: sie bleiben physisch, unabhängig von der Leserichtung. Jeder andere Wert gilt als MARQUEE_START und wird so zurückgelesen
ib_marquee_overflow_onlybooleanfalseOpt-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_hoverbooleanfalseOpt-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 #

EigenschaftTypStandardZweck
ib_allow_dropbooleanfalseOpt-in: nimmt aus dem Windows-Explorer abgelegte Dateien an; die vollständigen Pfade kommen über ue_drop_files an. Ein deaktivierter Text (ib_enabled = false) lehnt jedes Ablegen ab
ib_track_mousebooleanfalseOpt-in: aktiviert ue_mouse_enter / ue_mouse_leave
ib_track_cyclebooleanfalseOpt-in: aktiviert ue_cycle, ausgelöst am Ende jedes Laufschrift-Durchlaufs; ohne es läuft der Text lautlos
ib_auto_heightbooleanfalseOpt-in: der Block misst seine ideale Höhe und passt die Größe des Userobjects an; siehe Gemeinsame Basis
ib_auto_widthbooleanfalseOpt-in: das Userobject übernimmt die BREITE seines Textes — die längste Zeile, ohne Umbruch (die [br] zählen), plus Innenabstand und Rahmen; ein neuer Text, eine Schrift oder ein Innenabstand passen sie erneut an, und ue_auto_width nennt die übernommene Breite. Eine Laufschrift (ib_marquee) hat keine natürliche Breite und meldet keine
ib_follow_endbooleanfalseOpt-in, für ein mit of_append_text geschriebenes Protokoll: die Ansicht bleibt UNTEN, während Zeilen hinzukommen — außer der Leser hat nach oben gescrollt, um eine ältere Zeile zu lesen: er wird nie davon weggerissen
is_theme_stylestring""Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen
is_theme_modestring""Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen
il_theme_accentlong-1Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der des Designs)
is_tooltipstring""Einfacher Tooltip beim Überfahren der Komponente
is_super_tooltip_titlestring""Titel des erweiterten Tooltips (hat Vorrang vor is_tooltip)
is_super_tooltip_textstring""Text des erweiterten Tooltips (Rich-Markup zulässig)
is_super_tooltip_imagestring""Bild des erweiterten Tooltips

Methoden #

MethodeZweck
of_reset ( )Setzt alle Eigenschaften auf ihren Standard zurück und leert den Text. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_set_redraw (boolean)Fasst eine Folge von Änderungen zu einer einzigen Darstellung zusammen. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist
of_save_as_png (string) · of_save_as_jpg (string)Exportiert die Darstellung als Bild. Liefert 0 nach dem Schreiben des Bildes, -4 wenn das Schreiben fehlschlägt, -2 wenn die Komponente nicht erzeugt ist
of_refresh_parent_color ( )Liest die Farbe des Objekts, auf dem der Block liegt, erneut. Mit il_back_color und ii_corner_radius zeigen die abgerundeten Ecken diese Farbe, die beim Setzen dieser beiden Eigenschaften gelesen wird: rufen Sie sie auf, nachdem Sie die BackColor Ihres Fensters geändert oder den Block zu einem anderen Elternobjekt verschoben haben. Liefert 0 nach dem Senden, -2 wenn die Komponente nicht erzeugt ist
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. Liefert 0 nach dem Senden, -2 wenn die Komponente nicht erzeugt ist
of_append_text (string as_markup)Fügt EINE Zeile am Ende des Textes hinzu, für ein Protokoll: nur diese Zeile geht an die Komponente und nur sie wird gezeichnet — is_text bei jeder Zeile neu zu schreiben, sendete und zeichnete das ganze Protokoll erneut. as_markup nimmt dasselbe Markup wie is_text; zurückgelesen enthält is_text alle Zeilen, verbunden durch [br]. Mit ib_follow_end bleibt die Ansicht unten. Liefert 0 nach dem Senden, -2 wenn die Komponente nicht erzeugt ist

Events #

EventAusgelöst wenn
ue_clicked ( )Linksklick auf den Block — nicht ausgelöst auf einem [action]- oder [hyperlink]-Bereich (keine Dopplung), auf der Kopfzeile eines [foldarea] (Zuklappen löst nichts aus) und nicht nach einer Textauswahl
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_key)Auf einen [action=id]-Bereich wurde geklickt: Sie hängen dort Ihren eigenen Code ein. Der Bereich ist auch per Tastatur erreichbar: mit Tab hin, dann Eingabe oder Leertaste
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_auto_width (long al_width)Der Block hat eine neue Breite übernommen, in PowerBuilder-Einheiten — erfordert ib_auto_width = 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 (eine Animation INNERHALB des Textes zählt nie als Durchlauf) — erfordert ib_track_cycle = true
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.

// Die Anzeige einfrieren, solange alles gesetzt wird
uo_header.of_set_redraw(/*on*/ false)

// Der Titel, zentriert
uo_header.is_text  = "[b]Verkaufs-Dashboard"
uo_header.is_align = uo_header.ALIGN_CENTER

// Vollflaechiger Hintergrund und gut lesbarer weisser Text
uo_header.il_back_color = RGB(/*red*/ 60, /*green*/ 110, /*blue*/ 190)
uo_header.il_text_color = RGB(/*red*/ 255, /*green*/ 255, /*blue*/ 255)
uo_header.ii_padding = 14

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

// Alles wird auf einmal gezeichnet
uo_header.of_set_redraw(/*on*/ true)
// ue_auto_height-Event von uo_header
of_reposition_below_header(al_height)   // verschiebt den Inhalt unter die Kopfzeile
// Ein Link auf eine Webseite und eine Aktion, die Ihre Anwendung behandelt (ue_action)
uo_text.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_text : (string as_key)
choose case as_key
    case "renew" ; of_open_renewal()
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 #

// Zwei einklappbare Abschnitte : der zweite beginnt eingeklappt
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]"

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

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 #

// Die Meldung des Bandes
uo_banner.is_text = "[b]Hinweis[/b] -- der Dienst bleibt am Freitag, dem 12., geschlossen."

// Laufschriftmodus, wie ein Nachrichtenticker
uo_banner.ib_marquee = true
uo_banner.ii_marquee_speed = 90        // Pixel pro Sekunde
uo_banner.is_marquee_direction = uo_banner.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.

Sobald ib_track_cycle = true gesetzt ist, wird bei jedem vollständigen Durchlauf des Textes 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_banner.is_text = is_messages[ii_message]

Ein Ablagebereich für Dateien #

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

// Was die Zone anzeigt, zentriert
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

// Jede abgelegte Datei, eine nach der anderen
for li = 1 to UpperBound(as_files)
    of_import(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(/*red*/ 21, /*green*/ 101, /*blue*/ 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 #

// Ein Text, der sich wie eine Link-Schaltflaeche verhaelt
uo_link.is_text = "Alles auswählen"
uo_link.il_text_color = RGB(/*red*/ 21, /*green*/ 101, /*blue*/ 192)
uo_link.ii_padding = 8
uo_link.ii_corner_radius = 6
uo_link.ib_hover_effect = true       // reagiert auf den Mauszeiger wie eine Schaltflaeche
// ue_clicked-Event von uo_link
of_select_all()

Ein Protokoll, Zeile für Zeile geschrieben #

Jeder Aufruf sendet nur die hinzugefügte Zeile; ib_follow_end hält die letzte sichtbar, solange der Leser nicht nach oben scrollt.

// Once, when the window opens
uo_log.ib_follow_end = true
uo_log.is_text = "[b]Import[/b]"

// For every row imported : one line, sent alone
uo_log.of_append_text(/*markup*/ "Row " + String(ll_row) + " [color=#2e7d32]imported[/color]")

Ein Etikett so breit wie sein Text #

// A status chip : background, rounded corners, and the width of its text
uo_status.is_text = "[b]Status :[/b] connected"
uo_status.il_back_color = RGB(/*red*/ 232, /*green*/ 245, /*blue*/ 233)
uo_status.ii_corner_radius = 12
uo_status.ib_auto_width = true

Best Practices #

Vom gemeinsamen Sockel geerbt #

Diese Mitglieder gibt es bei jeder visuellen Komponente — sie sind nicht dieser eigen. Sie werden einmal in den übergreifenden Kapiteln beschrieben; diese Tabelle sagt nur, wo man sie liest.

MitgliederRolleBeschrieben in
of_resetDie Komponente zurücksetzen3.6 Eine Komponente zurücksetzen: of_reset()
of_register_shortcut · of_clear_shortcutsTastenkürzel der Komponente3.5 Tastenkombinationen
of_is_created · of_is_ready · of_get_last_errorOb sie entstanden ist, ob sie bereit ist, was fehlschlug3.7 Diagnose
of_save_as_png · of_save_as_jpgDie Darstellung als Bild exportieren3.8 Die Darstellung als Bild exportieren
of_set_redrawÄnderungen zu einem einzigen Neuzeichnen bündeln3.10 Best Practices
of_preload_iconsSymbole ohne VerzögerungSofortige Anzeige: of_icon
of_set_translationEine Beschriftung der Komponente übersetzen5.2 Eine Beschriftung anpassen: of_set_translation
of_focus_webviewDer Komponente den Fokus geben6.4 Tastatur und Fokus
of_print · of_print_to_pdfDrucken oder ein PDF schreiben6.9 Drucken
of_set_property · of_get_property · of_component_nameEine Eigenschaft über ihren Namen steuern3.1 Die Eigenschaften-Engine

Zwei Helfer werden nicht geerbt: of_icon und of_escape_markup liegen auf n_pbt_utils. Deklarieren Sie eines — n_pbt_utils lnv_utils, nichts zu erzeugen — und rufen Sie sie darauf auf.


← Komponentenreferenz · Inhalt des Handbuchs