toolbar — u_pbt_toolbar #
← Komponentenreferenz · Inhalt des Handbuchs
Flache Symbolleiste: mehrere Leisten auf Bändern verteilt, Schaltflächen, Umschalter, Dropdown-Menüs, Eingabefelder, automatischer Überlauf und Verschieben am Griff.
▶ Live ansehen — Demoanwendung, Kachel Toolbar: die Vorschau, der zugehörige Code und diese Seite, nebeneinander.
Auf einen Blick #
| Userobject | u_pbt_toolbar |
| Item-Klassen | n_pbt_toolbar_bar (Leiste) → n_pbt_toolbar_item (Werkzeug) → n_pbt_toolbar_menu_item (Menüeintrag) |
| Wofür | Eine klassische Symbolleiste durch eine moderne, dem Design folgende Leiste mit mehreren umsortierbaren Zeilen ersetzen |
| Höhe | Intrinsisch: Die Leiste richtet sich immer nach ihren Zeilen, es ist nichts zu aktivieren — siehe Automatische Höhe |
Schnellstart #
// open-Event des Fensters
// MAIN_BAR ist die Standardleiste, immer vorhanden : die Adresse beginnt bei ihr
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/save", /*text*/ "", /*image*/ "mono:img\save.svg", /*tooltip*/ "Speichern")
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/find", /*text*/ "", /*image*/ "mono:img\find.svg", /*tooltip*/ "Suchen")
uo_toolbar.of_add_separator(/*keys*/ uo_toolbar.MAIN_BAR)
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/help", /*text*/ "Hilfe", /*image*/ "", /*tooltip*/ "Info")
// Event ue_clicked von uo_toolbar: (string as_keys)
choose case as_keys
case "main/save" ; of_save()
case "main/find" ; of_find()
case "main/help" ; of_help()
end choose
Das Modell: Leisten, Bänder, Werkzeuge #
Eine Symbolleiste enthält eine oder mehrere Leisten. Jede Leiste liegt auf einem Band (einer Zeile) und belegt eine Position in dieser Zeile: Zwei Leisten auf demselben Band teilen sich die Zeile, zwei Leisten auf verschiedenen Bändern stapeln sich — genau wie die klassischen Office-Symbolleisten.
Die Werkzeuge (Schaltflächen, Umschalter, Menüs, Felder) gehören zu einer Leiste. Ihr Bezeichner ist nur innerhalb ihrer Leiste eindeutig: Der Zugriff läuft daher immer über den vollständigen Pfad.
// Gray out a tool, or one entry of its menu
uo_toolbar.of_item(/*keys*/ "main/save").ib_enabled = false
uo_toolbar.of_menu_item(/*keys*/ "main/export/pdf").ib_enabled = false
Alles geschieht über die Komponente, mit Adressen: Ein Werkzeug wird an seiner Adresse hinzugefügt (of_add_button("main/save", …)), ein Menüeintrag an seiner ("main/export/pdf", eine Ebene mehr je Kaskade), und jede Ebene hat ihren Getter — of_bar, of_item, of_menu_item. Siehe Gemeinsame Basis · Die Items für das allgemeine Prinzip.
Dropdown-Listen #
Eine Dropdown-Liste (of_add_combo) ist ein Feld mit seinem Pfeil, wie die Combo des Menübands. Nicht bearbeitbar, wählt der Benutzer aus der Liste (ein Klick auf das Feld, Eingabe, F4 oder Alt+Unten öffnet sie); bearbeitbar, kann er auch einen eigenen Wert eingeben. Jede Auswahl kommt in ue_combo_changed zurück; in den Chevron einer zu schmalen Leiste eingeklappt, bleibt die Liste funktionsfähig.
// A font the user only chooses, a size he may also type
uo_toolbar.of_add_combo(/*keys*/ "main/font", /*width*/ 130, /*editable*/ false, /*tooltip*/ "Font")
uo_toolbar.of_add_combo_item(/*keys*/ "main/font", /*label*/ "Segoe UI")
uo_toolbar.of_add_combo_item(/*keys*/ "main/font", /*label*/ "Arial")
uo_toolbar.of_item(/*keys*/ "main/font").is_text = "Segoe UI"
uo_toolbar.of_add_combo(/*keys*/ "main/size", /*width*/ 60, /*editable*/ true, /*tooltip*/ "Size")
uo_toolbar.of_add_combo_item(/*keys*/ "main/size", /*label*/ "10")
uo_toolbar.of_add_combo_item(/*keys*/ "main/size", /*label*/ "12")
// ue_combo_changed (string as_keys, string as_text) of uo_toolbar
st_status.Text = as_keys + " = " + as_text
Eigenschaften #
| Eigenschaft | Typ | Standard | Zweck |
|---|---|---|---|
is_theme_style | string | "" | Visueller Stil der Komponente (Konstanten THEME_STYLE_*); leer = der der Anwendung, bei jeder Änderung übernommen |
is_theme_mode | string | "" | Helle oder dunkle Variante (Konstanten THEME_MODE_*); leer = die der Anwendung, bei jeder Änderung übernommen |
il_theme_accent | long | -1 | Akzentfarbe dieser Komponente (-1 = Akzent der Anwendung, sonst der 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 |
ib_reorderable | boolean | false | Erlaubt dem Benutzer, die Leisten mit der Maus neu anzuordnen: die Verschiebegriffe erscheinen und eine Leiste kann in ein anderes Band gezogen werden. Standardmäßig aus — eine versehentlich zerlegte Symbolleiste ist ein Supportfall. Ihr Code ordnet sie ohnehin um (of_set_layout, of_add_bar): der Schalter beschränkt den Benutzer, nie die Anwendung |
Konstante #
| Konstante | Wert | Zweck |
|---|---|---|
MAIN_BAR | "main" | Kennung der Standardleiste, die man adressiert, ohne sie erzeugt zu haben: sie entsteht mit ihrem ersten Werkzeug. Um sie zu platzieren, fügen Sie sie zuerst hinzu — of_add_bar(MAIN_BAR, 1, 1) |
Methoden #
| Methode | Zweck | |
|---|---|---|
of_bar (string as_key) → n_pbt_toolbar_bar | Liefert das Handle einer Leiste (wird beim ersten Zugriff erzeugt): ii_band, ii_index, ib_visible | |
of_add_button (string as_keys, string as_text, string as_image, string as_tooltip) → long | Aktionsschaltfläche an ihrer Adresse, "main/save": die Leiste, dann ihr eigener Bezeichner. Ein Klick löst ue_clicked aus. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_item (string as_keys) → n_pbt_toolbar_item | Liefert das Handle eines Werkzeugs über seine Adresse Leiste/Werkzeug. Eine Adresse anderer Tiefe bezeichnet kein Werkzeug: Eine Leiste ist of_bar, ein Menüeintrag of_menu_item | |
of_menu_item (string as_keys) → n_pbt_toolbar_menu_item | Liefert das Handle eines Eintrags eines Dropdown-Menüs über seine Adresse Leiste/Dropdown/Eintrag — eine Ebene mehr je Kaskade. Zwei Kaskaden können je ihr eigenes pdf haben: Die Adresse bezeichnet eines davon, nie beide | |
of_add_bar (string as_key) → long | Fügt eine Leiste hinzu, auf einem eigenen Band nach den anderen. Liefert 0 nach dem Hinzufügen, -5, wenn der Schlüssel abgelehnt wird (leer, mit / oder ` | , beginnend mit __ oder bereits vergeben), -2, wenn die Komponente nicht erzeugt ist. Die Standardleiste main entsteht mit ihrem ersten Werkzeug: um sie zu platzieren, fügen Sie sie **vor** jedem Werkzeug hinzu (of_add_bar(MAIN_BAR, 1, 1)); danach ist sie vergeben (-5) und wird über of_bar(MAIN_BAR)` verschoben |
of_add_bar (string as_key, integer ai_band, integer ai_index) → long | Fügt eine Leiste an einem bestimmten Band und an einer bestimmten Position hinzu (beide ab 1 gezählt); die Leiste, die diesen Rang hatte, rückt eine Stelle nach rechts. Gleiche Codes wie oben | |
of_remove_bar (string as_key) → long | Entfernt eine Leiste samt ihren Werkzeugen, mit deren Handles und Tastenkürzeln. Die anderen behalten ihren Live-Zustand, und die Bänder rücken hinter der entfernten zusammen. Das ist nicht Ausblenden (ib_visible an ihrem Handle): Ausblenden behält sie im Modell, bereit, genau an ihren Platz zurückzukehren; Entfernen vergisst sie. Liefert 0 nach dem Entfernen, -5 für eine Leiste, die es nicht gibt, -2, wenn die Komponente nicht erzeugt ist | |
of_get_layout () → string | Liest die aktuelle Anordnung als JSON zurück: welche Leiste auf welchem Band, an welchem Rang, sichtbar oder nicht. Bänder und Ränge werden ab 1 gezählt, wie ii_band / ii_index: so speichern, wie sie kommt, und an of_set_layout zurückgeben — ein Hin und Zurück liefert dieselbe Zeichenkette | |
of_set_layout (string as_layout_json) → long | Stellt eine mit of_get_layout gelesene oder über ue_layout_changed erhaltene Anordnung wieder her, so zurückgegeben, wie sie kam. Eine Leiste, die sie nicht nennt, bleibt, wo sie ist. ue_layout_changed wird ausgelöst, wie bei jeder Änderung der Anordnung. Liefert 0 nach dem Anwenden, -5 bei einer leeren Zeichenkette, -2, wenn die Komponente nicht erzeugt ist. Ein Text, der kein JSON ist, liefert ebenfalls -5 | |
of_clear ( ) → long | Entfernt alle Leisten, Werkzeuge und Menüs, mit den ausgegebenen Handles und den Tastenkürzeln der Werkzeuge und Einträge; jede Adresse kann erneut hinzugefügt werden. Liefert 0 nach dem Anwenden, -2, wenn die Komponente nicht erzeugt ist | |
of_reset ( ) | Leert den Inhalt und setzt die Eigenschaften auf ihre Standardwerte zurück. Liefert 0 nach der Anwendung, -2 wenn die Komponente nicht erzeugt ist | |
of_add_toggle (string as_keys, string as_text, string as_image, string as_tooltip) → long | Umschalter mit zwei Zuständen; ein Klick löst ue_toggled aus. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_add_dropdown (string as_keys, string as_text, string as_image, string as_tooltip) → long | Schaltfläche mit Dropdown-Menü, gefüllt mit of_add_menu_item; eine Auswahl löst ue_menu_selected aus. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist. Ein Dropdown ohne sichtbaren Eintrag wird ausgegraut gezeichnet | |
of_add_split_button (string as_keys, string as_text, string as_image, string as_tooltip) → long | Geteilte Schaltfläche: ihr Hauptteil ist eine Schaltfläche (ue_clicked), ihr Pfeil öffnet ein Menü, das wie das eines Dropdowns mit of_add_menu_item gefüllt wird (ue_menu_selected). Ihr Tastenkürzel löst den Hauptteil aus; in den Chevron eingeklappt, öffnet sie eine Liste, deren erste Zeile ihre eigene Aktion ist. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_add_label (string as_keys, string as_text) → long | Informative Beschriftung, nicht anklickbar. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_add_textbox (string as_keys, string as_text, integer ai_width, string as_tooltip) → long | Eingabefeld; Eingabe oder Fokusverlust löst ue_text_changed aus, Escape stellt den bestätigten Text wieder her. ai_width in Pixeln. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_add_combo (string as_keys, integer ai_width, boolean ab_editable, string as_tooltip) → long | Dropdown-Liste (Combo): ein Feld mit seinem Pfeil, die Combo des Menübands. ab_editable = false: der Benutzer wählt nur aus der Liste; true: er kann auch einen eigenen Wert eingeben, bestätigt durch Eingabe oder Verlassen des Feldes. Die Liste wird mit of_add_combo_item gefüllt, eine Auswahl löst ue_combo_changed aus, is_text setzt und liest den Wert. ai_width in Pixeln (0 = Standardbreite). In den Chevron eingeklappt bleibt sie eine funktionierende Liste. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_add_combo_item (string as_keys, string as_label) → long | Fügt der Liste einer Dropdown-Liste eine Auswahl hinzu: as_keys nennt die Liste ("main/zoom"). Eine Auswahl hat ihre Beschriftung als Schlüssel, ihre Adresse ist also "main/zoom/150%" (of_remove_combo_item, of_has); of_count und of_keys_at auf der Liste durchlaufen ihre Auswahlen. Im Demomodus zeigt die Liste 6 Auswahlen. Liefert 0 nach dem Hinzufügen, -5, wenn as_keys keine Dropdown-Liste ist oder die Beschriftung leer ist, / oder ` | enthält oder schon in der Liste steht, -2`, wenn die Komponente nicht erzeugt ist |
of_add_datepicker (string as_keys, string as_date, string as_tooltip) → long | Datumsauswahl; eine Auswahl löst ue_date_changed aus, is_date liest und setzt das Datum. Datumsangaben als "jjjj-mm-tt". Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_add_separator (string as_keys) → long | Senkrechte Trennlinie in einer Leiste (as_keys nennt sie). Ein Trenner hat weder Schlüssel noch Rang. Liefert 0 nach dem Hinzufügen, -5 für eine nie hinzugefügte Leiste (außer main), -2, wenn die Komponente nicht erzeugt ist. Ein Trenner, den ausgeblendete Werkzeuge am Anfang, am Ende oder doppelt stehen ließen, wird nicht gezeichnet | |
of_insert_button (string as_keys, string as_text, string as_image, string as_tooltip, integer ai_index) → long | Schaltfläche an der gewählten Position (erste = 1) statt am Ende hinzugefügt. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (nicht Leiste/Werkzeug, eine nie hinzugefügte Leiste — außer main —, eine bereits vergebene Adresse), -2, wenn die Komponente nicht erzeugt ist | |
of_move_item (string as_keys, integer ai_index) → long | Verschiebt ein Werkzeug an eine andere Position in seiner Leiste (erste = 1; der Rang zählt die Werkzeuge, ein Trenner belegt keinen). Es behält seinen Typ, sein Menü und seinen Live-Zustand: Das Werkzeug wechselt den Platz, es wird nicht neu aufgebaut. Liefert 0 nach dem Anwenden, -5, wenn an dieser Adresse kein Werkzeug lebt, -2, wenn die Komponente nicht erzeugt ist | |
of_remove_item (string as_keys) → long | Entfernt ein Werkzeug ("main/save") oder einen Menüeintrag ("main/export/pdf", samt seiner Kaskade), mit seinen Handles und seinem Tastenkürzel. Alles andere bleibt, Live-Zustand inklusive. Um ein Werkzeug kommen und gehen zu lassen, hält ib_visible an seinem Handle es im Modell. Liefert 0 nach dem Entfernen, -5, wenn an dieser Adresse nichts lebt, -2, wenn die Komponente nicht erzeugt ist | |
of_remove_combo_item (string as_keys) → long | Entfernt eine Auswahl einer Dropdown-Liste, benannt durch ihre Adresse "main/zoom/150%"; der angezeigte Wert bleibt. of_remove_item tut dasselbe. Liefert 0 nach dem Entfernen, -5, wenn diese Liste keine solche Auswahl hat, -2, wenn die Komponente nicht erzeugt ist | |
of_add_menu_item (string as_keys, string as_label, string as_image) → long | Eintrag im Menü einer Dropdown-Schaltfläche, an seiner Adresse Leiste/Dropdown/Eintrag; jede weitere Ebene reiht ihn als Kaskade unter dem vorigen Eintrag ein, in beliebiger Tiefe. Eine leere Beschriftung zeigt den Schlüssel. Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse abgelehnt wird (Ebene leer oder mit ` | , Dropdown oder übergeordneter Eintrag nie hinzugefügt, Adresse bereits vergeben), -2, wenn die Komponente nicht erzeugt ist. Gilt ebenso für das Menü einer geteilten Schaltfläche (of_add_split_button`) |
of_add_menu_separator (string as_keys) → long | Trennlinie am Ende des Menüs eines Dropdowns ("main/export") oder der Kaskade eines Eintrags ("main/export/img"). Liefert 0 nach dem Hinzufügen, -5, wenn die Adresse keines von beiden nennt, -2, wenn die Komponente nicht erzeugt ist. Gilt ebenso für das Menü einer geteilten Schaltfläche (of_add_split_button) | |
of_clear_menu (string as_keys) → long | Leert das Menü eines Dropdowns ("main/recent") und behält die Schaltfläche: der Weg, eine Liste zuletzt geöffneter Dateien neu aufzubauen. Die Handles und Tastenkürzel seiner Einträge gehen mit ihnen. Liefert 0 nach dem Anwenden, -5, wenn die Adresse kein Dropdown nennt, -2, wenn die Komponente nicht erzeugt ist. Gilt ebenso für das Menü einer geteilten Schaltfläche (of_add_split_button) | |
of_clear_combo (string as_keys) → long | Leert die Liste einer Dropdown-Liste ("main/zoom"); der angezeigte Wert bleibt. So baut man eine Liste neu auf, die dem Dokument folgt. Liefert 0 nach dem Anwenden, -5, wenn as_keys keine Dropdown-Liste ist, -2, wenn die Komponente nicht erzeugt ist | |
of_register_shortcut (string as_chord, string as_keys) → long | Bei einer Toolbar nimmt das Tastenkürzel die Adresse dessen, was es auslöst: ein Werkzeug (Leiste/Werkzeug — wie is_shortcut auf seinem Handle) oder einen Menüeintrag (Leiste/Dropdown/Eintrag). Es reagiert, wo immer der Fokus im Fenster steht, und erscheint im Tooltip oder rechts neben dem Eintrag; "" entfernt es. Eine Symbolleiste hat für sich selbst nichts auszulösen: die Form mit einem Argument liefert -5. Liefert 0 nach dem Anwenden, -5, wenn die Adresse weder ein Werkzeug noch einen Eintrag benennt oder eine Beschriftung benennt, -2, wenn die Komponente nicht erzeugt ist | |
of_clear_shortcuts ( ) → long | Entfernt alle Tastenkürzel der Symbolleiste — die ihrer Werkzeuge und ihrer Menüeinträge: sie reagieren nicht mehr, werden nicht mehr angezeigt, und is_shortcut liest "" zurück. Liefert 0 nach dem Anwenden, -2, wenn die Komponente nicht erzeugt ist |
Auf einer Leiste — n_pbt_toolbar_bar #
| Mitglied | Typ | Standard | Zweck |
|---|---|---|---|
ii_band | integer | 1 | Band (Zeile), das die Leiste trägt; 1 = erste Zeile |
ii_index | integer | 1 | Position der Leiste innerhalb ihres Bands; 1 = die erste |
ib_visible | boolean | true | Zeigt oder verbirgt eine Leiste. Eine verborgene Leiste behält ihr Band, ihren Rang und ihre Elemente: Beim erneuten Anzeigen steht sie wieder genau dort, wo sie war, ohne dass etwas neu aufgebaut wird — das ist der Unterschied zu of_clear, das sie verlieren würde |
Auf einem Werkzeug — n_pbt_toolbar_item #
| Mitglied | Typ | Standard | Zweck |
|---|---|---|---|
ib_visible | boolean | true | Zeigt oder verbirgt ein Element. Es behält seinen Rang in der Leiste: Beim erneuten Anzeigen steht es wieder genau dort, wo es war, nicht am Ende. Nicht zu verwechseln mit ib_enabled, das es ausgegraut an Ort und Stelle lässt — verbergen Sie, was nicht zutrifft, und grauen Sie aus, was vorübergehend nicht verfügbar ist |
ib_enabled | boolean | true | Werkzeug aktiv oder ausgegraut |
ib_checked | boolean | false | Zustand eines Umschalters (ohne Wirkung auf die anderen Typen) |
is_text | string | "" | Beschriftung, Rich-Text-Auszeichnung zulässig |
is_shortcut | string | "" | Tastenkürzel ("Ctrl+S"), im Tooltip angezeigt und aktiv; wird so zurückgelesen, wie es geschrieben wurde. Ein ausgeblendetes, deaktiviertes oder jenseits der Demo-Grenze liegendes Werkzeug reagiert nicht darauf. Es braucht Strg oder Alt (Umschalt kommt hinzu) oder ist F1 bis F24: eine einzelne Taste — ein Buchstabe, Entf, Eingabe — ist Eingabe, nie ein Tastenkürzel. Eine Schaltfläche oder ein Umschalter wird ausgelöst; ein Eingabefeld erhält den Cursor, sein Text markiert; ein Datumswähler öffnet seinen Kalender; eine Beschriftung nimmt keines an |
is_date | string | "" | Datum einer Datumsauswahl, "jjjj-mm-tt" ("" leert das Feld). Liest das angezeigte Datum — das vom Benutzer gewählte ebenso wie das hier gesetzte. Ein fehlerhaftes Datum wird ignoriert; andere Werkzeugtypen haben kein Datum und lesen "" |
is_image | string | "" | Symbol des Werkzeugs (dieselben Formen wie beim Hinzufügen: Pfad, mono:, tint:…); "" entfernt es. Ein Wiedergabe-Umschalter, der zu Pause wird, eine Schaltfläche, die zu einem Fehlersymbol wird — ohne das Werkzeug zu entfernen und neu hinzuzufügen |
is_group | string | "" | Gruppe eines Umschalters: die Umschalter einer Leiste, die eine Gruppe teilen, schließen sich gegenseitig aus, wie die Ausrichtungsschaltflächen eines Editors — einen zu drücken löst die anderen, den bereits gedrückten zu drücken lässt ihn gedrückt. Nur der gedrückte Umschalter löst ue_toggled aus. ib_checked = true aus Ihrem Code löst die anderen ebenfalls, ohne Event. "" (Standard): keine Gruppe |
ib_editable | boolean | false | Eine Dropdown-Liste (of_add_combo): true: der Benutzer kann neben den Auswahlen der Liste einen eigenen Wert eingeben; false: er wählt nur. Jedes andere Werkzeug liest false und ignoriert es |
An einem Menüeintrag — n_pbt_toolbar_menu_item #
| Mitglied | Typ | Standard | Zweck |
|---|---|---|---|
ib_enabled | boolean | true | Deaktiviert bleibt der Eintrag im Menü und kann nicht mehr gewählt werden — weder mit der Maus noch mit der Tastatur noch über sein Tastenkürzel |
ib_visible | boolean | true | Ausgeblendet verlässt der Eintrag das Menü (samt Kaskade); er behält seinen Platz und seinen Zustand und kehrt dorthin zurück, wo er war |
ib_checked | boolean | false | Ein Häkchen vor dem Eintrag. Die Anwendung entscheidet darüber: Das Wählen des Eintrags schaltet es nicht um |
is_text | string | "" | Beschriftung des Eintrags, Rich-Text-Auszeichnung zulässig; liest den Schlüssel zurück, wenn der Eintrag ohne Beschriftung hinzugefügt wurde |
is_shortcut | string | "" | Tastenkürzel rechts vom Eintrag angezeigt und aktiv: Es wählt ihn, wo immer der Fokus ist, und löst ue_menu_selected wie ein Klick aus — nicht, wenn der Eintrag, eine Ebene darüber oder sein Dropdown deaktiviert oder ausgeblendet ist. Wird so zurückgelesen, wie es geschrieben wurde; "" entfernt es. Dieselbe Regel wie für ein Werkzeug: Strg oder Alt, oder F1 bis F24 |
is_image | string | "" | Symbol des Eintrags, beim nächsten Öffnen des Menüs angezeigt; "" entfernt es |
Die Bilder akzeptieren alle von der Bibliothek erkannten Formen: Pfad, mono:, tint:, DLL-Ressource. Ein Menüeintrag übernimmt die fünf Elementfarben (il_back_color, il_text_color, ihre Hover-Varianten, il_accent), die im Menü gezeichnet werden; er zeigt keinen Tooltip — ein natives Menü hat keinen.
Events #
| Event | Ausgelöst wenn |
|---|---|
ue_clicked (string as_keys) | Eine Schaltfläche — oder der Hauptteil einer geteilten Schaltfläche — wird ausgelöst: per Klick, über ihr Tastenkürzel oder aus dem Chevron-Bereich, wenn sie eingeklappt ist. as_keys ist ihre Adresse, "main/save" |
ue_toggled (string as_keys, boolean ab_checked) | Ein Umschalter wechselt den Zustand; ab_checked trägt den neuen Zustand. Nur durch eine Geste des Benutzers ausgelöst: das Setzen von ib_checked löst es nicht aus. In einer Gruppe (is_group) löst es nur der gedrückte Umschalter aus |
ue_menu_selected (string as_keys) | Ein Eintrag eines Dropdown-Menüs wird gewählt — mit der Maus, der Tastatur oder seinem Tastenkürzel, in der Leiste wie im Chevron-Bereich. as_keys ist seine vollständige Adresse, "main/export/img/png". Gilt für das Menü einer geteilten Schaltfläche wie für das eines Dropdowns; der Eintrag selbst ist die letzte Ebene der Adresse |
ue_text_changed (string as_keys, string as_text) | Ein Eingabefeld wird bestätigt (Eingabe oder Fokusverlust); die Eingabetaste endet im Feld und betätigt nicht die Standardschaltfläche des Fensters. Esc gibt dem Feld seinen Text zurück, ohne es auszulösen, und das Setzen von is_text löst es nicht aus |
ue_date_changed (string as_keys, string as_date) | Ein Datum wird gewählt ("jjjj-mm-tt"). Nur durch eine Auswahl des Benutzers im Kalender ausgelöst; das Setzen von is_date löst es nicht aus |
ue_combo_changed (string as_keys, string as_text) | Der Benutzer hat einen Wert aus der Liste einer Dropdown-Liste gewählt oder in einer bearbeitbaren Liste einen eingegeben und bestätigt (Eingabe oder Verlassen des Feldes) — in der Leiste oder im Chevron-Bereich. as_text ist der Wert, as_keys = Leiste/Werkzeug. Ein eingegebener Wert löst es nur aus, wenn er sich geändert hat; Escape stellt den Wert wieder her, ohne es auszulösen; is_text aus Ihrem Code löst nichts aus. Das Event des Menübands: gleicher Name, gleiche Bedeutung |
ue_bar_reordered (string as_key, integer ai_band, integer ai_index) | Der Benutzer hat eine Leiste am Griff in ein anderes Band oder auf einen anderen Rang gezogen (erfordert ib_reorderable). Nennt welche Leiste sich bewegt hat und wohin, während ue_layout_changed die gesamte Anordnung trägt. Band und Rang beginnen bei 1, wie ii_band und ii_index |
ue_layout_changed (string as_layout_json) | Die Anordnung hat sich geändert — der Benutzer hat eine Leiste am Griff gezogen, oder Ihr eigener Code hat eine verschoben oder verborgen oder eine Anordnung mit of_set_layout wiederhergestellt. Trägt die gesamte Anordnung, nicht nur das Verschobene, Bänder und Ränge ab 1 gezählt: so zu speichern, wie sie kommt, und an of_set_layout zurückzugeben. Das Hinzufügen einer Leiste, die eine andere verschiebt, löst es ebenfalls aus; nichts wird ausgelöst, wenn sich nichts bewegt hat (eine bereits sichtbare Leiste erneut anzeigen) |
ue_item_rclicked (string as_keys) | Rechtsklick auf ein Werkzeug (ein ausgegrautes meldet nichts); as_keys ist seine Adresse. Öffnen Sie hier Ihr eigenes Kontextmenü. Ein Rechtsklick außerhalb jedes Werkzeugs löst stattdessen ue_rclicked aus — nie beide |
ue_rclicked ( ) | Rechtsklick auf die Leiste außerhalb jedes Werkzeugs (ein Rechtsklick auf ein Werkzeug löst nur ue_item_rclicked aus) |
ue_mouse_enter ( ) | Die Maus betritt die Leiste |
ue_mouse_leave ( ) | Die Maus verlässt die Leiste |
ue_auto_height (long al_height) | Die ideale Höhe hat sich geändert und die Leiste hat sich daran angepasst — immer aktiv: Die Anzahl der Zeilen bestimmt die Höhe |
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 #
Vorab aktivierte Umschalter und ein ausgegrautes Werkzeug #
// Zwei Umschalter, ein Trennstrich und eine Schaltflaeche
uo_toolbar.of_add_toggle(/*keys*/ uo_toolbar.MAIN_BAR + "/bold", /*text*/ "", /*image*/ "mono:img\bold.svg", /*tooltip*/ "Fett")
uo_toolbar.of_add_toggle(/*keys*/ uo_toolbar.MAIN_BAR + "/italic", /*text*/ "", /*image*/ "mono:img\italic.svg", /*tooltip*/ "Kursiv")
uo_toolbar.of_add_separator(/*keys*/ uo_toolbar.MAIN_BAR)
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/undo", /*text*/ "", /*image*/ "mono:img\undo.svg", /*tooltip*/ "Rueckgaengig")
// Jedes Werkzeug wird ueber sein Handle gesteuert, das man von SEINER Leiste erhaelt
uo_toolbar.of_item(/*keys*/ uo_toolbar.MAIN_BAR + "/bold").ib_checked = true // Umschalter von vornherein aktiviert
uo_toolbar.of_item(/*keys*/ uo_toolbar.MAIN_BAR + "/undo").ib_enabled = false // vorerst nichts rueckgaengig zu machen
// Event ue_toggled von uo_toolbar
if as_keys = "main/bold" then of_apply_bold(ab_checked)
Kaskadierendes Dropdown-Menü #
// Das Menue wird vom Komponenten aus gefuellt : drei Ebenen, Leiste/Dropdown/Eintrag
uo_toolbar.of_add_dropdown(/*keys*/ uo_toolbar.MAIN_BAR + "/export", /*text*/ "Exportieren", &
/*image*/ "mono:img\save.svg", /*tooltip*/ "Die Akte exportieren")
uo_toolbar.of_add_menu_item(/*keys*/ uo_toolbar.MAIN_BAR + "/export/exp_pdf", /*label*/ "PDF", /*image*/ "")
uo_toolbar.of_add_menu_item(/*keys*/ uo_toolbar.MAIN_BAR + "/export/exp_csv", /*label*/ "CSV", /*image*/ "")
uo_toolbar.of_add_menu_separator(/*keys*/ uo_toolbar.MAIN_BAR + "/export")
// Untermenue: Der uebergeordnete Eintrag wird als erstes Argument genannt
uo_toolbar.of_add_menu_item(/*keys*/ uo_toolbar.MAIN_BAR + "/export/exp_img", /*label*/ "Bild...", /*image*/ "")
uo_toolbar.of_add_menu_item(/*keys*/ uo_toolbar.MAIN_BAR + "/export/exp_img/exp_png", /*label*/ "PNG", /*image*/ "")
uo_toolbar.of_add_menu_item(/*keys*/ uo_toolbar.MAIN_BAR + "/export/exp_img/exp_jpg", /*label*/ "JPEG", /*image*/ "")
// Ein Eintrag wird ueber SEIN Handle gesteuert, an seiner Adresse
uo_toolbar.of_menu_item(/*keys*/ uo_toolbar.MAIN_BAR + "/export/exp_csv").ib_enabled = false
// Event ue_menu_selected von uo_toolbar: (as_keys)
n_pbt_utils lnv_utils // autoinstantiate : nichts zu erzeugen, nichts zu zerstoeren
string ls_ids[]
// Ein Eintrag des Export-Menues : das letzte Glied nennt das Format
if lnv_utils.of_split_path(/*keys*/ as_keys, /*out*/ ls_ids) >= 3 then
if ls_ids[2] = "export" then of_export(ls_ids[UpperBound(ls_ids)])
end if
Suchfeld und Datumsauswahl #
// Eine Schaltflaeche mit ihrem Tastenkuerzel, dann ein Trennstrich
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/save", /*text*/ "", /*image*/ "mono:img\save.svg", /*tooltip*/ "Speichern")
uo_toolbar.of_item(/*keys*/ uo_toolbar.MAIN_BAR + "/save").is_shortcut = "Ctrl+S" // Tastenkombination aktiv und angezeigt
uo_toolbar.of_add_separator(/*keys*/ uo_toolbar.MAIN_BAR)
// 160 px breit; die Eingabe wird bei der Bestaetigung gemeldet
uo_toolbar.of_add_textbox(/*keys*/ uo_toolbar.MAIN_BAR + "/search", /*text*/ "", /*width*/ 160, /*tooltip*/ "Suchen (Eingabetaste zum Bestaetigen)")
// Eine Beschriftung vor einer Datumsauswahl
uo_toolbar.of_add_label(/*keys*/ uo_toolbar.MAIN_BAR + "/lbl_due", /*text*/ "Fällig am:")
uo_toolbar.of_add_datepicker(/*keys*/ uo_toolbar.MAIN_BAR + "/due", /*date*/ "2026-07-11", /*tooltip*/ "Faelligkeitsdatum")
// Event ue_text_changed von uo_toolbar
if as_keys = "main/search" then of_filter(as_text)
// Event ue_date_changed von uo_toolbar: as_date im Format "jjjj-mm-tt"
if as_keys = "main/due" then id_due_date = Date(as_date)
Zwei Leisten und eine gemerkte Anordnung #
Mit ib_reorderable = true kann der Benutzer eine Leiste an ihrem Griff (links von der Leiste) fassen und auf ein anderes Band oder an eine andere Position verschieben. Bewahren Sie die Anordnung beim Schließen auf und stellen Sie sie beim Öffnen wieder her.
// Ohne diese Zeile gibt es keinen Griff : der Benutzer kann nichts verschieben
uo_toolbar.ib_reorderable = true
// Die Hauptleiste und ihre zwei Schaltflaechen
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/new", /*text*/ "Neu", /*image*/ "", /*tooltip*/ "")
uo_toolbar.of_add_button(/*keys*/ uo_toolbar.MAIN_BAR + "/open", /*text*/ "Öffnen", /*image*/ "", /*tooltip*/ "")
// Zweite Leiste, auf Band 2 (zweite Zeile) an erster Position abgelegt
uo_toolbar.of_add_bar(/*key*/ "format", /*band*/ 2, /*index*/ 1)
uo_toolbar.of_add_toggle(/*keys*/ "format/bold", /*text*/ "F", /*image*/ "", /*tooltip*/ "Fett")
// Eine Leiste laesst sich auch jederzeit ueber ihre Eigenschaften umsetzen
uo_toolbar.of_bar(/*key*/ "format").ii_band = 1
uo_toolbar.of_bar(/*key*/ "format").ii_index = 2 // zweite Leiste der ersten Zeile
// Event ue_layout_changed von uo_toolbar: die gewaehlte Anordnung aufbewahren
is_layout = as_layout_json
// Beim naechsten Oeffnen: wiederherstellen, was der Benutzer eingerichtet hatte
if is_layout <> "" then uo_toolbar.of_set_layout(/*layout_json*/ is_layout)
Geteilte Schaltfläche und sich ausschließende Umschalter #
// Einfuegen : der Hauptteil fuegt sofort ein, der Pfeil bietet die anderen Wege an
uo_toolbar.of_add_split_button(/*keys*/ "edit/paste", /*text*/ "", /*image*/ "mono:img\paste.svg", /*tooltip*/ "Paste")
uo_toolbar.of_add_menu_item(/*keys*/ "edit/paste/plain", /*label*/ "Plain text", /*image*/ "")
uo_toolbar.of_add_menu_item(/*keys*/ "edit/paste/special", /*label*/ "Paste special...", /*image*/ "")
// Die Ausrichtungs-Umschalter teilen eine Gruppe : immer nur einer gedrueckt
uo_toolbar.of_add_toggle(/*keys*/ "edit/left", /*text*/ "", /*image*/ "mono:img\left.svg", /*tooltip*/ "Left")
uo_toolbar.of_add_toggle(/*keys*/ "edit/center", /*text*/ "", /*image*/ "mono:img\center.svg", /*tooltip*/ "Center")
uo_toolbar.of_add_toggle(/*keys*/ "edit/right", /*text*/ "", /*image*/ "mono:img\right.svg", /*tooltip*/ "Right")
uo_toolbar.of_item(/*keys*/ "edit/left").is_group = "align"
uo_toolbar.of_item(/*keys*/ "edit/center").is_group = "align"
uo_toolbar.of_item(/*keys*/ "edit/right").is_group = "align"
uo_toolbar.of_item(/*keys*/ "edit/left").ib_checked = true
// Event ue_clicked von uo_toolbar : der Hauptteil der geteilten Schaltflaeche
if as_keys = "edit/paste" then of_paste()
// Event ue_toggled von uo_toolbar : nur der gedrueckte Umschalter loest es aus
if ab_checked and Left(as_keys, 5) = "edit/" then of_align(Mid(as_keys, 6))
Überlauf: „Weitere Werkzeuge“ #
Wenn die Breite nicht mehr ausreicht, werden die Werkzeuge, die nicht mehr hineinpassen, in ein Menü Weitere Werkzeuge eingeklappt, das durch einen Winkel am Ende der Leiste gekennzeichnet ist. Das geschieht automatisch, es ist nichts zu programmieren: Die eingeklappten Werkzeuge bleiben anklickbar und lösen dieselben Events aus. Ein eingeklapptes Feld — Textfeld oder Datumsauswahl — bleibt ein echtes Feld: Sie tippen darin, Sie wählen darin ein Datum, und das Event wird ausgelöst, als wäre das Werkzeug in der Leiste geblieben.
Automatische Höhe #
Es ist nichts zu aktivieren: Die Anzahl der Zeilen (of_set_layout) bestimmt die Höhe, die Leiste passt sich von selbst an und benachrichtigt Sie.
// Event ue_auto_height von uo_toolbar
uo_content.y = uo_toolbar.y + al_height
uo_content.height = parent.workspaceheight() - uo_content.y
Siehe Gemeinsame Basis.
Best Practices #
- Verwenden Sie
MAIN_BAR, solange eine Leiste genügt: sie entsteht mit ihrem ersten Werkzeug, Sie müssen sie nicht hinzufügen. Um sie anderswo als hinter den anderen Leisten zu platzieren, fügen Sie sie vor jedem Werkzeug hinzu —of_add_bar(MAIN_BAR, 1, 1); ist sie einmal entstanden, liefertof_add_bar(MAIN_BAR)-5, und sie wird überof_bar(MAIN_BAR).ii_bandverschoben. - Bei einer Toolbar nimmt
of_register_shortcutdie Adresse des Werkzeugs oder Eintrags, den es auslöst. Ein Tastenkürzel braucht Strg oder Alt oder eine Taste F1 bis F24: eine einzelne Taste bleibt der Eingabe. - Sprechen Sie ein Werkzeug immer über seinen Pfad an —
of_item("main/save")— und nie über den bloßen Bezeichner: Genau das macht Bezeichner von einer Leiste zur nächsten wiederverwendbar. - Gruppieren Sie verwandte Werkzeuge mit
of_add_separator("main")statt mit zusätzlichen Leisten. - Füllen Sie bei Schaltflächen mit reinem Symbol stets den Tooltip aus: Er ist die einzige Beschriftung, die dem Benutzer zur Verfügung steht.
- Wenn Sie den Benutzer die Leisten umsortieren lassen, merken Sie sich
ue_layout_changedund spielen Sieof_set_layoutbeim Öffnen wieder ein, sonst ist die Mühe bei jedem Start verloren. - Rufen Sie
of_reset()auf, bevor Sie die Symbolleiste für einen anderen Kontext vollständig neu aufbauen. - Wenn die Befehle für eine Leiste zu zahlreich werden, wechseln Sie zum ribbon, der nach Registerkarten und Gruppen gegliedert ist.
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.
| Mitglieder | Rolle | Beschrieben in |
|---|---|---|
of_count · of_keys_at · of_has | Durchlaufen, was die Komponente enthält | 3.2 Die Items |
of_reset | Die Komponente zurücksetzen | 3.6 Eine Komponente zurücksetzen: of_reset() |
of_register_shortcut · of_clear_shortcuts | Tastenkürzel der Komponente | 3.5 Tastenkombinationen |
of_is_created · of_is_ready · of_get_last_error | Ob sie entstanden ist, ob sie bereit ist, was fehlschlug | 3.7 Diagnose |
of_save_as_png · of_save_as_jpg | Die Darstellung als Bild exportieren | 3.8 Die Darstellung als Bild exportieren |
of_set_redraw | Änderungen zu einem einzigen Neuzeichnen bündeln | 3.10 Best Practices |
of_preload_icons | Symbole ohne Verzögerung | Sofortige Anzeige: of_icon |
of_set_translation | Eine Beschriftung der Komponente übersetzen | 5.2 Eine Beschriftung anpassen: of_set_translation |
of_focus_webview | Der Komponente den Fokus geben | 6.4 Tastatur und Fokus |
of_print · of_print_to_pdf | Drucken oder ein PDF schreiben | 6.9 Drucken |
of_set_property · of_get_property · of_component_name | Eine Eigenschaft über ihren Namen steuern | 3.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.