PBToolboxAI v4 ← Site

11. Von 3.0 auf 4.0 migrieren #

← Von 2.0 auf 3.0 migrieren · Inhalt · Versionshinweise →


4.0 entfernt zwei Methoden der zweiunddreißig Komponenten aus 3.0 — of_set_data der Kreuztabelle, umbenannt in of_from_datastore (11.33), und of_transform von n_pbt_xml, das mit XSLT wegfällt (11.31) — und ändert Signaturen, die Ihnen der Compiler Zeile für Zeile zeigt: drei umbenannte Eigenschaften (id_minimum und id_maximum des Fortschrittsbalkens, 11.6; il_doc_line des Code-Editors, 11.28), hinzugefügte oder umbenannte Ereignisargumente (ue_tile_moved, 11.6; ue_failed des REST-Clients, 11.6, und des Videos, 11.26; ue_error des Bildes, 11.25; ue_cell_double_clicked, 11.33; ue_closed der Befehlspalette, 11.36; ue_toast_clicked, ue_toast_action und ue_toast_dismissed des Toasters, 11.38), of_count und of_keys_at in long (11.34) sowie Methoden, die nun einen Code zurückgeben (of_refresh, of_select, of_show, of_scroll_to_end, of_set_header…). 11.6 gleicht außerdem zwei Zählweisen, ein Ereignis und den Pfad des JSON-Baums an die übrige Bibliothek an: dort, und in den genannten Abschnitten, ist Code anzufassen, der bisher kompilierte. Die Änderungen betreffen vor allem das Menüband (ribbon), das vollständig überprüft wurde. Zwei Änderungen verlangen, Ihren Code erneut zu lesen: die Frage vor einer Galeriekachel (11.1) und die durch ein Entfernen freigegebenen Handles (11.2). Die übrigen korrigieren Verhaltensweisen, die Sie vielleicht umgangen haben (11.3) — darunter der Rechtsklick auf ein Element, der in allen Komponenten nur noch ein Ereignis erzeugt, und der Brotkrumenpfad (breadcrumb), dessen Adressen und Ablehnungen überarbeitet wurden. Danach folgen der Generator n_pbt_menu2ribbon (11.4) und die Ergänzungen (11.5). Die Seitenleiste (listbar) folgt der Regel aus 11.1 ebenfalls: Ihre Frage vor einer Auswahl ist nun optional. Die Registerkarten (tab) folgen derselben Regel: Ihre beiden Fragen, vor einem Registerkartenwechsel und vor dem Schließen, sind nun optional (11.1). Schließlich folgen die Designs der Anwendung (11.7): der Akzent der Anwendung übersteht einen Designwechsel, und eine leer gelassene Designachse folgt der der Anwendung. Die Sicherheitsüberprüfung von crypto (11.8) schließt eine Algorithmusverwechslung bei JWT-Token, ersetzt mehrere stille Fälle durch eine Ablehnung mit Begründung und legt die Regel für relative Dateipfade fest.

Die vollständige Überprüfung vom 28.09.2026 hat jede ausgelieferte Komponente erneut gelesen; was sie ändert, hat einen Abschnitt je Komponente: restclient (11.9), speechout (11.10), statictext und formatierter Text (11.11), breadcrumb (11.12), buttonbar und die Fenstertastatur (11.13), button (11.14), menubar (11.15), ribbon (11.16), toolbar (11.17), statusbar (11.18), dockcontainer (11.19), tab (11.20), listbar (11.21), tilesbox (11.22), stepbar (11.23), progressbar (11.24), picture (11.25), video (11.26), pdfviewer (11.27), codeeditor (11.28), jsontree und xmltree (11.29, 11.30), xml (11.31), json (11.32), crosstab (11.33), shellexplorer (11.35), commandpalette (11.36), radialmenu (11.37), toaster (11.38) und messagebox (11.39); der gemeinsame Sockel hat zwei Abschnitte, 11.34 und 11.40. Eine Regel zieht sich durch alle, die von PowerBuilder (SelectTab löst SelectionChanged aus): Eine von Ihrem Code verlangte Änderung löst dasselbe Ereignis aus wie eine Geste des Benutzers und stellt die Veto-Frage, wenn Sie sie eingeschaltet haben; die Methode liefert -4, wenn Sie ablehnen. Das gilt für eine Auswahl (of_select_*), ein Öffnen oder Zuklappen (of_expand, of_collapse, of_open), einen Zoom, einen Vollbildmodus, ein Kapitel; nichts wird ausgelöst, wenn sich nichts ändert, und of_reset bleibt still. Einen WERT zu setzen (ein Häkchen, einen Text, eine Lautstärke, einen Filter) bleibt still, wie SetItem. ue_layout_changed wird in beiden Fällen ausgelöst: Es meldet, dass sich eine zu speichernde Anordnung geändert hat.

11.1 Die Fragen vor einer Änderung sind jetzt optional #

In 3.0 stellte das Menüband die Frage ue_gallery_selection_changing standardmäßig, bevor eine Kachel übernommen wurde: ib_veto_gallery war true. In 4.0 ist es false, wie jedes abbrechbare Ereignis der Bibliothek: Jede Frage kostet einen Hin- und Rückweg zu PowerBuilder, und nur eine Anwendung, die antwortet, soll ihn bezahlen. Eine Anwendung, die das Ereignis nicht skriptete, sieht keinen Unterschied. Neu: of_select_gallery_item löst ue_gallery_selection_changed wie ein Klick aus und stellt, bei eingeschalteter Frage, diese ebenfalls; eine Ablehnung lässt es -4 liefern, die Kachel ändert sich nicht.

// 4.0 : the question is only asked on request. If your ue_gallery_selection_changing
// returns false for some tiles, switch it on where the ribbon is built.
uo_ribbon.ib_veto_gallery = true

Das Rezept: Suchen Sie in Ihren Menüband-Nachfahren nach ue_gallery_selection_changing; wo es geskriptet ist, fügen Sie beim Aufbau ib_veto_gallery = true hinzu. Wo Sie ib_veto_gallery = false schrieben, um die Frage abzuschalten, ist die Zeile nun überflüssig und kann entfallen.

Die Seitenleiste (listbar): ib_veto_selection #

Gleiche Regel: In 3.0 stellte die listbar vor jedem Auswahlwechsel standardmäßig ue_selection_changing (ib_veto_selection war true). In 4.0 ist es false. Wenn Sie ue_selection_changing geskriptet haben, um einen Wechsel abzulehnen, setzen Sie ib_veto_selection = true: Ohne das wird das Ereignis nicht mehr ausgelöst, und die Auswahl wechselt, ohne Sie zu fragen. Eingeschaltet wird die Frage auch für eine von Ihrem Code verlangte Auswahl gestellt (of_select_item, of_clear_selection), wie in 3.0; eine Ablehnung lässt sie nun -4 liefern, und die Auswahl bewegt sich nicht. ue_selection_changed wird wie bisher ausgelöst.

// 4.0 : the listbar only asks on request. If your ue_selection_changing
// returns false (unsaved changes), switch the question on where the bar is built.
uo_nav.ib_veto_selection = true

Das Rezept: Suchen Sie in Ihren Nachfahren von u_pbt_listbar nach ue_selection_changing; wo es false zurückgibt, fügen Sie beim Aufbau ib_veto_selection = true hinzu. Wo Sie ib_veto_selection = false schrieben, um die Frage abzuschalten, ist die Zeile nun überflüssig und kann entfallen.

Die Registerkarten (tab): ib_veto_selection und ib_veto_close #

Gleiche Regel, zwei Fragen: In 3.0 stellte die Komponente tab standardmäßig ue_selection_changing vor jedem Registerkartenwechsel und ue_tab_closing vor jedem Schließen (ib_veto_selection und ib_veto_close waren true). In 4.0 sind beide false. Wenn Sie ue_selection_changing oder ue_tab_closing geskriptet haben, um abzulehnen, setzen Sie ib_veto_selection = true oder ib_veto_close = true: Ohne das wird das Ereignis nicht mehr ausgelöst, und die Registerkarte wechselt oder schließt, ohne Sie zu fragen. Eingeschaltet wird die Frage auch für of_select_page gestellt, wie in 3.0, aber bevor die Registerkarte wechselt: Eine Ablehnung lässt es -4 liefern, und nichts bewegt sich; eine Zustimmung wechselt die Registerkarte sofort, ue_selection_changed wird wie bisher ausgelöst, und of_selected_key() liefert direkt danach bereits den neuen Schlüssel.

// 4.0 : the tab only asks on request. If your ue_selection_changing or
// ue_tab_closing returns false (unsaved changes), switch the questions on.
uo_tabs.ib_veto_selection = true
uo_tabs.ib_veto_close     = true

Das Rezept: Suchen Sie in Ihren Nachfahren von u_pbt_tab nach ue_selection_changing und ue_tab_closing; wo eines false zurückgibt, fügen Sie beim Aufbau die passende Zeile hinzu. Wo Sie = false geschrieben haben, um eine Frage abzuschalten, ist die Zeile nun überflüssig und kann entfallen.

11.2 Hinzufügungen melden, was sie ablehnen, Entfernungen geben ihre Handles frei #

In 3.0 lieferte eine Hinzufügung, die das Menüband ignorierte — ein bereits vergebener Schlüssel, ein Menüeintrag unter einer einfachen Schaltfläche —, trotzdem 0, und nichts erschien. In 4.0 liefert sie -5, und den Code des Sendens (-2, wenn die Komponente nicht erzeugt ist) statt einer festen 0. Und ein Entfernen gibt die Handles dessen frei, was geht: eine Variable mit dem Handle eines entfernten Steuerelements ist nicht mehr gültig.

Was3.04.0
Hinzufügen eines bereits vergebenen Schlüssels (Registerkarte, Gruppe, Steuerelement)0, ignoriert-5
Menüeintrag, Kombinationsfeld-Auswahl oder Kachel unter einem Steuerelement anderer Art0, ignoriert-5
of_add_tab, of_insert_tab, of_add_group, of_add_contextual_*, of_add_qat auf einer nicht erzeugten Komponente0-2
Ein nach of_remove_tab, of_remove_group, of_remove_item oder of_clear behaltenes Handleblieb bis zur Zerstörung des Menübands im Speicherfreigegeben: IsValid() liefert false
// 4.0 : after a removal or of_clear, ask the component for the handle again
uo_ribbon.of_clear()
uo_ribbon.of_add_tab(/*key*/ "home", /*title*/ "Home")
uo_ribbon.of_add_group(/*keys*/ "home/clip", /*title*/ "Clipboard")
uo_ribbon.of_add_button(/*keys*/ "home/clip/paste", /*label*/ "Paste", /*image*/ "")
uo_ribbon.of_item(/*keys*/ "home/clip/paste").ib_enabled = false

Das Rezept: Behalten Sie kein Handle über ein Entfernen oder ein of_clear hinaus — fordern Sie es erneut mit of_tab, of_group, of_item oder of_menu_item an, was nichts kostet. Wo ein Aufbaufehler für Sie zählt, prüfen Sie den Code, den das Hinzufügen liefert.

11.3 Weitere Verhaltensweisen, die Sie bemerken können #

Ist das Fenster schmal, klappt das Menüband seine Gruppen zu einer Schaltfläche zusammen, die ein Bedienfeld öffnet. Aus diesem Bedienfeld stammen die sichtbarsten Unterschiede:

Was3.04.0
Schaltfläche oder Hauptteil eines Split, im Bedienfeld einer zusammengeklappten Gruppe angeklicktue_menu_selected("", false)ue_clicked(adresse)
In diesem Bedienfeld gewählter Menüeintragunvollständige Adressevollständige Adresse, Kaskade inbegriffen
Ausgegrautes Steuerelement oder ausgeblendeter Eintrag in diesem Bedienfeldreagierte / wurde angezeigtreagiert nicht / wird nicht angezeigt
Großer Split, aus Platzmangel verkleinertein Klick öffnete nur das Menüzwei Teile: der Befehl und der Menüpfeil
Menüeintrag mit dem Schlüssel seines Steuerelements (home/clip/paste/paste)ue_clicked("home/clip/paste")ue_menu_selected("home/clip/paste/paste", …)
of_menu_item("…/exp/pdf"), wenn eine Kaskade ebenfalls pdf enthältkonnte …/exp/more/pdf treffentrifft den Eintrag, den die Adresse nennt
as_from_keys von ue_gallery_selection_changed ohne vorherige Kacheldie Adresse der Galerie""
Zurücklesen eines Handles der Symbolleiste für den Schnellzugriff, il_color einer Farbauswahl, ii_visible_items, is_keytip einer Registerkarte, il_color einer Kontextgruppe, of_count() einer Galerieleer, -1 oder 0der angezeigte Wert
of_keys_at eines Kombinationsfelds"home/font/cb/cb:Arial""home/font/cb/Arial": der Schlüssel einer Auswahl ist ihre Beschriftung
of_ctx_group(k).il_color, wenn eine Registerkarte ebenfalls den Schlüssel k trägtfärbte die Registerkartefärbt nur das Banner
Elementfarben (il_back_color…) und is_tooltip einer Registerkarte oder Gruppeohne Wirkungangewendet; der Tooltip einer Gruppe erscheint auf ihrem Titel
of_remove_item("save") auf einer Schaltfläche der Symbolleiste für den Schnellzugriff-5die Schaltfläche wird entfernt
of_add_app_menu_separator("saveas/s1")ein Strich auf oberster Menüebeneder Strich im Untermenü von saveas; ein Schlüssel ohne / ändert sich nicht
of_clear(), während eine Registerkarte aktiv warkein Ereignisue_selection_changed("")
Drehfeld mit Dezimalschritt (0.1)0.300000000000000040.3
Alt-Tastenkürzel (Keytip) auf einem ausgegrauten Steuerelement, Menüband minimiertdas Menüband blieb offenes schließt sich, nichts wird ausgeführt
toolbar: ausgegrautes Kombinationsfeld, Drehfeld oder Galerie im Chevron-Bedienfeldreagiertenreagieren nicht
Alle: Rechtsklick auf ein Element (ue_item_rclicked, ue_panel_rclicked, ue_row_rclicked…)die Seite sendete auch das Ereignis der Komponente, das keine Komponente mit Elementen an PowerBuilder weitergabein Ereignis, das des Elements; ein ue_rclicked der Komponente, wo es existiert, kommt nur außerhalb der Elemente
Alle: ein Ablegen von Dateien (ib_allow_drop)ue_drag_leave, dann ue_drop_files; Pfade nach 260 Zeichen abgeschnittennur ue_drop_files, vollständige Pfade; of_reset entfernt das Ablageziel
breadcrumb: of_path() mit einem verborgenen Segment oder in der Demoversiondie angezeigten Schlüssel: das verborgene übersprungen, die ersten Segmente abgeschnittendie vollständige Adresse des aktuellen Orts: of_truncate(of_path()) trifft; das Eingabefeld geht von derselben aus
breadcrumb: of_keys_at(n); of_has("computer/C:")der einfache Schlüssel; suchte unter den Zweigen des Menüsdie Adresse des Segments; sucht unter den Segmenten
breadcrumb: Lesen eines Handles mit tiefer Adresse, of_item("a/b/c").is_textlas nur die letzte Ebene: leer bei einem wiederholten Schlüsseldas Segment dieser Adresse
breadcrumb: of_truncate, of_remove_item, of_clear_children, of_remove_child auf einer unbekannten Adresse oder einem wiederholten einfachen Schlüssel; of_add_child unter einem fehlenden Segment oder auf einem bereits vergebenen Zweig; of_add_item einer Adresse, die woanders landen würde0, ignoriert (oder nur der letzte Schlüssel übernommen)-5
breadcrumb: ein nach of_clear, of_remove_item, of_truncate, of_clear_children oder of_remove_child behaltenes Handleblieb im Speicherfreigegeben: IsValid() liefert false
breadcrumb: Eingabefeld unverändert verlassen, oder Fenster gewechselt (Alt+Tab) während der Eingabeue_path_entered ausgelöstnichts; die Eingabe bleibt beim Fensterwechsel
breadcrumb: ausgegrautes Segment; Enter auf einem Segmentsein Chevron öffnete sich und es nahm ein Ablegen an; Enter drückte auch die Standardschaltfläche des Fenstersvollständig wirkungslos; Enter klickt nur das Segment
buttonbar: Enter, während eine andere Schaltfläche der Leiste den Tastaturfokus hatlöste die Standardschaltfläche aus (is_default)löst die fokussierte Schaltfläche aus, wie Windows; die Standardschaltfläche, wenn keine Schaltfläche der Leiste den Fokus hat
buttonbar: ausgegraute oder ausgeblendete Standard- oder Abbrechen-Schaltfläche; is_shortcut einer ausgegrauten oder ausgeblendeten SchaltflächeEnter, Esc oder Alt+Buchstabe wirkungslos verschluckt, auch in einem PowerBuilder-Steuerelement des Fenstersdie Taste bleibt beim Fenster
buttonbar: is_shortcut mit mehreren Buchstaben ("Save")Alt+S funktionierte nur, wenn die Leiste den Fokus hatteAlt+S funktioniert überall im Fenster (der erste Buchstabe, wie dokumentiert)
buttonbar: of_add_button / of_insert_button mit einem schon vergebenen Schlüssel oder einem mit / oder einem senkrechten Strich; of_remove_button / of_move_button mit einem unbekannten Schlüssel0, ignoriert-5
buttonbar: of_remove_button, of_clear_buttonsAlt+Buchstabe-Kürzel, Farben und Tooltip der Schaltfläche blieben (eine unter demselben Schlüssel neu erstellte Schaltfläche übernahm sie); das Handle blieb im Speichersie gehen mit der Schaltfläche; das Handle wird freigegeben: IsValid() liefert false
codeeditor: is_text eines CRLF-Textes zurücklesenin LF (nur im gefalteten Zustand in CRLF): is_text = ls_original war falschmit den übergebenen Zeilenenden, gefaltet oder nicht
codeeditor: is_syntax nach SYNTAX_CSHARP, SYNTAX_CPP, SYNTAX_JAVA, SYNTAX_XML zurücklesendie verwendete Grammatik ("c", "html")der geschriebene Wert
codeeditor: of_insert_text schreibgeschützt oder gefaltetschreibgeschützt eingefügt; gefaltet abgelehnt, aber 0-4, nichts wird eingefügt
codeeditor: ii_doc_linenur ein Band, oft außerhalb der Ansicht, im Umbruchmodus fehlend; ein integerdie Zeile kommt in die Mitte der Ansicht (eine verbergende gefaltete Region öffnet sich), Band auch im Umbruchmodus; Einfügemarke und Auswahl unverändert; ein long — in 4.0 in il_doc_line umbenannt (Abschnitt 11.28)
codeeditor: #regionopen mit ib_foldingim Text als #region umgeschrieben (is_text, auch nach dem Falten)nie verändert; nur die gefaltete Anzeige zeigt #region
codeeditor: ue_find_resultzweimal pro of_find, bei jedem Tastendruck und (0, 0) beim Schließen der Leiste; auch bei ib_search_enabled = false ausgelösteinmal pro Suche oder Schritt; beim Tippen nur bei geänderter Anzahl; nie beim Schließen; of_find wirkungslos bei deaktivierter Suche
codeeditor: ue_caret_changedstumm beim Tippen; gefaltet die ANGEZEIGTE Zeileauch beim Tippen ausgelöst; gefaltet die Zeile der Leiste
codeeditor: Strg+Z nach Enter oder Tab; Enter / Tab im gefalteten Zustandder Rückgängig-Verlauf wurde gelöscht; gefaltet änderte die Taste die Anzeige und ging danach verlorenjeder Tastendruck lässt sich rückgängig machen; gefaltet ist die Taste wirkungslos
codeeditor: ib_folding = true mit ib_line_numbers = falsedie Regionen blieben geschlossen, ohne Markierung zum Öffneneine schmale Leiste behält die Markierungen
commandpalette: of_add_command mit einem schon vergebenen Schlüssel oder einem mit / oder einem senkrechten Strich; of_remove_command mit einem unbekannten Schlüssel0 (ein vergebener Schlüssel ergab zwei Zwillingsbefehle)-5
commandpalette: of_open / of_register_shortcut ohne ipo_owner und ohne ipo_receiver0, und kein Event kam je an-5
commandpalette: das Kürzel, gedrückt während die Palette offen istohne Wirkungschließt die Palette
commandpalette: ein zerstörtes Palettenobjekt (Seite oder Fenster geschlossen)sein Kürzel blieb registriert und schluckte die Taste im Fenster, ganz ohne Eventdas Kürzel verschwindet mit dem Objekt, und eine von ihm geöffnete Palette schließt sich
commandpalette: auf einer Zeile angezeigtes Kürzel, auf einer nicht lateinischen Tastatur, mit einer Ziffer und Umschalt, Ctrl+Space, Ctrl+Up, Ctrl+Del oder einer F-Taste alleinreagierte nicht; Win + Buchstabe startete den Befehl mit diesem einzelnen Buchstaben als Kürzelreagiert: die physische Taste, gelesen wie die DLL sie liest; Win ist nie ein Modifikator
commandpalette: ein Befehl mit dem Kürzel Ctrl+C, Ctrl+V, Ctrl+Z oder Ctrl+A, beim Tippender Befehl lief statt Kopieren, Einfügen…das Suchfeld behält diese vier Tasten
commandpalette: of_resetbehielt is_recent, eine offene Palette und das schon registrierte Kürzelleert sie, schließt sie und setzt das registrierte Kürzel auf SHORTCUT_DEFAULT zurück
commandpalette: pbm_custom02 des Fensters ipo_ownerbei jedem Paletten-Event ausgelöstnie: nur ein gesetzter ipo_receiver erhält ihn noch
Alle: einen langen Textwert zurücklesen (is_text eines großen Skripts)mit der Größe immer langsamer (mehrere Sekunden); über einer Million Zeichen ohne Warnung abgeschnittenproportional zur Größe; vollständig
n_pbt_utils.of_dir_has_subfolderszählte verborgene und System-Ordner sowie Junctions; über 260 Zeichen unlesbarignoriert sie wie der Explorer (die Überladung ab_include_hidden zählt sie); liest lange Pfade
crosstab: Tausendertrennzeichen von of_set_value_formatgalt für ALLE Kennzahlen; "," nicht erkannt ($1 234 auf Französisch)Einstellung DIESER Kennzahl; ",", ".", " " erkannt; "" = Standard des Menüs Optionen
crosstab: of_set_member_filter(Feld, "")kein Element behalten: leere Tabelleentfernt den Filter, wie of_set_member_order("")
crosstab: is_show, is_conditional_formatting, of_set_value_format vor of_add_value_fieldwortlos verlorenaufbewahrt, so zurückgelesen, angewendet, wenn das Feld in Werte kommt
crosstab: Sortieren einer Spalte oder Einklappen einer Gruppe mit der Mauskein Eventue_layout_changed, wie alles, was of_get_layout speichert
crosstab: Datumswerte eines DataStore auf einem nicht französischen Rechner (3/15/2025, 15.03.2025)in einen falschen oder leeren Monat gruppiert; Datumswerte nur nach dem Jahr sortiertder richtige Monat; die Spalte als jjjj-mm-tt zurückgelesen, zeitlich sortiert
crosstab: in Deutsch, Italienisch, Spanisch, Portugiesisch angezeigte Zahlenamerikanisch (1,234.5)in der Anzeigesprache (1.234,5 auf Deutsch)
crosstab: of_export_csvZahlen mit Punkt (1436.5), von einem französischen Excel als Text gelesen; eine Beschriftung =… lief beim ÖffnenDezimaltrennzeichen der Anzeigesprache; ein Apostroph vor = + - @
crosstab: of_export_xlsxausgeblendete Summen und Zwischensummen trotzdem exportiert; Gesamtsumme oben ignoriert; ein Symbol „davor“ nach hinten verschobendie Tabelle wie auf dem Bildschirm
crosstab: „Zu Werten hinzufügen“ im Menü eines Feldes, das schon in Werte istersetzte seine Wertefügt einen Wert hinzu, wie das Ziehen
crosstab: „Entfernen“ im Menü eines gefilterten Feldesder Filter blieb aktiv, unsichtbarder Filter geht mit dem Feld
crosstab: AGG_DISTINCT_COUNT auf einer Spalte mit leeren Zellenleer zählte als Wertignoriert, wie in Excel
crosstab: Formel, die eine berechnete Kennzahl nenntakzeptiert, ergab 0über ue_calc_field_error abgelehnt; seine Meldungen sind auf Englisch
crosstab: ue_layout_changed mit einer geschweiften Klammer in einem Element; ad_value von ue_cell_double_clickedLayout abgeschnitten; Wert 0, wenn ein Zeilenfeld value heißt, Exponent verlorenvollständig gelesen
crosstab: ib_enabled = false, über die TastaturEnter öffnete das Menü eines Chips, Strg+C kopiertestumm
crosstab: Tastaturder Fokus fiel nach jeder Aktion an den Seitenanfang zurück; kein Weg, ein Feld zu verschiebender Fokus bleibt auf dem betätigten Element; das Menü eines Chips verschiebt es (andere Zone, links, rechts)
crosstab: dunkles Designnegative Werte und Symbolpfeile schwer lesbar; ausgewählte Farbskala-Zelle unlesbareine eigene Palette im dunklen Modus
crypto: of_jwt_sign mit JWT_EDDSAder Header lautete "alg":"EDDSA", was andere Bibliotheken (jose, PyJWT, jjwt) ablehnen"alg":"EdDSA", der registrierte Name; ein 3.0-Token wird weiterhin geprüft
crypto: of_generate_keypair mit unbekannter Art oder Größe ("ec_p256", 1024)0 und ein RSA-2048-Paar, kommentarlos-5, beide PEM leer, is_last_error nennt die zulässigen KEY_*
crypto: of_hash_file("SHA-256", …); unbekannter Algorithmusleer, und is_last_error meldete „Datei unlesbar“ für eine einwandfreie Dateider Name wird wie bei of_hash gelesen (SHA-256 = HASH_SHA256); ein unbekannter Algorithmus wird als solcher gemeldet, getrennt von einer unlesbaren Datei
crypto: of_base64_encode_file einer zu großen Datei (über 64 MB in 32 Bit, 512 MB in 64 Bit); einer fehlenden Datei im Demo-Modus„Datei unlesbar“; „Demo-Grenze“„zu groß für diesen Prozess“; „Datei unlesbar“ — is_last_error nennt den wahren Grund
crypto: is_last_error nach einem erfolgreichen nativen Aufruf (of_crc32, of_hash mit MD5, of_hash_file…)behielt den Fehler des vorigen Aufrufsleer
crypto: leerer HMAC-Schlüssel; nicht numerisches exp/nbf eines JWT; of_password_verify eines Werts mit über 10 000 000 Runden; of_random_password mit unbekanntem Satzundurchsichtiger Engine-Fehler; ewig gültiges Token; minutenlange Berechnung; CHARSET_ALL kommentarlos genommensofort abgelehnt, is_last_error sagt warum
crypto: of_base64_decode_to_file("", pfad)-50, eine leere Datei
dockcontainer: of_add_panel mit einem unbekannten as_relative_to, einem bereits gehosteten Steuerelement, einem Schlüssel mit / oder senkrechtem Strich, oder POSITION_STACK auf dem Haupt-Panel0: das Panel dockte an der Wurzel an, das Steuerelement wurde doppelt gehostet, oder das auf das Haupt-Panel gestapelte Panel blieb unsichtbar-5, und das Steuerelement wird nicht angetastet
dockcontainer: of_move_panel zu einem unbekannten Ziel, oder POSITION_STACK auf das Haupt-Panel0: das Panel ging an die Wurzel, oder nichts bewegte sich-5
dockcontainer: of_remove_panel, of_resetdas Steuerelement kam ausgeblendet in sein Fenster zurück, an Position und Größe des Dockses kehrt an seinen Platz zurück, in seiner Größe und mit der Sichtbarkeit, die es vor of_add_panel hatte
dockcontainer: is_main vor of_add_panel gesetzt; is_main = ""; is_main eines gestapelten Panelsstillschweigend ignoriert; nichts wurde übertragen; seine Stapelnachbarn wurden unsichtbaraufbewahrt und beim Hinzufügen des Panels angewendet; das Haupt-Panel wird entfernt; es verlässt seinen Stapel, die anderen bleiben sichtbar
dockcontainer: of_set_layout mit einer Anordnung, die keines der Panels kennt, oder mit einem Text, der keine Anordnung istdas Dock wurde geleert, oder die ganze Nachricht wurde verworfen; 0die Panels bleiben, neben den anderen angeordnet (nie auf dem Haupt-Panel); -5 für einen Text, der keine Anordnung ist
dockcontainer: ue_layout_changednur beim Ziehen, bei der Größenänderung und beim Andocken ausgelöst: eine bei diesem Ereignis gespeicherte Anordnung vergaß ein geschlossenes Panel oder die aktive Registerkarteauch ausgelöst, wenn ein Panel geschlossen, ausgeblendet, ausgewählt oder umbenannt wird, und wenn sich das Haupt-Panel ändert
dockcontainer: Klick auf die Registerkarte (oder Kopfzeile) des bereits aktiven Panelsue_panel_selected bei jedem Klicknichts: das Ereignis meldet einen WECHSEL des aktiven Panels
dockcontainer: gelöstes Panel (ib_pinned = false)seine Lasche öffnete sich nur per Klick (die Doku sagte „beim Überfahren“)sie öffnet sich beim Überfahren (400 ms) oder per Klick; beim Überfahren geöffnet, klappt sie wieder ein, wenn die Maus sie verlässt
dockcontainer: Standard-PB-Steuerelement (MultiLineEdit, Schaltfläche…) in einem schwebenden Panelseine Benachrichtigungen (modified, clicked, Farben) kamen nicht mehr ansie kommen an wie im angedockten Zustand
dockcontainer: ein schwebendes Panel ausblenden (ib_visible = false)sein Fenster blieb offenes schließt sich; wieder eingeblendet, kehrt das Panel angedockt an seinen Platz zurück
dockcontainer: schwebendes Fensterihr Nutzbereich war kleiner als das Panel (Titelleiste davon abgezogen), es konnte den Bildschirm verlassen, und ein Titel mit Auszeichnungen zeigte die Tagsder Nutzbereich hat die Größe des Panels, das Fenster bleibt auf dem Bildschirm, der Titel ist reiner Text
dockcontainer: Trennleiste über die Tastaturder erste Pfeil ließ sie auf 50 % springensie startet von ihrer angezeigten Position
json: Null-Wert an of_set_number, of_add_number, of_set_boolean, of_add_boolean, oder Null- bzw. leerer Wert an of_set_raw / of_add_rawdas ganze Dokument wurde null (of_text lieferte null) oder war kein JSON mehr; ein Null-Boolean wurde als false geschriebennull wird geschrieben, der Rest des Dokuments bleibt unberührt
json: Schreiben in ein GELADENES Dokument, dessen Schlüssel als "k" : v oder mit maskiertem Zeichen geschrieben ist, gefolgt von einem Zeilenumbruch, oder dessen Wurzel ein Array ist; of_set_members auf einem solchen Dokumentder Schlüssel wurde doppelt angelegt (das Zurücklesen lieferte den alten Wert), das Schreiben lieferte fälschlich -4, oder das Dokument wurde durch das Fragment ersetztder Wert wird wie in einem gebauten Dokument ersetzt oder hinzugefügt; of_set_members liefert -4, wenn die Wurzel kein Objekt ist
json: of_set_*("items/1/qty", …) — ein NEUER Schlüssel in einem Objekt innerhalb eines Arrays-40: der Schlüssel wird dem ersten Element hinzugefügt; ein Array wird über einen vorhandenen Index durchquert, angelegt wird nur ein Objektschlüssel
json: Pfad mit leerem Segment (/name, a//b, a/)Schlüssel namens "" wurden angelegt; of_remove konnte einen anderen Wert entfernen-5, nichts wird geschrieben; ein Leser antwortet „abwesend“
json: of_load einer falsch geschriebenen Zahl (-, 01, +1, .5, 1., 1e)0, und of_is_valid wahr-4, wie jedes ungültige JSON
json: of_get_number einer Zahl mit Exponent (1e-7, 2.5E+3) oder mehr als 9 NachkommastellenExponent ignoriert (2.5E+3 als 2,5 gelesen), Nachkommastellen bei 9 abgeschnittenExponent aufgelöst, 17 signifikante Stellen erhalten
json: ein großes Dokument lesen oder ändern (eine API-Antwort von 80 KB, 2000 Zeilen)Sekunden pro Aufruf (20 s für of_count), die Anwendung wirkte eingefroreneine zur Größe proportionale Zeit; die Zeilen einzeln lesen (rows/1, rows/2…) oder die Schlüssel mit of_name durchlaufen beginnt nicht mehr von vorn
listbar: of_add_section / of_insert_section mit einem vergebenen Schlüssel oder einem mit / oder senkrechtem Strich; of_add_item / of_insert_item mit einer vergebenen Adresse oder unter einem Abschnitt, den die Leiste nicht hinzugefügt hat; of_remove_item, of_move_item, of_select_item, of_remove_section, of_move_section mit einer unbekannten Adresse0, ignoriert; ein Eintrag unter einem unbekannten Abschnitt erschien unter dem letzten Abschnitt-5; of_add_section gibt auch -2 zurück, wenn die Komponente nicht erstellt ist
listbar: ein nach of_remove_item, of_remove_section oder of_clear gehaltenes Handleblieb im Speicherfreigegeben: IsValid() gibt false zurück
listbar: das Entfernen oder Leeren dessen, was die Auswahl trägt (of_remove_item, of_remove_section, of_clear)die Auswahl verschwand ohne Ereignis; nach of_clear gab of_selected_key noch die alte zurückue_selection_changed(alt, "")
listbar: ue_layout_changedstumm beim Einklappen eines Abschnitts und beim Entfernen eines Eintrags; beim Wechsel in die Symbolleiste ausgelöstausgelöst beim Einklappen (Klick oder ib_collapsed eines Abschnitts) und beim Entfernen; nicht mehr für die Symbolleiste, die nicht zum Layout gehört
listbar: Symbolleiste (ib_collapsed = true)die Einträge eines eingeklappten Abschnitts verschwanden; ein Eintrag ohne Symbol zeigte ein leeres Feld; of_reset ließ die Leiste schmalalle Einträge, eine dünne Linie zwischen den Abschnitten, der Anfangsbuchstabe eines Eintrags ohne Symbol, die Beschriftung beim Überfahren; of_reset gibt der Leiste ihre Breite zurück
listbar: is_image eines Abschnitts; eine Farbe auf Abschnitt k, wenn ein Eintrag ebenfalls den Schlüssel k hatohne Wirkung; der Eintrag bekam die Farbe ebenfallsdas Symbol wird vor dem Titel gezeichnet; nur der Abschnitt bekommt die Farbe
listbar: Tastaturnach einer Beschriftungsänderung oder einer Auswahl reagierten die Pfeiltasten nicht mehr; ohne Auswahl war die Leiste nicht per Tab erreichbar; Abschnittstitel klappten nur mit der Mausder Fokus bleibt auf dem Eintrag; ein Tab-Stopp; die Titel werden mit den Pfeiltasten erreicht und klappen mit Eingabe oder Leertaste
listbar: deaktivierter Eintrag (ib_enabled = false); ib_auto_width auf einer ausgeklappten Leisteverblasste Beschriftung, in hellen Designs schwer lesbar; meldete die bereits gegebene Breitedie Deaktiviert-Farbe des Designs; die Breite, die die längste Zeile verlangt
listbar: Ziehen eines Eintrags (ib_reorderable)Taste außerhalb des Fensters losgelassen: der Eintrag folgte weiter der Maus; der abschließende Klick konnte den abgelegten Eintrag auswählendie Geste endet, wenn die Maus zurückkommt; das Ende eines Ziehens wählt nichts aus
menubar: ue_menu_openingneben dem Aufklappmenü ausgelöst: was es änderte (Einfügen ausgrauen…), war erst beim nächsten Öffnen sichtbardas Aufklappmenü wartet, bis das Ereignis zurückkehrt: die Änderung ist bei diesem Öffnen sichtbar
menubar: of_item, of_remove_item auf einem Eintrag, dessen Schlüssel auch in einer anderen Kaskade existiert (file/export/pdf, file/print/pdf)konnten den anderen Eintrag treffen (den zuerst gefundenen); das auf einem angezeigte Tastenkürzel löste den anderen austreffen den Eintrag, den die Adresse nennt; ein Schlüssel allein durchsucht die Kaskaden nicht mehr
menubar: of_add_menu, of_add_item, of_add_separator auf einem vergebenen Schlüssel, mit / oder senkrechtem Strich, oder unter einem unbekannten Menü oder Elternelement; of_remove_item / of_remove_menu einer unbekannten Adresse0; ein Eintrag mit falsch geschriebenem Elternelement landete in der Wurzel des Menüs, ein vergebener Schlüssel ergab Zwillingseinträge-5
menubar: ein Handle oder Tastenkürzel nach of_remove_item, of_remove_menu oder of_cleardas Handle blieb im Speicher; das Tastenkürzel blieb scharf und schluckte die Taste, die die Anwendung nicht mehr erreichteHandle freigegeben: IsValid() liefert false; Tastenkürzel entschärft
menubar: Eintrag ausgegraut, ausgeblendet oder entfernt, während sein Aufklappmenü offen ist; Tastenkürzel eines Eintrags unter einer ausgegrauten Kaskadeder Klick oder die Taste löste noch ue_item_selected ausnichts
menubar: Item-Farben (il_back_color…) eines Menüs oder Eintrags; is_tooltip eines Menüsohne Wirkung; eine Farbe wurde als -1 zurückgelesenangewendet: auf dem Menütitel, auf dem Eintrag im Aufklappmenü; der Tooltip eines Menüs erscheint auf seinem Titel, ein Eintrag des Aufklappmenüs zeigt keinen
menubar: Tastaturdie Pfeile blieben auf einem ausgegrauten Menü hängen; in RTL waren links und rechts vertauscht; Alt+Buchstabe eines ausgeblendeten Menüs verdeckte denselben Buchstaben eines anderen Menüs; nach Alt+Buchstabe und einer Auswahl schaltete das nächste Alt ausausgegraute Menüs werden übersprungen; die Pfeile folgen der Schreibrichtung; nur ein angezeigtes Menü reagiert auf seinen Buchstaben; das nächste Alt aktiviert die Leiste wieder
menubar: eine Kaskade, deren Einträge alle ausgeblendet sind; of_count("file"), of_keys_atwurde wie ein Befehl gewählt (file/export); Trennlinien wurden mitgezählt (__sep0)ausgegraut; nur Einträge werden gezählt
menubar: of_item("file") — eine Adresse mit einer Ebenelas das Menü zurück und schrieb auf einen nicht vorhandenen Eintrag „file“bezeichnet nichts: verwenden Sie of_menu("file")
Jeder aus einer Komponente oder einem JSON gelesene Text: Escapes \b und \fblieben unverändert stehendekodiert (Rückschritt, Seitenvorschub)
messagebox: ein Dialogfeld, das sich nicht öffnen ließ (WebView2-Laufzeit fehlt, Engine nicht bereit)of_show und die Kurzformen (of_info…) lieferten 0, wie ein Schließen: of_info ließ glauben, ein Dialogfeld sei erschienen-4 (-6, wenn die Laufzeit fehlt), der Grund über of_get_last_error(); of_choose und of_prompt liefern "" und of_get_last_error sagt es. Ein Test = 1 für „bestätigt“ bleibt richtig
messagebox: Esc oder Alt+F4, während eine Abbrechen-Schaltfläche noch herunterzählt (of_add_button_timed)schlossen das Dialogfeld (0)tun nichts bis zum Ende der Wartezeit: sie soll zum Lesen bringen
messagebox: der Text der Meldung und der Anweisungließ sich nicht markieren; ein Druck darauf verschob das Dialogfeldlässt sich markieren und kopieren (Strg+C kopiert die Markierung, ohne Markierung das ganze Dialogfeld); das Dialogfeld wird über Titel, Symbol und Ränder verschoben
messagebox: eine Eingabe von mehr als etwa 900 Zeichen (of_prompt, ib_input)kam leer zurück, wie ein Abbruchkommt vollständig zurück
messagebox: al_hwnd = 0, ein aus einem anderen geöffnetes Dialogfeld, ein verschobenes und dann vergrößertes Dialogfeldder ganze Desktop wurde deaktiviert; das Fenster wurde wieder aktiv, während das erste Dialogfeld noch wartete; das Dialogfeld sprang zurück in die Mitteohne Besitzer wird nichts deaktiviert; das Fenster bleibt deaktiviert, solange ein Dialogfeld darauf wartet; das Dialogfeld behält seinen Platz
progressbar: leerer oder umgekehrter Bereich (id_maximum = 0, dann id_value = 0)0 %, unabhängig vom Wert100 %, sobald der Wert das Maximum erreicht (ein leerer Stapel ist fertig), davor 0 %
progressbar: der angezeigte Prozentsatz, der Ringauf den nächsten Wert gerundet (99,5 % zeigte „100%“); Ring fest auf 128 px; im Wartemodus drehte sich der Ring mit dem Bogen des Werts (leer bei 0: nichts bewegte sich)abgerundet: 100 % heißt fertig; der Ring folgt der Größe des Steuerelements; im Wartemodus dreht sich ein fester Bogen; verlangt Windows weniger Animationen, pulsiert die Anzeige
Jede zurückgelesene double-Eigenschaft (id_value…) auf einem Rechner mit Dezimalkommader Nachkommaanteil wurde falsch gelesen (0,5 wurde nicht als 0,5 zurückgelesen)wird exakt zurückgelesen, unabhängig vom Trennzeichen des Rechners
speechout: ein neues of_speak (oder of_close) während des Lesensdas abgebrochene Lesen löste kein ue_stopped ausjedes begonnene Lesen endet mit einem ue_stopped
speechout: il_timeout_ms = 0brach das synchrone Lesen nach 5 s abkeine Grenze (höchstens 24 Stunden)
speechout: eine Stimme, die nicht erzeugt werden konnte (WebView2-Runtime fehlt, Seite abgelehnt)of_speak, of_speak_from, of_pause, of_resume, of_enqueue, of_clear_queue lieferten -1, of_open den rohen DLL-Code-2 (Komponente nicht erzeugt, wie überall), is_last_error nennt den Grund; -4, wenn die Seite nicht antwortete
speechout: of_speak_sync aus einem Event aufgerufen, das während eines anderen of_speak_sync ausgelöst wurdebrach das Lesen des äußeren Aufrufs ab, der trotzdem 0 lieferteabgelehnt: -4, is_last_error = "already speaking synchronously"
speechout: of_speak_from nach dem letzten Satz0, nichts wurde gelesen-5
speechout: of_is_speaking() direkt nach of_speakfalse, bis die Stimmenliste angekommen wartrue ab of_speak
speechout: of_pick_voice("", Geschlecht) oder unlesbare Stimmenlistewählte in der Sprache der Seite; ein Fehler leerte is_voice"" = is_lang; ein Fehler behält is_voice und füllt is_last_error
speechout: of_voice_used, of_duration, of_spoken_text direkt nach Änderung von is_lang oder des Wörterbuchskonnten mit den vorherigen Einstellungen antwortenantworten mit den soeben gesetzten Einstellungen
speechout: Skriptfehler in der Seite der Stimmestummue_error("script error: …")
statictext: il_back_color mit ii_corner_radiusder Hintergrund füllte das ganze Rechteck, nur die Rahmenlinie war gerundetder Hintergrund folgt der Rundung; außerhalb der Ecken die Farbe des Objekts, auf dem der Block liegt, die auch das Userobject übernimmt
statictext: is_marquee_direction bei Leserichtung von rechts nach linksumgekehrt: MARQUEE_START lief zum Ende, "left" nach rechtsMARQUEE_START läuft zum Anfang der Leserichtung; "left" / "right" bleiben physisch
statictext: Zurücklesen von il_back_color, ii_marquee_speed, is_marquee_direction, ib_marquee_overflow_only, ib_marquee_pause_on_hover, is_font_family-1, 0, "", false, egal was gesetzt wurde; eine Schriftfamilie mit Leerzeichen in Anführungszeichender gesetzte Wert
statictext: ii_marquee_speed = 0behielt die vorherige GeschwindigkeitStandardgeschwindigkeit (60)
statictext: of_reset nach einem RahmenFarbe und Stärke blieben erhalten: der nächste Rahmen erbte siegelöscht
statictext: ib_track_mouse, Komponente während des Überfahrens deaktiviertue_mouse_leave nie ausgelöstue_mouse_leave beim Verlassen ausgelöst
statictext: Laufschrift (ib_marquee)ein [foldarea] ließ sich danach nicht mehr zuklappen; mit ib_marquee_overflow_only begann eine HÖHENänderung von vorn; mit ib_wrap = false ein falsches ue_text_overflow(true)behoben: der Text wird nicht mehr kopiert, nur eine echte neue BREITE wird neu gemessen, und die Laufschrift zeigt den ganzen Text
statictext: ib_hover_effect und überfahrene Links bei einem dunklen Designabgedunkelt (geringerer Kontrast)aufgehellt
Rich Text: [symbol=clock]unverändert angezeigtein einfarbiges Symbol; ein unbekannter Name bleibt Text
statusbar: of_add_panel / of_insert_panel mit einem vergebenen Schlüssel oder einem mit / oder senkrechtem Strich; of_move_panel, of_remove_panel, of_clear_menu, of_add_menu_separator mit einem unbekannten Bereich; of_add_menu_item / of_insert_menu_item unter einem unbekannten Bereich oder mit einem vergebenen Eintrag; of_remove_menu_item, of_move_menu_item mit einer unbekannten Adresse0, ignoriert-5
statusbar: of_insert_panel(…, 0)am Ende der Leiste angefügtan erster Stelle, wie jede Position (0 oder weniger = zuerst)
statusbar: ein Trenner (of_add_sep) in of_count, of_keys_at und den Positionen von of_insert_panel / of_move_panelals Bereich mit leerem Schlüssel gezähltignoriert: eine Position zählt Bereiche
statusbar: ein Trenner zwischen zwei ALIGN_END-Bereichenam Ende der Anfangsgruppe gezeichnetzwischen beiden: er eröffnet die Gruppe des folgenden Bereichs
statusbar: Rechtsklick auf einen nicht anklickbaren Bereichkein Ereignisue_panel_rclicked (ein deaktivierter Bereich bleibt stumm)
statusbar: of_panel(k).ii_progress auf einem Bereich ohne Balken gelesen0, wie ein Balken auf 0 %-1
statusbar: of_menu_item("k"), eine Adresse mit einer Ebeneschrieb in den Bereich k (ib_enabled graute ihn aus)bezeichnet nichts: schreibt nirgendwohin, liest leer
statusbar: Farben und Tooltip eines Bereichs nach of_clear, dann ein unter demselben Schlüssel hinzugefügter Bereichvom neuen Bereich übernommenvergessen: der Bereich beginnt sauber
statusbar: is_state in einem dunklen Design; deaktivierter BereichFarben des hellen Designs, schlecht lesbar; durch Transparenz ausgegraut, Hintergrund beim Überfahren verloreneine lesbare dunkle Palette; durch die Designfarbe ausgegraut, Hintergrund bleibt
statusbar: ein Bereich, dessen Listeneinträge alle ausgeblendet sindHandzeiger und Pfeil, Klick ohne Wirkungein gewöhnlicher Bereich, anklickbar oder nicht je nach ib_clickable
statusbar, toolbar: Pfeiltasten Links / Rechts bei Leserichtung von rechts nach links (RTL)verkehrt herum: Rechts ging zur linken Bildschirmseitein Bildschirmrichtung, wie Register und Menüband
stepbar: ii_current setzenes wurde nichts ausgelöstue_step_changed, wenn sich die Leiste bewegt, wie die Dokumentation es versprach
stepbar: einen Schritt vor dem aktuellen entfernen, einfügen oder verschiebender aktuelle Schritt wechselte stillschweigend (es war ein Rang)derselbe Schritt bleibt aktuell; wird genau er entfernt, geht die Leiste zum nächsten erreichbaren und löst ue_step_changed aus
stepbar: ii_current vor den Schritten gesetzt; of_clear_stepsauf den ersten Schritt zurückgesetzt; der aktuelle Schritt überlebte das Leerenbeibehalten und angewendet, sobald der Schritt existiert; das Leeren beginnt wieder beim ersten Schritt
stepbar: of_add_step / of_insert_step mit einem vergebenen Schlüssel oder einem mit / oder senkrechtem Strich; of_move_step, of_remove_step mit einem unbekannten Schlüssel0, ignoriert-5
stepbar: of_insert_step(…, 0)am Ende der Leiste angefügtan erster Stelle eingefügt, wie jede Position der Bibliothek (of_add_step fügt am Ende an)
stepbar: Pfeiltasten links / rechts in einer Rechts-nach-links-Spracheder Rechtspfeil ging zum nächsten Schritt, der links gezeichnet istvertauscht: der Linkspfeil geht zum nächsten Schritt
tab: of_add_page / of_insert_page mit einem Schlüssel mit / oder senkrechtem Strich; ein fehlgeschlagenes Senden0; die Seite blieb gehostet und ihr Schlüssel vergeben-5; ein fehlgeschlagenes Senden liefert seinen Code, die Seite kehrt in ihr Fenster zurück und der Schlüssel bleibt frei
tab: of_select_page einer ausgeblendeten, deaktivierten oder jenseits der Demo-Grenze liegenden Seite0, und die Seite erschien unter einer Leiste ohne aktive Registerkarte-5, nichts bewegt sich
tab: Kreuz, Tastenkürzel (is_shortcut), „Alle / andere / rechts schließen“ auf einer deaktivierten oder ausgeblendeten Registerkartedie Registerkarte wurde aktiviert oder geschlossen, und PB gab ihre Seite freiohne Wirkung: eine Registerkarte, die man weder sehen noch erreichen kann, wird weder aktiviert noch geschlossen
tab: die aktive Registerkarte wird geschlossen, entfernt oder ausgeblendetdie nächste oder die erste übernahm, auch ausgeblendet oder deaktiviert; as_from_key von ue_selection_changed war leerdie auswählbare Nachbarin übernimmt (rechts, sonst links); as_from_key nennt die wirklich verlassene Registerkarte, auch wenn sie weg ist
tab: keine sichtbare Registerkarte mehr (alle ausgeblendet oder eine Anordnung, die sie ausblendet)die Seite der alten Registerkarte blieb sichtbar, ohne Ereignisdie Seite wird verborgen und ue_selection_changed(alt, "") ausgelöst; eine wieder eingeblendete Registerkarte wird ausgewählt
tab: ein nach of_remove_page oder einem Schließen gehaltenes Handle; sein Tastenkürzelblieben; eine unter demselben Schlüssel wieder geöffnete Seite bekam Farbe, Tooltip und altes Tastenkürzel zurückfreigegeben: IsValid() gibt false zurück, die Seite kommt neu zurück
tab: of_set_layout mit einem Text, der kein JSON ist0, und die Nachricht ging kaputt hinaus-5, nichts wird gesendet
tab: Tastatur in der RegisterleisteEingabe verlor den Fokus; die Pfeile blieben auf deaktivierten oder verdrängten Registerkarten stehen; kein Oben/Unten bei senkrechter Leiste und keine Umkehrung bei Schreibrichtung von rechts nach linksder Fokus bleibt auf der Registerkarte; die Pfeile folgen der Achse der Leiste und überspringen, was nicht antwortet; Entf schließt eine schließbare Registerkarte
tab: Text einer deaktivierten Registerkarte; Tooltip einer Registerkarte mit gekürztem Titelals Ganzes verblasst (beim Überfahren in office2007 dunkel unlesbar); der native volle Name verdeckte Ihren TooltipText in der Deaktiviert-Farbe des Themas, lesbar; Ihr Tooltip hat Vorrang
tilesbox: of_get_layoutlieferte immer "": eine gespeicherte Anordnung wurde nie wiederhergestelltdie gesamte Anordnung, derselbe Text wie ue_layout_changed; sie behält auch Größe und Sichtbarkeit jeder Kachel und die Sichtbarkeit jeder Gruppe
tilesbox: of_set_layout, das eine Kachel unter einer anderen als ihrer Gruppe nennt; ein Text, der kein JSON istdie erste Kachel mit diesem Schlüssel, in beliebiger Gruppe, wurde dorthin verschoben; 0eine Kachel wird über ihre Gruppe und ihren Schlüssel wiedergefunden: der Eintrag wird ignoriert; -5 bei einem Text, der kein JSON ist
tilesbox: of_add_group mit einem bereits vergebenen Schlüssel; of_add_tile / of_insert_tile mit einem vergebenen Schlüssel oder unter einer nie hinzugefügten Gruppe; ein leerer Schlüssel oder einer mit / oder ``0; eine erneut hinzugefügte Gruppe wurde umbenannt, eine Kachel unter einer unbekannten Gruppe legte diese unter ihrem Schlüssel an-5, nichts wird hinzugefügt: fügen Sie zuerst die Gruppe mit of_add_group hinzu
tilesbox: of_move_tile, of_remove_tile, of_add_live_item, of_clear_live_items für eine nicht vorhandene Kachel; of_remove_group für eine nicht vorhandene Gruppe0-5
tilesbox: ein Handle, das nach of_remove_tile, of_remove_group, of_clear oder dem Ziehen einer Kachel in eine andere Gruppe gehalten wirdblieb im Speicher; eine unter derselben Adresse neu erzeugte Kachel übernahm Farben und QuickInfo der alten, eine gezogene Kachel verlor siedas Handle wird freigegeben (erneut mit of_tile / of_group anfordern); Farben und QuickInfo folgen der gezogenen Kachel und gehen mit dem Entfernten
statusbar, stepbar, crosstab: ein Handle, das nach of_remove_panel, of_remove_menu_item, of_clear_menu, of_clear (statusbar), of_remove_step, of_clear_steps (stepbar), of_remove_calc_field oder of_remove_calc_measure (crosstab) gehalten wirdblieb bis zur Zerstörung der Komponente im Speicherfreigegeben: IsValid() liefert false; erneut mit of_panel, of_menu_item, of_step oder of_field anfordern
Alle Komponenten mit Elementen: il_back_color_hover / il_text_color_hover eines nie eingefärbten Elements zurücklesen0, Schwarz-1, „die Farbe des Themes“, wie die drei anderen Elementfarben
tilesbox: ib_enabled / ib_visible einer Gruppe oder ii_badge_size zurücklesenfalse, false, 0, egal was gesetzt wurdeder geltende Wert
tilesbox: deaktivierte Gruppe (ib_enabled = false)ihre Kopfzeile klappte sie noch ein (Klick, Eingabe) und löste ue_group_toggled aus; eine gezogene Kachel konnte darin landeninaktiv: kein Einklappen, kein Ereignis, kein Ablegen
tilesbox: Item-Farben (il_back_color, il_text_color, il_accent…) auf einer Gruppeohne Wirkung; die Farbe einer Gruppe a konnte eine Kachel a einer anderen Gruppe färbensie färben die Kopfzeile der Gruppe (Hintergrund, Titel, Überfahren, Akzentlinie), nie ihre Kacheln
tilesbox: of_tile("") oder eine Adresse mit einer oder drei Ebenendas Setzen einer Eigenschaft beendete die Anwendung („Array boundary exceeded“) oder schrieb auf die Gruppeein wirkungsloses Handle: es schreibt nichts und liest sich leer
tilesbox: Tastatur und Bildschirmleserder Fokus ging bei jeder Aktualisierung aus PB (ein Badge) verloren und das Größenmenü schloss sich; Größenmenü nur per Maus; in RTL Pfeile verkehrt herum; Beschriftungen mit ihren Tags vorgelesenFokus und Menü bleiben erhalten; Größenmenü per Tastatur (Pfeile, Eingabe, Esc); Pfeile in Leserichtung; reiner Text
toaster: il_max_visibleStandard 5, von JEDEM Toaster gesendet: ein Toaster, der 10 gesetzt hatte, fiel auf 5 zurück, sobald ein anderer einen Toast zeigteStandard 0 = nichts wird gesendet; die Obergrenze gilt für die ganze Anwendung, der zuletzt gesetzte Wert gilt (5, solange niemand sie setzt)
toaster: of_show eines Toasts, der auf Platz wartetlieferte 0: der Toast ließ sich nicht mit of_close schließen, und seine Events trugen eine nie erhaltene Kennung; volle Warteschlange (200): ebenfalls 0, Toast wortlos verloreneine echte Kennung, sofort; of_close nimmt ihn aus der Warteschlange; volle Warteschlange: -4
toaster: zwei Toasts ohne is_key mit einer Schaltfläche gleichen Schlüsselsder zweite ERSETZTE den ersten (der Schaltflächenschlüssel wurde für den des Toasts gehalten), und of_show lieferte die Kennung des erstenzwei Toasts, zwei Kennungen; nur is_key aktualisiert an Ort und Stelle
toaster: Events mehrerer Toasternach FENSTER abgelegt: zwei am selben Fenster verankerte Toaster nahmen sich gegenseitig die Events, und die eines zerstörten Toasters gingen an den nächstenjeder Toaster erhält die SEINER Toasts; ein zerstörter Toaster erhält nichts mehr, seine Toasts bleiben stumm sichtbar
toaster: pbm_custom02 des Fensters ipo_ownerdas Ankerfenster erhielt bei jedem Toast-Event ein pbm_custom02, auch ohne ipo_receivernur ein in ipo_receiver gesetztes Fenster erhält es; falls Sie pbm_custom02 Ihres Fensters für die Toasts belegt hatten, setzen Sie ipo_receiver oder, besser, entfernen Sie diesen Code: die Events kommen von selbst
toaster: Anzeigeein Toast blieb stehen, wenn sich sein Fenster bewegte; ein Toast über 800 px (eine lange Fehlerspur) erschien NIE; Breite nicht skaliert (180 px bei 200 %); das Aktualisieren eines überfahrenen Toasts startete den ganzen Stapel neuer folgt seinem Fenster; der Text rollt im begrenzten Toast; Breite bildschirmgerecht skaliert; der Stapel bleibt unter dem Zeiger pausiert
toolbar: Hinzufügungen, of_add_separator, of_move_item, of_remove_* bei vergebenem Schlüssel, mit / oder ``, unbekannter Leiste oder unbekannter Adresse0, ignoriert — ein Tippfehler im Namen einer Leiste erzeugte eine Phantomleiste-5; nur main braucht kein of_add_bar
toolbar: of_clear, of_remove_bar, of_remove_itemHandles blieben, Tastenkürzel blieben aktiv, und ein unter demselben Schlüssel neu erzeugtes Werkzeug bekam die Farben des alten zurückHandles freigegeben, Tastenkürzel deaktiviert, Farben und Tooltips vergessen; fordern Sie nach dem Entfernen ein Handle neu an
toolbar: of_item mit einer dreistufigen Adresse (ein Menüeintrag)wirkte auf das WERKZEUG der Leiste, das den Namen des Eintrags trugbezeichnet nichts; ein Eintrag wird über of_menu_item(Adresse) gesteuert
toolbar: Eintrag, gewählt in einem im Chevron eingeklappten Dropdownue_menu_selected ohne den übergeordneten Eintrag der Kaskade, unter einem anderen Dropdown oder leerdie vollständige Adresse, wie in der Leiste
toolbar: ii_index einer Leisteverschob eine Leiste nie nach rechtsdie Leiste nimmt den verlangten Rang ein
toolbar: of_add_bar(Schlüssel, Band, Rang) auf einem belegten Rang oder einem Band jenseits der anderenunbestimmte Reihenfolge; das Band wurde so zurückgelesen, wie es gegeben war (5 für die zweite Zeile)sie wird vor der Leiste eingefügt, die den Rang hatte; die Bänder rücken zusammen
toolbar: of_count, of_keys_at einer Leiste, Rang von of_move_itemzählten die Trenner mit, unter einem leeren Schlüsselnur die Werkzeuge: ein Trenner hat weder Schlüssel noch Rang
toolbar: Eingabetaste in einem Textfeldbestätigte das Feld UND betätigte die Standardschaltfläche des Fenstersbestätigt nur das Feld; Escape stellt den bestätigten Text wieder her
toolbar: is_shortcut zurückgelesen; ii_band / ii_index einer unbekannten Leistectrl+s (normalisiert); 1Ctrl+S, wie geschrieben; 0
toolbar: Farbe oder Tooltip an einer LEISTE (of_bar)wirkungslos, oder färbte das Werkzeug gleichen Namensauf die Leiste angewandt, und nur auf sie
toolbar: Tastenkürzel eines ausgeblendeten Werkzeugs oder eines jenseits der Demo-Grenzeverschluckte die Tastedie Taste geht an das nächste Werkzeug mit demselben Kürzel
webbrowser: eine Seite, die nicht lädt (unbekannter Host, Netzwerk, Zertifikat, of_stop)löste ue_load_completed aus, wie ein Erfolglöst stattdessen ue_load_failed(as_url, al_status) aus
webbrowser: Wörter in is_address („Rechnung 2026“)gingen als https://Rechnung 2026 hinaus, danach fand keine Navigation mehr stattmit ue_error abgelehnt, das Folgende lädt; eine Suche, wenn is_search_url gesetzt ist
webbrowser: ein Dateipfad (C:\temp\x.html) oder //host/x in is_addressmit https:// versehen, also nicht gefundenfile:///C:/temp/x.html; https://host/x; javascript: abgelehnt
webbrowser: is_address nach einem gefolgten Link oder Zurück zurückgelesendie zuletzt gesetzte Adressedie angezeigte Seite
webbrowser: of_go_back, of_go_forward, of_stop direkt nach is_addresskonnten VOR der Adresse ausgeführt werden; of_stop ließ die wartenden Seiten wieder startenlaufen in der geschriebenen Reihenfolge; of_stop verwirft auch die wartenden Seiten
webbrowser: of_save_as_png, of_save_as_jpg, of_print_to_pdf, of_printerfassten oder druckten die Adressleistedie angezeigte Website
webbrowser: Link mit target=_blank, window.open nach einem Klicknichts geschahdie Seite öffnet sich in der Ansicht, ue_new_window meldet es
webbrowser: Antwort von of_execute_javascript mit mehr als 4.095 Zeichenstillschweigend abgeschnittenvollständig
webbrowser: F5, Strg+R, Strg+Mausrad in der Adressleisteluden oder zoomten die Leiste selbstwirkungslos in der Leiste; aktiv in der Website
webbrowser: Rechtsklick in ein Eingabefeld mit ib_context_menuZurück / Vorwärts / AktualisierenAusschneiden / Kopieren / Einfügen
webbrowser: Tab oder of_focus_webview ohne Adressleiste; mit ib_allow_drop auf die Website gezogene DateiFokus in einer 0-px-Leiste verloren; Datei vom Browser geöffnetder Fokus geht an die Website, Tab verlässt sie zu Ihrem Fenster; ue_drop_files
pdfviewer: is_source zurückgelesen, und as_source von ue_load_completeddie interne Adresse /_file/?p=…das, was Sie geschrieben haben (doc\notice.pdf)
pdfviewer: fehlende Datei, kein PDF, Website nicht erreichbar oder verweigert den Rahmenue_load_completed auf einer Fehlerseite, oder gar kein Eventue_load_failed(as_source, as_reason) (Konstanten REASON_*), der Betrachter bleibt leer
pdfviewer: http://, data: eines anderen Typs als PDF, Webseite über https://angezeigt (oder ein leerer Rahmen bei http://)abgelehnt: ue_load_failed mit REASON_INSECURE oder REASON_NOT_PDF
pdfviewer: ein # in is_sourceschnitt den Pfad ab (Angebot #12.pdf nicht gefunden); das Fragment einer URL vermischte sich mit ii_page / ii_zoomein # gehört zum Dateinamen; das Fragment einer URL wird ignoriert, Seite und Zoom laufen über die Eigenschaften
pdfviewer: ii_page vor is_source gesetztverloren: das Dokument öffnete sich auf Seite 1für dieses Dokument beibehalten; ohne seit dem letzten is_source gesetzte Seite öffnet sich ein neues Dokument auf Seite 1
pdfviewer: am selben Pfad neu erzeugtes PDF, dann of_refresh; PDF ab 32 MB; Pfad mit mehr als 260 Zeichendie alte Version 5 Minuten lang; nichts; nicht gefundendie Datei so, wie sie auf der Festplatte liegt; angezeigt (in Teilen ausgeliefert); angezeigt
pdfviewer: im Dokument gefolgter Link; of_printdie Website ersetzte das Dokument, ohne Rückweg; druckte die Seite, die das Dokument umrahmtdas Dokument bleibt, ue_link_clicked(as_url) liefert Ihnen die Adresse; of_print druckt das Dokument (-4 ohne Dokument)
picture, button, tilesbox: il_badge_color0 = die Farbe des Designs; Schwarz war unerreichbar; nicht gesetzt, las sich 0-1 = nicht gesetzt (die Farbe des Designs), wie jede andere Farbe; 0 ist Schwarz. Ersetzen Sie il_badge_color = 0 durch -1
picture: id_zoom vor ib_zoomable gesetztlas sich wie gesetzt, während das Bild eingepasst bliebignoriert: id_zoom bleibt 1.0, solange ib_zoomable falsch ist; setzen Sie ib_zoomable zuerst
picture: ib_mirror auf einem um eine Vierteldrehung gedrehten Bild; is_align / is_valign mit einer Drehungsenkrecht gespiegelt auf dem Bildschirm; die Platzierung drehte sich mit dem BildSpiegelung und Platzierung gelten auf dem Bildschirm, unabhängig von der Drehung
picture: Ziehen des gezoomten Bildes; Mausrad; deaktiviertes Bild (deaktivierter statictext ebenso)ue_clicked bei jeder Verschiebung; Zoom zur Mitte, das Bild konnte den Rahmen verlassen; abgelegte Dateien wurden weiter angenommenkein Klick nach einer Verschiebung; Zoom zum Mauszeiger, das Bild deckt seinen Rahmen immer ab; deaktiviert lehnt es jedes Ablegen ab; ue_error nennt die Quelle
xml: ein Lesen (of_get_value, of_count, of_is_valid…) oder eine Änderung nach einem Bauwirkte auf das zuletzt GELADENE Dokument oder auf nichtsdas gebaute Dokument wird geladen und wird DAS Dokument; das nächste of_start_element beginnt ein neues
xml: fehlgeschlagenes of_load (leer, fehlerhaft), of_start_element nach einem Ladendas vorige Dokument blieb les- und änderbar (of_is_valid wahr); ein halb gebautes Dokument blieb in of_xmlnichts bleibt
xml: of_xml, of_pretty, of_get_values eines großen Dokumentsab einigen MB stillschweigend abgeschnittenvollständig
xml: of_get_value eines Wert-XPath (count(//line), sum(//@qty))leerder Wert als Text (3, true)
xml: ein XPath, dessen Präfix unterhalb der Wurzel deklariert ist (SOAP-Antwort)leer ohne of_register_namespaceaufgelöst
xml: is_last_error nach einem ungültigen XPath, einer Seite ohne Antwort, einer Ablehnung; Codes von of_register_namespace / of_clear_namespacesleer oder „no node matched“, gleich welche Ursache; Änderungen lieferten -4, wenn die Seite fehlte; immer 0; eine Seite ohne Antwort lieferte den Text nullder wahre Grund; -2, wenn die Seite nicht antwortet; eine leere URI wird abgelehnt (-5); leer statt null
xml: of_prettyverlor CDATA, Kommentare, Verarbeitungsanweisungen und die XML-Deklaration und veränderte gemischten Textalles bleibt erhalten; ein Element mit Text bleibt auf einer Zeile
xml: Bauen — Zeilenumbruch oder Tabulator in einem Attribut, CR in einem Text, Steuerzeichen, ungültiger Nameverändert zurückgelesen; fehlerhaftes Dokument; Name unverändert geschriebenidentisch zurückgelesen; Steuerzeichen entfernt; Name abgelehnt (is_last_error), Element weggelassen
xml: ein Dokument mit einem Element <parsererror>; Meldung eines fehlerhaften XMLals fehlerhaft abgelehnt; Meldung umrahmt von „This page contains the following errors“geladen; nur die Fehlerzeile
xml: of_remove verschachtelter Knoten, der Wurzel, eines Attributs; of_set_value("/"); of_add_child unter einem Attributdoppelt gezählt; leerte das Dokument; das Attribut blieb; 0 ohne Wirkung; „parent not found“die echte Anzahl; die Wurzel bleibt (0 und is_last_error); das Attribut wird entfernt; -4; „the node cannot have children“
xml: of_close und dann ein Lesen; ipo_owner nach dem ersten Lesen gesetztdas geladene Dokument war verloren; bis of_close ignoriertdas Dokument bleibt erhalten und wird neu geladen; beim nächsten Lesen übermittelt
Designs metro-light und metro-dark: Text auf der AkzentfarbeWeiß auf dem Blau #25a0da in beiden Designs (Bereichsköpfe, aktive Registerkarte, Anwendungsschaltfläche des Menübands, Kacheln): schwer lesbarmetro-light: die Akzentfarbe wird das tiefere Blau #1b76a1, Text weiterhin weiß; metro-dark: die Akzentfarbe bleibt #25a0da, der Text darauf wird fast schwarz (#1b1b1b)
Designs office-dark, office2003-dark, office2003-light, office2007-light: Akzent- und Kopfzeilenfarbenim dunklen Modus war die Akzentfarbe auf der Seite schwer lesbar (Schrittpunkt, Plakette), ebenso weißer Text auf dem Hover der Akzentfarbe und den Spaltenköpfen des Crosstab; im hellen Modus war der obere Teil der Verläufe der Anwendungsschaltfläche und der Bereichsköpfe zu blass für weißen Textoffice-dark: Akzent #1178d1, Hover #0f6cbd; office2003-dark: Akzent #4574cb, Hover #2f5aa8; Crosstab-Köpfe dunkler beim Hover und bei den Summen; office2003-light und office2007-light: tieferer Verlaufsanfang (#3e73cf, #4275c5), Bereichsköpfe von office2007-light deckender. Text weiterhin weiß, mindestens 4,5:1
Text auf einer von der Anwendung gewählten Farbe (il_accent, Farbe eines Elements, Bereichskopf, Plakette)Weiß bis zu einer recht hellen Farbe: ein mittleres Blau wie #25a0da erhielt weißen Text mit 2,95:1Weiß oder fast Schwarz (#1b1b1b), je nachdem, was besser lesbar ist (WCAG-Kontrastverhältnis): #25a0da erhält jetzt dunklen Text
jsontree: of_clearleerte den Baum UND setzte ib_wrap und ib_search_enabled auf ihre Standardwerte zurückleert nur den Baum; die Einstellungen bleiben (of_reset setzt alles zurück)
jsontree: is_json = ""löste ue_error „Invalid JSON“ ausleert den Baum ohne Fehler, wie die Dokumentation es versprach
jsontree: angezeigte Zahlen und Schlüssel, zurückgelesenes is_jsonvon der Engine umgeschrieben: 12345678901234567890 als 12345678901234567000 angezeigt, 1.10 → 1.1, der erste von zwei gleichen Schlüsseln verloren; is_json wurde komprimiert zurückgelesen und war nach ungültigem JSON leerso wie empfangen, beide Schlüssel eingeschlossen; is_json wird genau so zurückgelesen, wie er gesetzt wurde
jsontree: of_match_count, al_count von ue_search_resultzählten ZEILEN; zwei Vorkommen in einer Zeile waren beide „aktuell“zählen VORKOMMEN, nur eines ist aktuell und of_search_next geht von einem zum anderen
jsontree: von einer Suche geöffnete BlöckeALLE, die einen Treffer enthielten, dauerhaft: die Suche nach „e“ öffnete das ganze Dokumentnur die, die das AKTUELLE Vorkommen verbergen; of_clear_search stellt die Faltung von vor der Suche wieder her
jsontree: of_select_patheine in einem eingeklappten Block verborgene Zeile blieb unsichtbar; ein unbekannter Pfad lieferte 0die Blöcke, die sie verbergen, klappen auf; ein unbekannter Pfad liefert -5 und die Auswahl bleibt
jsontree: den Block einklappen, der die Auswahl enthältdie Auswahl wurde unsichtbar, und der nächste Pfeil begann wieder obendie Auswahl geht auf den eingeklappten Block über; bei einer Benutzergeste meldet ue_selection_changed es
xmltree: of_clearleerte den Baum UND setzte ib_wrap und ib_search_enabled auf ihre Standardwerte zurückleert nur den Baum; die Einstellungen bleiben (of_reset setzt alles zurück)
xmltree: is_xml = ""löste ue_error „Invalid XML“ aus und zeigte einen roten Fehlerleert den Baum ohne Fehler, wie die Dokumentation es versprach
xmltree: is_xml reluvom Motor neu serialisiert: Anführungszeichen geändert, Zeilenumbrüche verloren, leer nach ungültigem XMLwird genau so zurückgelesen, wie er gesetzt wurde, auch ein ungültiger Text
xmltree: ce qui s'afficheein CDATA war unsichtbar (das Element erschien leer), Kommentare, Verarbeitungsanweisungen und Deklaration fehlten, der Text gemischten Inhalts wurde vor den Kindern zusammengeklebt, ein Text um seine Leerzeichen gekürzt, ein Attributwert mit Anführungszeichen unverändert angezeigtjeder Knoten an seinem Platz, in Dokumentreihenfolge; die Zeile bleibt XML (gewähltes Anführungszeichen oder &quot;, &#10;, &amp;, &lt;); bedeutsame Leerzeichen bleiben
xmltree: of_match_count, al_count de ue_search_resultzählten ZEILEN; ein Treffer über zwei Stücke (id="4152") wurde gezählt, ohne hervorgehoben zu werdenzählen VORKOMMEN, jedes hervorgehoben, nur eines ist aktuell
xmltree: éléments ouverts par une rechercheALLE, die einen Treffer enthielten, dauerhaftnur die, die das AKTUELLE Vorkommen verbergen; of_clear_search stellt die Faltungen von vor der Suche wieder her
xmltree: of_select_patheine in einem eingeklappten Element verborgene Zeile blieb unsichtbar; ein unbekannter Pfad lieferte 0die Elemente, die sie verbergen, klappen auf; ein unbekannter Pfad liefert -5 und die Auswahl bleibt
xmltree: ue_selection_changedauch ohne Änderung ausgelöst (Ende auf der letzten Zeile); das Einklappen des Elements mit der Auswahl machte sie unsichtbar, ohne Meldungnur ausgelöst, wenn sich die Auswahl ändert; beim Einklappen springt die Auswahl auf das eingeklappte Element und das Ereignis meldet es
xmltree: ue_errorder Rohtext der Fehlerseite des Motors; ein <parsererror>-Element des Dokuments galt als Fehlernur die Fehlerzeile („error on line N at column M: …“); ein <parsererror> des Dokuments ist ein Element wie jedes andere
restclient: Cookies einer synchronen Anfragekeine behalten: jedes of_get / of_post öffnete seine eigene Sitzung; ib_keep_cookies galt nur für asynchrone Aufrufeeine Sitzung pro Objekt, gemeinsam für synchrone und asynchrone Aufrufe: eine synchrone Anmeldung hält Sie für die folgenden Aufrufe angemeldet
restclient: ib_keep_cookies nach der ersten Anfrage geändertwirkungslos bis of_closesofort wirksam; bei false werden die bisher behaltenen Cookies vergessen
restclient: Umleitung auf einen anderen Host oder Portnur Authorization, Cookie und die Basic-Authentifizierung entfielen: ein API-Schlüssel (X-Api-Key…) ging an den Drittenkeiner der mit of_set_header gesetzten Header folgt, nur Content-Type bleibt
restclient: of_set_bearer("") nach of_set_basic; of_set_basic dann of_set_bearer; of_set_basic("", "")das Basic-Passwort wurde weiter gesendet; zwei Authorization gleichzeitig; Basic Og== gesendeteine Authentifizierung zur Zeit: jede ersetzt die andere, ein leeres Token oder ein leerer Benutzer entfernt sie
restclient: HEAD oder eine 204/304-Antwort mit angekündigter Größe-4 „connection lost“, und asynchron wiederholtder Status (200, 304…)
restclient: ein Körper mit einem ungültigen Byte; charset=iso-8859-1 oder utf-16der ganze Körper als Windows-1252 neu gelesen; charset ignoriertnur das ungültige Byte wird zu einem Ersatzzeichen; das angekündigte charset wird gelesen
restclient: ein Textkörper von mehreren hundert MBdreimal im Speicher gehalten: ein 32-Bit-Prozess konnte sterben-4 „body too large : use of_download“ über 64 MB
restclient: hundert asynchrone Anfragen auf einmalhundert parallele Threadshöchstens sechs gleichzeitig, die weiteren warten
restclient: eine asynchrone Anfrage, öfter als alle 50 ms gesendet (ein Telemetrie-Timer)keine Antwort zugestellt, solange der Strom anhieltdie Antworten kommen laufend an
restclient: of_cancel einer unbekannten ID; einer Anfrage, deren Antwort da ist-1; 0 (aber es kam ue_response)-5; -4, zu spät
restclient: of_response_text() nach of_download; nach einem of_download(url, "")die Anzahl geschriebener Bytes; die vorige Antwortleer: dieser Körper liegt in der Datei; leer
restclient: eine asynchrone Antwort während ue_progress lesenSpeicher, der gerade geschrieben wird: möglicher Absturzleer, of_status(id) = 0, solange die Anfrage läuft
video: Filmwechsel (is_source, of_play(source))Abschnitt, Untertitel, Marken und Kapitel des alten Films bliebensie gehen mit ihm (vor jedem Film gesetzt, warten sie auf den ersten); ein Film der Wiedergabeliste behält seine Untertitel. Setzen Sie sie nach is_source
video: of_go_chapter, of_next_chapter, of_previous_chapterlösten ue_seeked aus; of_go_chapter über die Kapitelzahl hinaus gab 0 zurück und tat nichtsue_seeked und ue_chapter_changed, wie ein Klick auf die Leiste; -5
video: of_add_source, während ein is_source gesetzt istdie Liste startete nie, of_next ging zum ersten Filmder erste Eintrag lädt sofort (außer der gesetzte Film LÄUFT: dann folgt die Liste ihm an seinem Ende)
video: ue_started nach of_stop oder dem Filmende, dann of_playnie: einmal pro Quellebei jeder neuen Wiedergabe (nicht beim Fortsetzen einer Pause)
video: of_play auf einem fehlerhaften Film; of_reset; ii_rate beim nächsten Filmfür immer „läuft“, ohne Ereignis; der alte Film blieb geladen (of_duration, of_capture); zurück zur normalen Geschwindigkeiterneut ue_failed; der Film wird entladen; die Geschwindigkeit bleibt
video: of_capture in eine nicht beschreibbare Datei; nach „\x“ oder „C:x“-4 (die Doku sagte -5); je nach aktuellem Ordner geschrieben-4, und keine abgeschnittene Datei bleibt zurück; -5: geben Sie einen vollständigen Pfad an
video: Vollbild, dann Alt+Tab zu einer anderen Anwendungder Film blieb über allemdie andere Anwendung kommt nach vorn; die Rückkehr zu Ihrer legt den Film wieder über alles
pdfviewer: ein einfacher Klick auf einen Link im PDFnichts: nur Strg+Klick löste ue_link_clicked ausue_link_clicked(url), das Dokument bleibt angezeigt
webbrowser: eine data:-Seite (is_address = "data:text/html,…")angezeigt, aber kein ue_load_completedue_load_completed mit der angeforderten Adresse
webbrowser: ein von der Website verlangtes neues Fenster zu file:, data: oder mailto:in der Ansicht geöffnet, ue_new_window ausgelöstabgelehnt: ue_error, kein ue_new_window; nur http und https werden geöffnet
webbrowser: eine Website, die Kamera, Mikrofon, Standort, Benachrichtigungen verlangtBrowser-Rückfrage an den Benutzer, Antwort gespeichertabgelehnt, sofern ue_permission_requested nicht true zurückgibt; nichts wird gespeichert
webbrowser: Cookies, Sitzungen und Speicher der Websitesim mit den Komponenten geteilten Profilin einem eigenen Browserprofil: Eine unter 3.0 angemeldete Sitzung wird nicht übernommen (einmal neu anmelden); of_clear_browsing_data löscht sie
webbrowser: is_search_url ohne %s, ohne http(s):// oder als javascript:angenommen: jede Suche schlug fehl oder verlor den eingegebenen Textabgelehnt: ue_error, die bisherige Suchmaschine bleibt
webbrowser: gestion/ oder [::1]/x in is_address„keine Adresse“ (oder eine Suche)https://gestion/, https://[::1]/x; das Wort allein bleibt Text
webbrowser: Rechtsklick auf eine Auswahl, einen Link, ein Bild mit ib_context_menunur Zurück / Vorwärts / Neu ladenzusätzlich: Kopieren, Link öffnen, Linkadresse kopieren, Bild kopieren
tab: schließbarer Reiter deaktiviert (ib_enabled = false)das Kreuz verschwand, sein Platz blieb leerweder Kreuz noch leerer Platz: der Reiter ist so breit wie ein nicht schließbarer
video: of_chapters bei einem Titel mit `` oder Tabulatorin zwei Kapitel zerteiltunverändert gelesen
video: eine .srt in Windows-1252 oder UTF-16unlesbare Akzente; gar kein Untertitelkorrekt gelesen
commandpalette: of_open ohne WebView2-Laufzeit; toaster: of_show ohne Laufzeit-1-6, wie die Meldungsbox
crypto, xml, restclient: of_open, wenn Seite oder Client nicht erzeugt werden könnender rohe Code der DLL (-1, -3…)-2, und is_last_error sagt, warum

Falls Sie einen dieser Fehler umgangen hatten — etwa indem Sie ue_menu_selected mit leerer Adresse behandelten, um die Klicks einer zusammengeklappten Gruppe abzufangen —, entfernen Sie die Umgehung: das dokumentierte Ereignis kommt jetzt an.

11.4 Der Generator n_pbt_menu2ribbon #

In 3.0 verwendete der von n_pbt_menu2ribbon geschriebene Code Handle-Methoden, die es nicht mehr gab: er kompilierte nicht ohne Nacharbeit. In 4.0 schreibt er die aktuelle API — jedes Hinzufügen über seine Adresse, über die Komponente —, übernimmt Untermenüs in jeder Tiefe, behält ausgegraute und abgehakte Einträge bei, und sein Router deckt ue_clicked, ue_toggled und ue_menu_selected ab. Die Schlüssel ändern sich: jeder ist jetzt der ClassName des Menüeintrags (m_fichier/g1/m_ouvrir) statt des Punktpfads (m_principal.m_fichier.m_ouvrir).

Das Rezept: Ein bereits von Hand oder aus erzeugtem und dann korrigiertem Code aufgebautes Menüband muss nichts ändern. Um erneut vom Generator auszugehen, starten Sie ihn neu und fügen Sie auch den neuen Router ein: der alte las Punktschlüssel.

11.5 Was hinzugekommen ist #

Nichts davon verlangt eine Änderung Ihres Codes. Die neuen Komponenten der 4.0 werden in den Versionshinweisen vorgestellt.

ObjektHinzugefügt
ribbonof_add_menu_separator akzeptiert die Adresse eines Eintrags: der Strich kommt in die Kaskade darunter
ribbonof_add_menu_item und of_add_menu_check akzeptieren eine Kaskade beliebiger Tiefe, und jede Ebene wird über of_menu_item(adresse) gesteuert
menubarof_add_separator nimmt die Adresse eines Eintrags (file/export): die Linie kommt in seine Kaskade; of_menu(...) trägt die Farben (il_accent, il_back_color…) und den Tooltip des Titels
crosstabof_set_label_filter(as_field, as_type, as_a, as_b) für Text (LABEL_CONTAINS, LABEL_BEGINS, LABEL_ENDS) und die Konstanten LABEL_GT, LABEL_LT, LABEL_BETWEEN: die Form mit zwei double konnte nur eine Zahl übergeben
cryptoKEYFORMAT_TEXT, KEYFORMAT_HEX, KEYFORMAT_BASE64 und eine Überladung von of_hmac, of_jwt_sign und of_jwt_verify, die sie annimmt (ein Schlüssel als BYTES: kodiert geliefertes Geheimnis, AWS SigV4); eine optionale Entropie für of_protect und of_unprotect
cryptoof_hmac_verify (ein empfangener HMAC — Webhook — in konstanter Zeit verglichen); of_jwt_header und eine Überladung von of_jwt_sign, die dem Header Mitglieder hinzufügt (kid); of_totp_verify(…, ref al_step), der angenommene Schritt, um einen bereits benutzten Code abzulehnen; il_password_hash_rounds
messageboxof_get_last_error(): warum sich das letzte Dialogfeld nicht öffnen ließ (leer, wenn es sich geöffnet hat)
n_pbt_utilsof_dir_has_subfolders(as_dir, ab_include_hidden): dieselbe Frage, die auch verborgene und System-Ordner sowie Junctions zählt
n_pbt_utilsof_dw_date_order(): die Reihenfolge, in der ein DataWindow auf diesem Rechner ein Datum schreibt (dmy, mdy, ymd)
speechoutof_is_paused(): wahr, solange das Lesen pausiert ist
Rich Textdas Tag [symbol=name]: achtzehn einfarbige Symbole, die der Textfarbe folgen (Kapitel 4)
toolbarof_menu_item(Adresse) → n_pbt_toolbar_menu_item: jeder Eintrag eines Dropdown-Menüs hat seinen Zustand (ib_enabled, ib_visible, ib_checked, is_text, is_shortcut), bezeichnet durch seine vollständige Adresse
toolbaris_date an einer Datumsauswahl; of_clear_menu; of_remove_item eines Menüeintrags; of_add_menu_separator an einem Eintrag (Kaskade); Kaskaden beliebiger Tiefe
pdfviewerue_load_failed(as_source, as_reason) und die Konstanten REASON_*; ue_link_clicked(as_url); file:///-Adressen; ib_allow_save und ib_allow_print: die Befehle Speichern und Drucken der Leiste des Betrachters
pictureis_alt_text (Alternativtext für Bildschirmleser); eine Tastatur für den Zoom: +, -, 0 und die Pfeiltasten zum Verschieben; n_pbt_utils.of_json_get_str_array
webbrowseris_search_url (Suchmaschine für Wörter, die keine Adresse sind); ib_veto_new_window und ue_new_window; ib_veto_downloads und ue_download_starting; ue_load_failed; ue_error; of_show_html; of_clear_browsing_data und ib_private; ib_veto_navigation und ue_navigating; is_title und ue_title_changed; ue_permission_requested und die Konstanten PERMISSION_*; die Konstanten LOADSTATUS_* von ue_load_failed; F5, Strg+R, Alt+Pfeile und Esc in der Adressleiste
jsontreeof_selected_text liefert den DEKODIERTEN Wert des ausgewählten Blatts (eine Zeichenkette ohne Anführungszeichen und Maskierungen); of_has_selection unterscheidet die Wurzel, deren Pfad "" ist, von „nichts ausgewählt“; die Tastatur überspringt schließende Klammern (sie werden nicht mehr ausgewählt)
xmltreejedes Attribut ist ein Ziel: ein Klick gibt seinen Pfad (/order/@id), of_select_path wählt es aus, of_selected_value liefert seinen Wert; ein großes Dokument zeichnet nur die Zeilen auf dem Bildschirm (8.000 Geschwisterelemente: 12 s → 0,15 s, eine Pfeiltaste in wenigen ms)
videoue_muted_changed(ab_on): der Benutzer hat den Ton stumm- oder wieder eingeschaltet (Lautsprecher der Leiste, Taste M), wie Lautstärke und Geschwindigkeit schon ihr Ereignis hatten
ribbonof_remove_menu_item, of_clear_menu, of_remove_combo_item, of_clear_combo, of_remove_gallery_item, of_remove_app_menu_item, of_remove_contextual_group: das Entfernen unter einem Steuerelement — eine Liste „Zuletzt verwendet“ wird aktualisiert, ohne das Steuerelement neu anzulegen
ribbonof_app_menu_item(adresse): das Handle eines Eintrags des Anwendungsmenüs (is_label, is_image, ib_enabled, ib_checked, ib_visible); of_app_menu_item("") durchläuft das Menü
ribbonZugriffstasten aus mehreren Buchstaben (is_keytip = "FP"), nacheinander getippt; zugängliche Namen (Schnellzugriffsleiste, Kacheln) für Sprachausgaben
toolbarof_add_split_button: eine geteilte Schaltfläche (Aktion + Menü); is_group: sich ausschließende Umschalter (Ausrichtung); is_image auf einem Werkzeug und einem Menüeintrag; ue_item_rclicked(Adresse): der Rechtsklick auf ein Werkzeug

11.6 Namen und Zählweisen an die übrige Bibliothek angeglichen #

Sieben Stellen sprachen anders als der Rest der Bibliothek. Die 4.0 gleicht sie an, statt die Abweichung zu behalten: zwei Namen ändern sich — der Compiler zeigt Ihnen jede anzupassende Zeile —, der vom JSON-Baum gelieferte Pfad wird der von n_pbt_json, der des XML-Baums unter einem Standard-Namensraum ein funktionierender XPath, zwei Zählweisen beginnen nun bei 1, wie jede Position im Produkt, und ein Umgebungsereignis wird optional. Es sind die einzigen Änderungen der 4.0, die verlangen, Code anzufassen, der bisher kompilierte.

Was3.04.0
progressbar: Grenzen der Skalail_minimum, il_maximum, long-Werteid_minimum, id_maximum, double-Werte: eine Skala 0..1 oder eine Byteanzahl über 2 GB ist gültig; das Präfix nennt den Typ
json: Array-Index in einem Pfadab 0: lines/0 ist die erste Zeileab 1: lines/1 ist die erste Zeile; lines/0 bezeichnet nichts — ein Lesen findet es abwesend, ein Schreiben liefert -5
jsontree: Pfad eines Knotens (ue_node_clicked, ue_selection_changed, of_selected_path, of_select_path)Ebenen durch einen Punkt verbunden, Array-Index ab 0: lines.0.sku — ein Dialekt, den n_pbt_json nicht lasder Pfad von n_pbt_json: Ebenen durch / verbunden, Index ab 1 (lines/1/sku), "" für die Wurzel — unverändert an of_get_string auf demselben Text zu übergeben
xmltree: Pfad eines Elements unter einem STANDARD-Namensraum (xmlns="urn:…")/Envelope/Body — ein XPath, der nichts findet/*[local-name()='Envelope']/*[local-name()='Body'] — unverändert an n_pbt_xml.of_get_value zu übergeben; ein Element ohne Namensraum oder mit Präfix behält seinen Pfad
toolbar: band und index der Anordnung (of_get_layout, of_set_layout, ue_layout_changed)ab 0, eine als „undurchsichtig“ bezeichnete Zeichenkette, während ii_band, ii_index und ue_bar_reordered ab 1 zähltenab 1, wie ii_band, ii_index und ue_bar_reordered; ein Hin und Zurück Lesen → Wiederherstellen liefert dieselbe Zeichenkette
statictext: ue_cyclebei jeder Laufschrift-Schleife ausgelöst, ohne Abonnement — und auch von einer Animation innerhalb des Textesein Umgebungsereignis, daher optional: nur ausgelöst, wenn ib_track_cycle = true, wie ue_mouse_enter mit ib_track_mouse; nur bei jedem vollständigen Durchlauf des Textes
tilesbox: 2. Argument von ue_tile_movedas_to_keys, obwohl es EINEN Schlüssel trägt: die Zielgruppeas_to_key: der Name sagt, was es trägt, wie überall sonst (as_key = eine Ebene, as_keys = eine Adresse)
restclient: ue_failedue_failed (long al_id, string as_error)ue_failed (long al_id, long al_code, string as_error): -4 Fehlschlag, -5 URL oder Datei — kein Auswerten des Textes mehr
restclient: of_json_valueein Schlüssel, erstes Vorkommen in beliebiger Tiefe; nur ein Textwert — eine Zahl lieferte den Namen des nächsten Schlüsselsein n_pbt_json-Pfad ("json/customer", "items/1/qty"), jeder Wert: "4152", "true". Ein verschachtelter Schlüssel wird mit seinen Eltern benannt

Das Rezept: (1) neu kompilieren — der Compiler meldet il_minimum, il_maximum und as_to_keys: benennen Sie sie in id_minimum, id_maximum und as_to_key um; (2) suchen Sie json-Pfade, die ein Array ansprechen, und addieren Sie 1 zu jedem Index — eine Schleife for i = 0 to n - 1 über "lines/" + String(i) wird zu for i = 1 to n; (3) eine von der 3.0 gespeicherte Toolbar-Anordnung zählt ab 0: addieren Sie 1 zu band und index jeder Leiste, bevor Sie sie an of_set_layout übergeben, oder lassen Sie den Benutzer einmal neu anordnen — unverändert eingelesen würde sie ihre ersten beiden Bänder zusammenlegen; (4) wo ue_cycle geskriptet ist, setzen Sie beim Aufbau ib_track_cycle = true; (5) wo Sie einen Pfad aus dem JSON-Baum lasen (ue_node_clicked, of_selected_path) oder einen übergaben (of_select_path), ersetzen Sie die Punkte durch / und addieren Sie 1 zu jedem Array-Index — aus lines.0.sku wird lines/1/sku, das unverändert an n_pbt_json.of_get_string geht.


11.7 Die Designs folgen der Anwendung #

Die Überprüfung der Designs lässt jede Komponente die Regel einhalten, die Kapitel 4 bereits ankündigte: die Anwendung bestimmt Design und Akzent, eine Komponente weicht nur so weit ab, wie man es von ihr verlangt. Keine Methode wird umbenannt; die Änderungen zeigen sich am Bildschirm, beim Zurücklesen der Eigenschaften und in zwei Rückgabewerten.

Was3.04.0
PBT_SetDefaultThemeein Designwechsel löschte den mit PBT_SetDefaultThemeAccent gesetzten Akzent — selbst beim erneuten Setzen desselben Designs — und machte den Verlaufshintergrund von office2007 und office2003 flachder Akzent der Anwendung bleibt von einem Design zum nächsten erhalten; jedes Design behält seinen Hintergrund
PBT_GetDefaultThemeAccentden Akzent des Designs, wenn die Anwendung keinen gesetzt hatte-1, solange die Anwendung keinen Akzent gesetzt hat
native RückgabewertePBT_SetDefaultTheme mit einem unbekannten Namen lieferte 0 und ließ die folgenden Komponenten ohne Design; PBT_SetDefaultThemeAccent mit einer PowerBuilder-Systemfarbe malte sie schwarz-5 in beiden Fällen; das vorherige Design bzw. der vorherige Akzent bleibt
eine allein gesetzte Designachsefror die andere Achse auf dem Design der Anwendung zu diesem Zeitpunkt eindie leere Achse folgt dem Design der Anwendung bei jeder seiner Änderungen; beide Achsen leer = vollständig das Design der Anwendung
is_theme_style · is_theme_mode · il_theme_accentwurden als "", "" und -1 gelesen, egal was gesetzt warder angezeigte Stil und Modus sowie der eigene Akzent der Komponente (-1, wenn sie keinen hat)
ein unbekannter ("office2010") oder falsch geschriebener Achsenwert (" Metro ")die Komponente verlor ihr Design und hörte bis zum of_reset() nicht mehr auf das der AnwendungLeerzeichen und Groß-/Kleinschreibung werden ignoriert; ein unbekannter Wert wird ignoriert und die Achse behält ihren Wert
Akzent einer Komponente mit lokalem Designsie behielt den Akzent ihres Designs, selbst wenn die Anwendung einen setztesie folgt dem Akzent der Anwendung, solange sie keinen eigenen hat
ein eigener Akzentnur der Akzent änderte sich: Hover und Gedrückt der Akzent-Schaltflächen, getönte Auswahlen, angehakte Menüband-Schaltflächen behielten den Akzent des Designsalles vom Akzent Abgeleitete folgt ihm
tilesbox : il_badge_color0 und -1 = die Farbe des Designs; ohne gesetzte Farbe als 0 gelesen; Schwarz war unerreichbar-1 = die Farbe des Designs (als -1 gelesen); 0 ist Schwarz, wie bei allen Farben
eine PowerBuilder-Systemfarbe (ButtonFace…) in il_theme_accentschwarz gemaltals -1 gezählt: der Akzent der Anwendung
webbrowser · pdfviewerfremde Inhalte folgten dem Hell/Dunkel-Modus von Windows, und vor ihrer ersten Anzeige erschien ein weißes Rechtecksie folgen dem Standarddesign der Anwendung, auf dem Hintergrund des Designs (4.11)
Akzent von office-dark und office2003-darkein dunkles Blau, mit 3:1 lesbar, wenn es Text färbte (Links, [accent])ein helleres Blau (#479ef5, #7ea1e8), mit dunklem Text darauf
datagrid: Linien zwischen den Zeilenin acht von zehn Themes nicht vorhandenin allen zehn Themes vorhanden, in der Rasterfarbe des Themes
hoher Kontrast von Windowseinfarbige Symbole und als Schatten gezeichnete Ringe verschwandenunterstützt (4.10)

Das Rezept: (1) wenn Sie den Akzent nach jedem PBT_SetDefaultTheme neu setzten, ist das nicht mehr nötig — und wenn Sie sich darauf verließen, dass ein Designwechsel den Akzent löscht, rufen Sie PBT_SetDefaultThemeAccent(-1) auf; (2) prüfen Sie den Rückgabewert von PBT_SetDefaultTheme, wenn der Name aus einer Eingabe oder einer Datei stammt; (3) wo Sie beide Achsen auf jeder Komponente setzten, um der Anwendung zu folgen, lassen Sie sie leer; (4) eine Kachel, deren Plakette mit il_badge_color = 0 „zum Design“ zurückkehrte, schreibt sich jetzt -1.


11.8 crypto: was die Sicherheit jetzt ablehnt, und wohin relative Pfade gehen #

Die Sicherheitsüberprüfung von crypto schließt eine echte Tür — ein mit dem ÖFFENTLICHEN Schlüssel gefälschtes JWT ging durch, wenn der Algorithmus fehlte — und ersetzt mehrere stille Fälle durch eine Ablehnung, die ihren Grund nennt. Keine Methode wird entfernt; eine ECDSA-Signatur ändert ihre Form, und die relativen Dateipfade folgen einer einzigen Regel.

Was3.04.0
of_jwt_verify, of_jwt_signein LEERER Algorithmus galt als JWT_HS256, und ein PEM-Schlüssel wurde als HS256-Geheimnis angenommen: mit dem ÖFFENTLICHEN Schlüssel als Geheimnis geprüft, ging ein gefälschtes Token durch; der Algorithmus des Headers wurde ohne Groß-/Kleinschreibung verglichen, ein crit-Header ignoriertder Algorithmus ist PFLICHT und wird GENAU verglichen; ein PEM-Schlüssel ist nie ein HMAC-Geheimnis (auch bei of_hmac); crit wird abgelehnt — leere Zeichenkette und is_last_error
of_jwt_signein in den Claims angegebenes exp wurde stillschweigend durch die Dauer al_expires_seconds ersetztbeides zugleich wird abgelehnt: eines von beiden behalten
of_encrypt, of_decryptein LEERES Passwort verschlüsselte — jeder konnte den Wert zurücklesenabgelehnt, wie of_encrypt_file es schon tat; of_password_hash("") bleibt erlaubt
il_pbkdf2_roundsein Wert außerhalb von 1.000 bis 10.000.000 fiel stillschweigend auf 100.000 zurückder Aufruf wird ABGELEHNT: leere Zeichenkette bei einem Text, -5 bei einer Datei, und is_last_error nennt die Grenzen
of_password_hashil_pbkdf2_rounds (100.000 Runden)il_password_hash_rounds, standardmäßig 600.000 (die OWASP-Zahl); bereits gespeicherte Werte tragen ihre Runden und lassen sich weiter prüfen
of_base64_decode, of_base64url_decode, of_hex_decode, of_decrypt…Bytes, die kein Text sind (ein PDF, ein Bild), kamen als Ersatzzeichen zurück, ohne Fehlerleere Zeichenkette und is_last_error, das auf of_base64_decode_to_file oder of_decrypt_file verweist
of_sign (EC-Schlüssel)eine IEEE-P1363-Signatur (64 Bytes), die openssl dgst und Java ablehneneine DER-Signatur; of_verify liest beide Formen, eine bereits gespeicherte Signatur lässt sich weiter prüfen; das ES256-JWT bleibt in P1363
of_totp_code, of_totp_verifyein Nicht-Base32-Zeichen im Geheimnis (eine 0 statt eines O) wurde stillschweigend entfernt: ein ANDERES Geheimnis, Codes, die nie passtenabgelehnt (Leerzeichen und = toleriert)
of_encrypt_file„unabhängig von ihrer Größe“bis 64 GB, die Grenze eines AES-GCM-Containers: darüber -7
relative Pfade: n_pbt_crypto, u_pbt_zip, of_capture des Videoplayersim AKTUELLEN Ordner gelesen (der sich nach einem DirList oder einem Dateidialog verschiebt), neben die EXE geschrieben (in der IDE: der PowerBuilder-Ordner)GELESEN im aktuellen Ordner, dann im Ordner, in dem die Anwendung gestartet ist, dann neben der EXE; GESCHRIEBEN in den Ordner, in dem die Anwendung gestartet ist — in der IDE wie kompiliert derselbe

Das Rezept: (1) übergeben Sie den Algorithmus eines JWT IMMER als Konstante (n_pbt_crypto.JWT_RS256), nie aus dem Token oder einer INI gelesen, der er fehlen kann; (2) wenn ein Server Ihre EC-Signaturen in P1363 prüfte (.NET VerifyData standardmäßig), wandeln Sie sie um oder prüfen Sie sie in DER (DSASignatureFormat.Rfc3279DerSequence); (3) ein außerhalb der Grenzen gesetztes il_pbkdf2_rounds muss zwischen 1.000 und 10.000.000 zurückkehren; (4) eine Datei, die ein relativer Pfad neben die EXE schrieb, liegt jetzt im Startordner der Anwendung — geben Sie einen vollständigen Pfad an, wenn Sie einen anderen wollen.


11.9 restclient: Header, die ihre Ablehnung sagen, Umleitungen, die die Anfrage behalten #

Die Überprüfung von restclient ersetzt zwei stille Verluste — eine hinter einer Umleitung nie ausgeführte Änderung, eine hinter einem fehlerhaften Header nie gesendete Authentifizierung — durch das richtige Verhalten oder eine Ablehnung, die ihren Grund nennt. Keine Methode wird entfernt; drei werden zu Funktionen, zwei Eigenschaften kommen hinzu, und die Windows-Authentifizierung geht nur noch ab, wenn Sie sie verlangen. Ein Punkt gilt für die fünf nichtvisuellen Komponenten, die Ereignisse auslösen: ein Fehler in Ihrem Ereigniscode wird jetzt sichtbar.

Was3.04.0
of_set_header, of_set_bearer, of_set_basicSubroutinen: nichts wurde geliefert, ein fehlerhafter Wert wurde unverändert behaltenlong-Funktionen: 0, oder -5 und nichts ändert sich — leerer Name, Name mit Leerzeichen, Doppelpunkt oder Steuerzeichen, Wert mit Zeilenumbruch; ein leerer Wert entfernt den Header
eine Anfrage mit einem fehlerhaften Headerging OHNE JEDEN Header ab — Authorization eingeschlossen —, ohne Fehler-5, und is_last_error = „invalid header: <Name>“; nichts geht ab
Umleitung 301 / 302 eines PUT, PATCH oder DELETEging als GET ohne Körper weiter: die Änderung wurde nie ausgeführt, und der Aufruf lieferte 200Methode und Körper bleiben; nur ein POST wird zum GET; ein 303 geht als GET ohne Körper weiter (außer HEAD)
eine wiederverwendete Verbindung (die einer Umleitung), die der Server im selben Moment schließt-4 und „request failed: 12152“, ab und zudie Anfrage wird EINMAL erneut gesendet, Körper inbegriffen, über eine neue Verbindung: der Server hatte darauf nichts geantwortet
of_response_text ( ), of_response_headers ( ), of_response_header, of_json_valuedie letzte synchrone Antwort des PROZESSES: ein zweiter n_pbt_restclient überschrieb siedie des OBJEKTS; of_close vergisst sie
als Text gelesener Körper, 32-Bit-Anwendungauf 64 MB begrenztauf 16 MB begrenzt (64 MB in 64 Bit): darüber -4 „body too large“ — lesen Sie ihn mit of_download
of_get_async, of_request_async… bei ungültiger URL oder ungültigem Headereine Anfrage-ID, dann ein ue_failedsofort -5, kein Ereignis folgt; is_last_error sagt warum („invalid URL: …“)
Windows-Authentifizierung (Negotiate / NTLM)das System beantwortete die Anforderung eines Intranet-Servers von selbst mit den Anmeldedaten der Sitzungstandardmäßig aus: die Anmeldedaten gehen ohne ib_windows_auth = true (neue Eigenschaft) an keinen Server; is_client_certificate (neu) setzt ein Client-Zertifikat
of_cancel (long al_id), of_status (long al_id), of_response_text (long al_id)…die ID einer Anfrage eines ANDEREN Objekts erreichte diese Anfragenur die Anfragen des Objekts: of_cancel liefert -5 und bricht nichts ab, die Leser liefern 0 / ""
of_status (long al_id) in ue_failedkonnte 200 liefern: den Status einer empfangenen, dann verlorenen Antwort0 für jede fehlgeschlagene Anfrage
ue_failed-4 Fehlschlag, -5 URL oder Datei-4 Fehlschlag, -5 Datei oder Client-Zertifikat, -6 Bereichsanfrage in der Demo abgelehnt
Laufzeitfehler in einem Ereignis der Anwendung — restclient, speechout, soundplayer, toaster, commandpalettewortlos verschluckt, und die folgenden Ereignisse wurden nicht mehr gelieferterreicht das Ereignis SystemError der Anwendung wie jeder Skriptfehler; die folgenden Ereignisse werden geliefert
il_max_retrieswiederholte auch einen Fehlschlag, der sich genauso wiederholt (zu viele Umleitungen, ungültige oder HTTPS → HTTP-Umleitung, TLS, nicht schreibbare Datei)diese Fehlschläge werden nicht mehr wiederholt; 429, 503 und ein Netzausfall weiterhin
URLs und Pfadedas Fragment #… ging an den Server; eine relative Location ?page=2 verlor das letzte Segment; ein relativer Pfad von of_download folgte dem gerade aktuellen Ordnerdas Fragment wird nicht mehr gesendet; Location wie von einem Browser aufgelöst (RFC 3986); ein relativer Pfad wird beim Aufruf im aktuellen Ordner der Anwendung beim Laden der Bibliothek aufgelöst

Das Rezept: (1) prüfen Sie die Rückgabe von of_set_header, of_set_bearer und of_set_basic, wenn der Wert aus einer Eingabe, einer INI oder einer Datenbank stammt — ein Aufruf, der die Rückgabe ignoriert, kompiliert weiterhin, aber das -5 ist jetzt die einzige Spur eines abgelehnten Headers; (2) eine Intranet-API mit Windows-Authentifizierung, die 200 lieferte, liefert jetzt 401: setzen Sie ib_windows_auth = true auf DIESEM Client; (3) eine 32-Bit-Anwendung, die einen Körper über 16 MB als Text liest, wechselt zu of_download; (4) wenn Sie eine Anfrage-ID zwischen zwei Objekten teilten, lesen Sie die Antwort auf dem Objekt, das sie gesendet hat; (5) ein Fehler, der jetzt aus ue_response oder ue_failed in SystemError erscheint, bestand schon: er wurde verschluckt.

11.10 speechout: Live-Einstellungen, eine stille Zerstörung #

Die Überprüfung von speechout hält zwei Versprechen, die die Dokumentation gab und der Code nicht — eine während des Lesens geänderte Einstellung gilt für den nächsten Satz, of_speak_from jenseits des Textes liefert -5 — und entfernt ein Ereignis, das zum falschen Zeitpunkt ausgelöst wurde. Keine Methode wird entfernt. Neu: of_add_abbreviation, of_clear_abbreviations, das Ereignis ue_mark und zwei Tags, [mark=name] und [rate=150]…[/rate].

Was3.04.0
of_speak_from (al_index)jenseits des Textes wurde das laufende Lesen ABGEBROCHEN, nichts begann, und die Rückgabe war 0-5, und das laufende Lesen geht weiter
ii_rate, ii_pitch, ii_volume, is_lang, is_voicewährend des Lesens geändert, erst beim NÄCHSTEN Lesen übernommen (die Dokumentation versprach den nächsten Satz)Live-Eigenschaften: der nächste Satz übernimmt sie
ue_voice_fallbackstumm, wenn nur die REGION fehlte (fr-CA verlangt, fr-FR-Stimme)ausgelöst; Sprach-Tags werden ohne Groß-/Kleinschreibung verglichen, und fr_FR gilt als fr-FR
destroy (n_pbt_speechout)löste während eines Lesens ue_stopped aus — auf einem schon halb zerstörten Fensterkein Ereignis; of_close() löst weiterhin ue_stopped aus
of_sentence_count, of_countdie Zahl des beim VORIGEN Mal gelesenen Textes (0 vor jedem Lesen)die Zahl von is_text, so wie es ist
of_pause, of_resume, of_clear_queueerzeugten die Stimme, wenn sie nicht existierte; eine Pause während des Wartens auf die Stimmen ging verloren0 ohne etwas zu erzeugen, -4, wenn die Seite nicht antwortete; die Pause hält bis of_resume
ue_sentence (al_index)eine Abkürzung (Mr., Dr., e.g.), eine buchstabierte Adresse oder eine Version teilten den Satz; ein Text ohne Punkt war ein einziger Satzsie teilen nicht mehr; ein Satz mit mehr als 250 Zeichen wird geteilt: die Satznummern können sich ändern
[pause=ms]am TEXTENDE ignorierteine Stille nach dem letzten Satz, vor ue_stopped

Das Rezept: (1) prüfen Sie das -5 von of_speak_from, wenn der Index aus einem Klick kommt; (2) wenn Ihr ue_stopped beim Schließen des Fensters etwas tat, rufen Sie of_close() selbst in dessen close auf — die Zerstörung löst es nicht mehr aus; (3) behalten Sie keine Satznummern von einer Version zur nächsten: nehmen Sie sie aus ue_sentence, wie die Dokumentation es immer sagte.

Die Überprüfung von statictext hat vor allem den gemeinsamen Auszeichnungstext (4.7) korrigiert: diese Zeilen gelten für die Beschriftung jeder Komponente — Registerkartentitel, Statusleistenfeld, Toast, Dialog. Keine Methode wird entfernt. Neu: of_refresh_parent_color(), und die Bereiche [action], [hyperlink] sowie die Kopfzeilen von [foldarea] eines statictext sind per Tastatur erreichbar (Tab, dann Eingabe oder Leertaste).

Was3.04.0
of_escape_markup (une donnée collée à une balise)ein maskiertes ] direkt nach einem Tag bildete ein Paar mit dem ] des Tags: "[b]" + of_escape_markup("] Ende") + "[/b]" zeigte [b]] Ende ohne Fettdruckdie Daten werden wie geschrieben angezeigt, und die Formatierung darum herum bleibt
[/b], [/i]…ein schließendes Tag schloss das LETZTE geöffnete Tag, welches auch immer: [b]A[i]B[/b]C ließ C fett; [/br] schloss ebenfalls etwasein schließendes Tag schließt nur sein eigenes Tag (die darin geöffneten Stile laufen weiter); ein schließendes Tag ohne öffnendes oder das eines selbstschließenden Tags wird ignoriert
[picture=…]am ersten Komma abgeschnitten: eine Data-URI (was of_icon() liefert) oder ein Dateiname mit Komma wurde nicht angezeigtdie Abmessungen werden am Ende des Werts gelesen: beide werden angezeigt
[picture=\\server\share\x.png]das Bild wurde von der Netzwerkfreigabe gelesenabgelehnt: ein Bild der Auszeichnung greift nie auf eine Netzwerkfreigabe zu. Nutzen Sie of_icon(), das es einbettet, oder ein picture
[hyperlink=HTTPS://…]ein Schema in Großbuchstaben wurde nicht geöffnetgeöffnet: das Schema wird ohne Rücksicht auf Groß-/Kleinschreibung gelesen; die Liste bleibt http, https, mailto
ii_padding0 = der Abstand des Designs: eine Beschriftung konnte nie bündig mit dem Rand eines benachbarten Feldes stehen-1 = der Abstand des Designs (neuer Standard), 0 = kein Abstand
ue_clicked, ue_double_clickedausgelöst beim Zuklappen eines [foldarea] (drei Ereignisse bei einem Doppelklick) und beim Loslassen der Maus nach einer Textauswahlnicht mehr ausgelöst: Zuklappen ist eine Sache des Lesens
[foldarea:… [action=…]]löste ue_action aus UND klappte den Block zunur ue_action, der Block bleibt, wie er ist
ii_line_spacing, is_marquee_directionein Wert außerhalb von 50-400 wurde ignoriert und als 0 zurückgelesen; eine unbekannte Richtung ("UP") lief zum Anfang, wurde aber wie geschrieben zurückgelesenauf die nächste Grenze gesetzt und so zurückgelesen, wie angewendet; eine unbekannte Richtung gilt als MARQUEE_START und wird so zurückgelesen
of_scroll_to_endlieferte nichtsliefert 0, oder -2 wenn die Komponente nicht erzeugt ist

Das Rezept: (1) ein ii_padding = 0, geschrieben für „den Abstand des Designs“, wird zu -1 — oder entfällt; (2) ein Auszeichnungsbild auf einer Netzwerkfreigabe läuft über of_icon(); (3) ein ue_clicked, das auf das Zuklappen eines Abschnitts reagierte, wird nicht mehr aufgerufen: das Zuklappen wird nicht geskriptet.

11.12 breadcrumb: was nachgibt, wenn der Pfad nicht passt, und das Verlassen des Felds #

Die zweite Überprüfung des Brotkrumenpfads (breadcrumb) hat das Einklappen nach Breite, den Modus OVERFLOW_SHRINK und das, was ein Segment mitnimmt, korrigiert. Keine Methode wird entfernt. Eine Zeile gilt für alle nativen Menüs der Bibliothek: die Suche durch Tippen.

Was3.04.0
of_edit() sans / without ib_editableliefert 0, nichts öffnet sichliefert -4
das Pfadfeld für ein anderes Steuerelement der Anwendung verlassendas Feld blieb offen, der Text halb eingegeben, und nichts wurde gemeldetein geänderter Text wird bestätigt: ue_path_entered; der Wechsel in eine andere Anwendung behält die Eingabe weiterhin
OVERFLOW_SHRINKjede Beschriftung auf 12 Zeichen begrenzt, auch mit genug Platz; der aktuelle Ort am Rand der Leiste glatt abgeschnittennichts wird gekürzt, solange Platz ist; die Mitte gibt zuerst nach, bis auf einen Buchstaben und …, das erste Segment und der aktuelle Ort zuletzt
OVERFLOW_COLLAPSEdie Beschriftung des aktuellen Orts konnte gekürzt werden, bevor die Mitte eingeklappt warzuerst klappt die Mitte ein; der aktuelle Ort wird nur als letztes Mittel gekürzt
of_insert_item(…, ai_index)die Handles der verschobenen Segmente bezeichneten ein anderes Segment, ihre Farben und Tooltips blieben an der alten Adresseihre Handles werden freigegeben, ihre Farben und Tooltips folgen ihnen; ein entferntes Segment (of_clear, of_truncate, of_remove_item) nimmt seine mit
of_item("b").il_back_color / of_item("a/b").il_back_colorzwei Werte für dasselbe Segmenteiner: der eindeutige Schlüssel und die Adresse bezeichnen dasselbe Segment
OVERFLOW_SCROLL, Mausradohne Wirkungverschiebt den Streifen
native Menüs (Pfadzweige, Menüband, Menüleiste, Symbolleiste, Kontextmenü): ein getippter Buchstabebewirkte nichts, außer bei Zugriffstastendie innerhalb einer Sekunde getippten Buchstaben springen zum ersten Eintrag, der so beginnt („Win“), wie im Explorer; ein Menü mit mehr als 500 Einträgen zeichnet nur das Sichtbare

Das Rezept: (1) ein of_edit(), dessen 0 Sie ohne gesetztes ib_editable geprüft haben, liefert jetzt -4; (2) ein ue_path_entered kann eintreffen, wenn der Benutzer anderswo im Fenster klickt — es ist derselbe Text wie mit Eingabe; (3) holen Sie nach einem of_insert_item in der Mitte des Pfads die Handles der folgenden Segmente neu.

11.13 buttonbar und Fenstertastatur: die Taste geht an die Komponente des Fokus #

Die zweite Überprüfung der Schaltflächenleiste (buttonbar) betraf die Fenstertastatur, die alle Komponenten teilen, die auf Enter, Esc, einen Alt+Buchstaben oder ein registriertes Kürzel antworten (button, buttonbar und die Kürzel von of_register_shortcut aller Komponenten). Keine Methode wird entfernt; eine kommt hinzu, of_focus_button.

Was3.04.0
zwei Komponenten desselben Fensters antworten auf Enter, Esc oder dasselbe Kürzel (zwei MDI-Blätter, zwei Bereiche)die zuerst erzeugte erhielt sie, selbst im anderen Blattdie dem Fokus nächste (dasselbe Blatt, derselbe Bereich); bei Gleichstand keine: die Taste bleibt beim Fenster
Enter auf einem fokussierten PB-CommandButton oder in einer geöffneten DropDownListBox; Esc in einer geöffneten Listelöste die Standard-/Abbrechen-Schaltfläche der Komponente ausbleibt beim Steuerelement, wie in einem Windows-Dialog
of_register_shortcut(chord, key) auf einer Schaltfläche der Leiste, dann die Schaltfläche deaktiviert und reaktiviert oder ihr Buchstabe is_shortcut geändertdas Kürzel wurde gelöschtbleibt: der Alt+Buchstabe und das Kürzel der Anwendung berühren sich nicht mehr
der Alt+Buchstabe einer Schaltfläche gegenüber einem ausdrücklichen Kürzel derselben Tastedas zuerst registrierte gewanndas ausdrückliche Kürzel gewinnt; die Buchstaben werden erst danach befragt
of_clear_shortcuts()löschte auch das is_shortcut eines buttonlöscht nur die Kürzel der Anwendung
buttonbar: of_register_shortcut(chord) ohne Schlüssel oder mit einem Schlüssel, der keine Schaltfläche nenntlieferte 0 und schluckte die Taste, ohne etwas auszulösenliefert -5
buttonbar: die Schaltfläche von is_default / is_cancel entfernen oder die Leiste leerendie Eigenschaft behielt den Schlüssel; eine unter diesem Schlüssel wieder hinzugefügte Schaltfläche wurde wieder Standardgeleert: die Rolle geht mit ihrer Schaltfläche
buttonbar: eine andere Schaltfläche der Leiste hat den Fokusder Akzent blieb auf is_default, während Enter die fokussierte Schaltfläche auslöstedie fokussierte Schaltfläche trägt das Standard-Aussehen; is_default liest sich unverändert
buttonbar: ein negatives ii_padding_xwurde zu 12der Abstand des Designs, wie ii_padding_y und ii_gap
buttonbar: die Trennlinie zwischen Schaltflächenmitten in den Abstand gezeichnet, selbst wenn sich die Schaltflächen nicht berührtennur zwischen zusammengefügten Schaltflächen (ii_gap = 0) und auf der richtigen Seite bei Rechts-nach-links

Das Rezept: (1) geben Sie auf einer Leiste EINER Schaltfläche ein Kürzel — of_register_shortcut("Ctrl+S", "save") — die Form ohne Schlüssel liefert -5; (2) setzen Sie is_default neu, nachdem Sie die Standardschaltfläche entfernt und wieder hinzugefügt haben; (3) um den Fokus auf eine bestimmte Schaltfläche zu setzen („Nein“ statt „Ja“), rufen Sie of_focus_button("no") auf.

11.14 button: eine ausgegraute Schaltfläche gibt ab, und Alt+Buchstabe antwortet #

Die Überprüfung der Schaltfläche (button, zugunsten von buttonbar veraltet, aber weiterhin ausgeliefert und korrigiert) ändert, was sie auf der Tastatur tut und was ihre Eigenschaften zurücklesen. Keine Methode wird entfernt oder hinzugefügt.

Was3.04.0
eine ausgegraute Schaltfläche mit ib_default, ib_cancel oder is_shortcut (ib_enabled = false)hielt Enter, Esc oder sein Kürzel für das ganze Fenster fest: die Taste ging verlorengibt die Taste an das Fenster zurück (ein Standard-CommandButton von PB, ein SingleLineEdit erhalten sie); wieder aktiviert, nimmt sie sie zurück
das & von is_text (&Speichern)unterstrich den Buchstaben, nicht mehrAlt + der Buchstabe löst die Schaltfläche aus, wo auch immer der Fokus im Fenster liegt, nach den expliziten Kürzeln, nie ausgegraut; eine PB-Menüleiste mit demselben Buchstaben verliert ihn
Enter oder Leertaste auf der fokussierten Schaltfläche gehalteneine Salve von ue_clicked; die Leertaste löste beim Drücken ausein einziges ue_clicked; die Leertaste löst beim Loslassen aus, wie unter Windows
ein is_shortcut, das das Fenster nicht auslösen kann ("Win+S", "Ctrl+Entrée", "Ctrl+Pause")wurde unverändert zurückgelesen; "Win+S" löste die Schaltfläche bei einem einfachen S ausabgelehnt: es liest sich "". Tastennamen werden auf Englisch geschrieben (Enter, Esc, Del)
is_shortcut mit einem Tooltipdas Kürzel erschien nirgendsdem Tooltip hinzugefügt (dem Titel eines erweiterten): „Speichern (Ctrl+S)“
of_register_shortcut("F5") auf der Schaltfläche, dann ib_default, ib_cancel oder is_shortcut geändertF5 wurde gelöschtF5 und is_shortcut antworten beide
is_text, is_image, is_style, ii_badge, il_badge_color, ii_badge_size, ii_image_size nach of_reset() gelesenden alten Wert, obwohl der Bildschirm zurückgesetzt warihren Standardwert ("", "standard", 0, -1)
eine ausgegraute Schaltfläche und die Tab-Tasteerhielt den Fokuswird übersprungen
eine Beschriftung aus nur einem Bild ([picture=…]) oder ein & in einem Tagdie Beschriftung verschwand oder das Tag war defektwie geschrieben angezeigt

Das Rezept: Schreiben Sie die Tastennamen von is_shortcut auf Englisch ("Ctrl+Enter") und lesen Sie die Eigenschaft im Zweifel zurück: "" bedeutet abgelehnt. Wenn Sie eine Standardschaltfläche ausgegraut haben, um „Enter zu deaktivieren“, ist nichts zu ändern: genau das geschieht jetzt.

11.15 menubar: eine Menüleiste, die den Fokus zurückgibt, und Alt+Buchstabe von überall #

Die Überprüfung der Menüleiste (menubar) ändert, was sie mit dem Fokus und der Tastatur macht, und was alle nativen Menüs bei Schreibrichtung von rechts nach links tun. Keine Methode wird entfernt oder ändert ihre Signatur.

Was3.04.0
ein Klick in die Leiste, dann eine Auswahl (Bearbeiten > Einfügen)die Leiste behielt den Fokus: GetFocus() in ue_item_selected nannte das Feld nicht mehr, das Einfügen ging ins Leereder Fokus kehrt bevor ue_item_selected ausgelöst wird zum vorherigen Steuerelement zurück; ebenso bei Esc und bei einem Klick daneben
Alt+F gehalten, oder F10, mit dem Fokus in einem Feldnichts: nur Alt getippt und dann F öffnete FileAlt+F öffnet File von jedem Steuerelement aus, F10 wirkt wie Alt; ein von Ihrer Anwendung registriertes Alt+F behält den Vorrang, und ein natives PowerBuilder-Menü mit demselben Buchstaben verliert ihn
Ctrl++, Ctrl+-, Ctrl+,, Alt+Left, Ctrl+Space, Ctrl+Tab, Ctrl+Backspace (alle Komponenten mit Kürzeln)angezeigt, aber nichts wurde von einem PB-Steuerelement aus ausgelöst; der button lehnte sie ab ("")ausgelöst, wo auch immer der Fokus liegt; diese Tasten brauchen Ctrl oder Alt (allein bleiben sie Navigation)
in RTL die Dropdowns aller nativen Menüs (Menüleiste, Menüband, Symbolleiste, Brotkrumen, Kontextmenü…)links ausgerichtet, Kaskaden rechts, Winkel ›, Links schlossdas Dropdown hängt rechtsbündig unter seinem Titel, eine Kaskade öffnet sich nach links (Winkel ‹): Links öffnet, Rechts schließt
ein Klick auf den Titel eines bereits offenen Menüsschloss es und öffnete es wieder (ein zweites ue_menu_opening)schließt es, wie unter Windows
ein is_shortcut auf einem Eintrag, der eine Kaskade öffnetangezeigt, und löste ue_item_selected("file/export") aus, eine Adresse, die kein Klick erzeugtweder angezeigt noch ausgelöst: ein Kürzel gehört auf ein Blatt
eine Leiste, deren Menüs alle ausgeblendet oder ausgegraut sind, neben einem Menübandnahm Alt für nichts: die KeyTips des Menübands erschienen nicht mehrgibt Alt an das Menüband zurück, solange kein Titel erreichbar ist
zwei Titel mit demselben Buchstaben (&Datei, &Favoriten)Alt+F öffnete immer den erstenin der Leiste wandert der Balken von einem zum anderen, Eingabe öffnet
ein entfernter und an derselben Adresse wieder hinzugefügter Eintrag (eine Liste zuletzt verwendeter Dateien)übernahm die Farben und den Tooltip des entferntenentsteht ohne Farbe (il_back_color liest -1 zurück); ebenso nach of_remove_menu und of_clear
ein Buchstabe mit Akzent oder aus einer nicht lateinischen Schrift in einem Dropdown (&Überblick)unterstrichen, aber keine Taste erreichte ihnwird wie auf der Tastatur getippt
die Tab-Taste auf der Leisteein Halt pro Titelein einziger Halt für die ganze Leiste; die Pfeiltasten gehen von Titel zu Titel
neu—is_image (das Symbol eines Eintrags, live geändert), is_group (Optionseinträge), ue_menu_closed(as_key) (ein ohne Auswahl geschlossenes Dropdown)

Das Rezept: arbeiten Sie in ue_item_selected mit GetFocus() oder mit dem bearbeiteten DataWindow wie mit einem PowerBuilder-Menü; setzen Sie ein & in jeden Titel; wenn Ihre Anwendung Alt+Buchstabe für etwas anderes nutzte, registrieren Sie es (of_register_shortcut): es behält den Vorrang.

11.16 ribbon: eine Auswahl, die hält, Menüs, die offen bleiben, Ablehnungen, die sich melden #

Die zweite Überprüfung des Menübands (ribbon) behebt, was der Benutzer sah — eine rückgängig gemachte Schriftwahl, ein Menü, das sich unter dem Zeiger schloss — und wendet die Regel der Bibliothek auf das Menüband an: ein Hinzufügen oder Entfernen, das nicht möglich ist, liefert -5. Keine Methode wird entfernt oder ändert ihre Signatur.

Was3.04.0
ribbon: eine Auswahl in der Liste eines Kombinationsfelds, dann das Verlassen des Feldsue_combo_changed zweimal — die Auswahl, dann der zuvor getippte Text, der sie überschrieb; is_text las den getippten Textein einziges ue_combo_changed, die Auswahl; das Feld zeigt sie sofort, auch bei einem nicht bearbeitbaren Feld
ribbon: Eingabe oder Escape in einem Kombinationsfeld, einem Drehfeld oder auf einer fokussierten Schaltfläche des Menübandsgingen auch an die Standard- oder Abbrechen-Schaltfläche des Fenstersbleiben im Menüband; Escape in einem Feld stellt den Text vor der Eingabe wieder her
ribbon: ein offenes Menü, während die Anwendung das Menüband aktualisiert (ein anderes Steuerelement ausgeblendet, eine Registerkarte umbenannt, eine Kachel hinzugefügt)schloss sich, und die darin getroffene Wahl löste kein Ereignis ausbleibt offen; es schließt sich nur, wenn sein eigenes Steuerelement verschwindet, ausgeblendet oder ausgegraut wird
ribbon: is_app_button neu geschrieben („File“ → „Datei“); is_app_button = ""das Anwendungsmenü wurde geleert; eine leere Zeichenkette zeigte „File“das Menü bleibt; eine leere Zeichenkette entfernt die Schaltfläche samt Menü
ribbon: of_select_tab einer unbekannten oder ausgeblendeten Registerkarte0-5, nichts ändert sich
ribbon: Hinzufügen eines Menüeintrags, einer Kachel, einer Kombinationsfeld-Auswahl, einer Schnellzugriffsschaltfläche, eines Eintrags des Anwendungsmenüs oder einer kontextbezogenen Gruppe mit bereits vergebenem Schlüssel; ein Schlüssel mit senkrechtem Strich oder beginnend mit __; ein unbekanntes Elternteil (Trennlinie, Überschrift, Auswahl, Eintrag ohne Anwendungsschaltfläche, Registerkarte unter einer fehlenden kontextbezogenen Gruppe)0: ein Duplikat oder gar nichts (eine kontextbezogene Registerkarte ohne Band)-5
ribbon: of_remove_tab, of_remove_group, of_remove_item, of_select_gallery_item auf einer unbekannten Adresse; of_open auf einer Schnellzugriffsschaltfläche0, ohne Wirkung-5. of_open("registerkarte/gruppe") öffnet das Panel einer eingeklappten Gruppe
ribbon: ein of_qat_item-Handle, das nach of_remove_item seiner Schaltfläche behalten wirdblieb gültig und bezeichnete eine verschwundene Schaltflächefreigegeben: IsValid() liefert false
ribbon: Zugriffstasten — zwei Steuerelemente mit demselben Buchstaben, eines davon ausgeblendet; ein Steuerelement einer eingeklappten Gruppedas ausgeblendete stahl den Buchstaben, nichts wurde ausgeführt; der Buchstabe einer eingeklappten Gruppe bewirkte nichts; eine zweibuchstabige Taste antwortete nienur ein sichtbares, aktives Steuerelement antwortet; der Buchstabe öffnet das Panel der eingeklappten Gruppe; "FP" wird Buchstabe für Buchstabe getippt
ribbon: Pfeiltasten auf einer ausgegrauten geteilten Schaltfläche, Farbauswahl, einem Kombinationsfeld oder Kataloghielten dort an, ohne dort etwas tun zu könnenüberspringen sie; Ab auf einer Dropdown- oder geteilten Schaltfläche öffnet ihr Menü

Das Rezept: (1) ue_selection_changed und ue_minimized werden auch ausgelöst, wenn Ihr Code of_select_tab aufruft oder ib_minimized setzt, wie bei einem Klick: Haben Sie Ihre Verarbeitung gleich danach selbst aufgerufen, entfernen Sie diesen Aufruf, sie liefe sonst zweimal; (2) prüfen Sie das -5 der Hinzufügungen, wenn Ihr Aufbau einen Schlüssel wiederholen kann; (3) ein is_app_button = "", das „File“ meinte, schreibt sich jetzt is_app_button = "File". Das Entfernen unter einem Steuerelement und das Handle eines Eintrags des Anwendungsmenüs stehen in Tabelle 11.5.

11.17 toolbar: eine Regel für Tastenkürzel, ein einziger Tooltip, Ablehnungen, die sich melden #

Die zweite Überprüfung der Symbolleiste (toolbar) richtet ihre Tastenkürzel an denen des Fensters aus und macht sichtbar, was wirkungslos geschrieben wurde. Keine Methode wird entfernt oder ändert ihre Signatur; zwei Rückgabecodes kommen hinzu (-5).

Was3.04.0
ein Werkzeug mit is_shortcut = "Delete" (eine einzelne Taste) und ein Feld in der LeisteEntf im Feld löste das Werkzeug aus und löschte nichts; außerhalb der Leiste nichtseine einzelne Taste ist nie ein Tastenkürzel: es braucht Strg oder Alt oder F1 bis F24 — die Regel des Fensters
eine gehaltene Tastenkürzel-Taste (alle Komponenten)die Aktion wiederholte sich: ein Umschalter flackerteeine Aktion pro Tastendruck
das geerbte of_register_shortcut(Kürzel, Schlüssel) auf einer Toolbarlöste nichts aus, und die Taste wurde verschlucktnimmt die Adresse des Werkzeugs oder Eintrags ("main/save"), sonst -5; die Form mit einem Argument liefert -5; of_clear_shortcuts leert auch is_shortcut
das Tastenkürzel eines Felds, eines Datumswählers, einer Beschriftungverschluckte die Taste, ohne etwas zu tundas Feld erhält den Cursor (Strg+F auf einer Suche), der Wähler öffnet seinen Kalender; eine Beschriftung nimmt keines an
der beim Hinzufügen angegebene Tooltip (of_add_button(…, tooltip))Markierungen wörtlich angezeigt; zwei Blasen gleichzeitig, wenn danach is_tooltip gesetzt wurdeein einziger thematisierter Tooltip, Rich-Text, das Tastenkürzel angehängt; is_tooltip ersetzt ihn und wird zurückgelesen
of_add_bar(MAIN_BAR) nach einem ersten Werkzeug auf mainlieferte 0, ohne etwas zu tun-5: um sie zu platzieren, fügen Sie main vor jedem Werkzeug hinzu
of_set_layout mit einem Text, der kein JSON istlieferte 0-5
ue_layout_changedfehlte, wenn das Hinzufügen einer Leiste eine andere verschob; ausgelöst beim erneuten Anzeigen einer bereits sichtbaren Leisteim ersten Fall ausgelöst, im zweiten nicht mehr
Trenner, ein Dropdown oder eine Kaskade, deren Einträge alle ausgeblendet sindverwaiste Striche; Dropdown und Kaskade blieben aktiv und stummkein Strich am Anfang, am Ende oder doppelt; sie werden ausgegraut gezeichnet
ein Rechtsklick in der Leistekein Event, auch nicht ue_rclickedue_item_rclicked(Adresse) auf einem Werkzeug, ue_rclicked außerhalb jedes Werkzeugs — nie beide
die Farben eines Menüeintrags (of_menu_item(…).il_back_color)geschrieben und zurückgelesen, nie gezeichnetim Menü gezeichnet
toolbar: ue_rclicked, ue_mouse_enter, ue_mouse_leavedokumentiert, aber nie ausgelöstausgelöst: ein Rechtsklick auf die Leiste außerhalb jedes Werkzeugs, das Betreten und Verlassen durch die Maus

Das Rezept: (1) ein Werkzeug-Tastenkürzel auf einer einzelnen Taste (außer F1 bis F24) bekommt Strg oder Alt; (2) auf einer Toolbar erhält of_register_shortcut die Adresse des Werkzeugs oder Eintrags; (3) um die Leiste main zu platzieren, rufen Sie of_add_bar(MAIN_BAR, Band, Rang) vor ihrem ersten Werkzeug auf.

11.18 statusbar: ein Griff, der die Größe ändert, eine Meldung, die den Text nicht ersetzt #

Die zweite Überprüfung der Statusleiste (statusbar) gibt dem Größenänderungsgriff seine eigentliche Rolle und macht aus jedem leeren oder unbekannten Schlüssel eine Ablehnung. Keine Methode wird entfernt oder ändert ihre Signatur; of_flash_panel erhält einen Rückgabecode (-5).

Was3.04.0
ib_show_resize_grip = true, dann am Griff zieheneine Zeichnung: nichts bewegt sichdas Fenster wird an seiner Ecke vergrößert (unten links bei RTL); auf einem maximierten Fenster oder einem ohne veränderbaren Rahmen wird der Griff nicht gezeichnet
of_flash_panel auf einem Schlüssel, den die Leiste nie erhalten hat, oder auf einer Adresse0, nichts wird angezeigt-5
of_panel(k).is_text gelesen während eines of_flash_paneldie Meldungder Text des Bereichs (die Meldung liegt darüber)
of_panel(""), of_panel("a/b"): schreiben, dann lesenschrieb in die Bereiche ohne Schlüssel und die Trennerbezeichnet nichts: schreibt nirgendwohin, liest sich leer
is_state außerhalb der Konstanten STATE_* ("Error", "very bad")unverändert gelesen, ohne Farbe; ein Wert mit Leerzeichen löste einen Skriptfehler ausGroß-/Kleinschreibung wird ignoriert ("Error" = Fehler); jeder andere Wert bedeutet keinen Zustand und liest sich leer
ii_progress = 150, dann gelesen150 (bei 100 % gezeichnet)100, was gezeichnet ist
ein deaktivierter Bereich mit Zustandbehielt die Zustandsfarbe: er wirkte aktivausgegraut, Zustandsmarkierung inbegriffen
ein Bereich, der entfernt, geleert (of_clear, of_clear_menu), deaktiviert oder ausgeblendet wird, während seine Liste offen istdie Liste blieb offen, und eine Wahl löste ue_panel_menu_clicked ausdie Liste schließt sich, nichts wird ausgelöst (ebenso für einen ausgegrauten oder ausgeblendeten Eintrag)
Doppelklick auf einen Bereich mit Auswahllisteue_panel_double_clicked zusätzlich zur geöffneten Listenur die Liste
Pfeil nach oben / unten auf einem fokussierten Bereich mit Auswahllistesprang zum Nachbarbereichöffnet die Liste (Pfeil links / rechts bewegen weiterhin)
eine Auswahlliste nur aus TrennernPfeil und leere Listekeine Liste: der Bereich bleibt, was ib_clickable sagt

Das Rezept: (1) setzen Sie ib_show_resize_grip auf einer Statusleiste am unteren Rand eines Fensters mit veränderbarer Größe; (2) prüfen Sie den Rückgabewert von of_flash_panel wie den der anderen Methoden mit Schlüssel; (3) geben Sie jedem Bereich einen Schlüssel, den Sie lesen oder ändern wollen.

11.19 dockcontainer: ein of_select_panel, das das Panel findet, schwebende Fenster, die sich erinnern #

Die zweite Überprüfung des Panel-Containers (dockcontainer) gibt of_select_panel eine Wirkung auf ein eingeklapptes oder schwebendes Panel und lässt die Anordnung die schwebenden Fenster speichern. Keine Methode wird entfernt oder ändert ihre Signatur.

Was3.04.0
of_select_panel eines eingeklappten, schwebenden oder ausgeblendeten Panels0, nichts ist zu seheneingeklappt: sein Ausklapp-Panel öffnet sich; schwebend: sein Fenster kommt nach vorn; ausgeblendet: -5
of_float_panel des Haupt-Panels oder eines ausgeblendeten Panels0, nichts geschieht-5
of_move_panel, das das HAUPT-Panel stapelt0, und sein Nachbar verschwindet ohne Registerkarte-5, nichts bewegt sich
unbekannte as_position (of_add_panel, of_move_panel)0, das Panel dockt unten an-5, das Steuerelement bleibt unberührt
Anordnung (of_get_layout, ue_layout_changed, of_set_layout) und SCHWEBENDE Panelsvergessen: ein abgelöstes Panel kam angedockt zurück; sein Fenster zu verschieben löste nichts ausmit der Lage ihres Fensters gespeichert, beim Wiederherstellen neu geöffnet (auf einen Bildschirm zurückgeholt); das Fenster zu verschieben oder zu vergrößern löst ue_layout_changed aus
of_set_layout einer Anordnung ohne Haupt-Paneldas aktuelle Haupt-Panel wird entferntes bleibt erhalten
is_title eines ohne Titel hinzugefügten Panelssein Schlüssel; ein später gegebener Titel ließ die Kopfzeile des Haupt-Panels nicht erscheinen"" (die Registerkarte zeigt weiter den Schlüssel); die Kopfzeile des Haupt-Panels folgt seinem Titel

Das Rezept: (1) ue_panel_selected, ue_panel_floated und ue_panel_pinned werden auch nach of_select_panel, of_float_panel und ib_pinned ausgelöst, wie bei einer Geste: Haben Sie Ihre Verarbeitung gleich danach selbst aufgerufen, entfernen Sie diesen Aufruf, sie liefe sonst zweimal; (2) prüfen Sie das -5 von of_move_panel, of_float_panel und of_select_panel; (3) eine vor 4.0 gespeicherte Anordnung wird unverändert wiederhergestellt, ihre Panels bleiben angedockt.

11.20 tab: ehrliche Rückgabecodes, ein Rechtsklick, der an die Anwendung zurückgeht #

Die zweite Überprüfung der Registerkarten (tab) lässt of_add_page und of_select_page melden, was sie ablehnen, meldet die Anordnung, wenn Ihr Code eine Registerkarte ausblendet, und gibt den Rechtsklick an die Anwendung zurück, wenn das integrierte Menü abgeschaltet ist. Keine Methode wird entfernt oder ändert ihre Signatur; ein Event kommt hinzu.

Was3.04.0
of_add_page eines bereits gehosteten Steuerelements (von dieser Registerkarte unter einem anderen Schlüssel oder von einer anderen Komponente)0 und eine Registerkarte ohne Inhalt-5, nichts wird hinzugefügt
of_select_page einer abgelehnten Registerkarte, während keine aktiv ist (alle ausgeblendet)0-5
Eine Registerkarte per Code aus- oder einblenden (ib_visible)kein ue_layout_changedue_layout_changed wird mit der gesamten Anordnung ausgelöst, wie bei of_move_page: Es meldet, dass sich die zu speichernde Anordnung geändert hat
Rechtsklick auf eine Registerkarte mit ib_context_menu = falsenichtsdie Registerkarte wird ausgewählt, dann wird ue_tab_rclicked(as_key) (neu) ausgelöst: Öffnen Sie dort Ihr Menü
Zur aktuellen Registerkarte zurückkehren, während ue_selection_changing auf seine Antwort warteteine „Ja“-Antwort aktivierte trotzdem die andere Registerkartedie Frage wird verworfen: Die letzte Geste des Benutzers gewinnt
Eine Registerkarte, die deaktiviert oder ausgeblendet wird, während ue_tab_closing auf seine Antwort wartetwurde trotzdem geschlossenbleibt offen
Die fokussierte Registerkarte per Tastatur schließen (Entf)der Fokus verließ die Leiste, die Pfeiltasten reagierten nicht mehrder Fokus geht an die nun aktive Registerkarte

Das Rezept: (1) prüfen Sie das -5 von of_add_page (eine Seite wird nur einmal gehostet) und von of_select_page; (2) wenn Sie die Anordnung in ue_layout_changed speichern, ist nichts zu tun — sie folgt jetzt auch Ihren ib_visible; (3) wo ib_context_menu = false den Rechtsklick ins Leere laufen ließ, skripten Sie ue_tab_rclicked.

11.21 listbar: ein ausgeblendeter Eintrag wird nie ausgewählt, eine geprüfte Anordnung #

Die zweite Überprüfung der Navigationsleiste (listbar) lässt of_select_item einen ausgeblendeten Eintrag und of_set_layout einen Text ablehnen, der keine Anordnung ist, und ergänzt eine Zähler-Plakette, die Tasten Links / Rechts und den Rechtsklick auf einen Eintrag. Keine Methode wird entfernt oder ändert ihre Signatur.

Was3.04.0
of_select_item eines ausgeblendeten Eintrags (ib_visible = false)0, eine unsichtbare Auswahl-5, die Auswahl bleibt; den bereits ausgewählten Eintrag auszublenden, lässt ihn ausgewählt
of_set_layout mit einem Text, der kein JSON-Objekt ist (abgeschnittene Datei)0, nichts wird angewendet-5, nichts wird gesendet
In einer wiederhergestellten Anordnung eingeklappter Abschnitt, später hinzugefügtentsteht eingeklapptentsteht ausgeklappt: der Faltzustand gilt nur für einen vorhandenen Abschnitt
Abschnitt mit leerem Titelihre Einträge kleben an den darüberliegenden; einklappbar, ohne etwas, um ihn wieder zu öffnenein Abstand (in der schmalen Leiste ein feiner Strich) trennt ihn; er wird nie eingeklappt
Neu: is_badge (Eintrag), ue_item_rclicked(as_keys), Links / Rechts und Buchstabensprung—eine Zähler-Plakette, der Rechtsklick auf einen Eintrag (ein Ereignis, der Eintrag wird nicht ausgewählt), Einklappen per Tastatur

Das Rezept: (1) ue_selection_changed wird auch nach einem of_select_item Ihres Codes ausgelöst (etwa um beim Start die Startseite zu öffnen), wie bei einem Klick: Haben Sie die Seite gleich danach selbst geöffnet, überlassen Sie das dem Ereignis, sonst öffnet sie sich zweimal; (2) prüfen Sie das -5 von of_select_item, wenn Sie Einträge ausblenden, und das von of_set_layout, wenn die Anordnung aus einer Datei kommt; (3) ein Abschnitt ohne Titel lässt sich nicht mehr einklappen: Geben Sie ihm einen Titel, wenn er einklappbar sein soll.

11.22 tilesbox: ein Titel, der keine Gruppe mehr erzeugt, Neuanordnung über die Tastatur #

Die zweite Überprüfung des Kachelpanels (tilesbox) verhindert, dass der Titel einer Gruppe diese Gruppe erzeugt, lässt of_add_live_item einen leeren Text ablehnen, gibt einen einzigen Tab-Halt pro Gruppe und ergänzt die Neuanordnung über die Tastatur. Keine Methode wird entfernt oder ändert ihre Signatur. il_badge_color folgt nun der Regel aller Farben (siehe die Zeile picture, button, tilesbox weiter oben).

Was3.04.0
of_group(schlüssel).is_title für eine nie hinzugefügte Gruppeerzeugte eine sichtbare Gruppe, die sich weder füllen noch entfernen ließ (außer mit of_clear)schreibt nichts: nur of_add_group erzeugt eine Gruppe; ein leerer Schlüssel oder einer mit / oder `` liefert ein wirkungsloses Handle
of_add_live_item mit leerem Text0, und der feste Text is_live_text wurde gelöscht-5, nichts ändert sich
of_tile(adresse).of_count()0die Zahl der mit of_add_live_item gesetzten Seiten
Neu anordnen (ib_reorderable = true)nur mit der Mausauch über die Tastatur: Strg+Links/Rechts in der Gruppe (Leserichtung), Strg+Oben/Unten in die Nachbargruppe; dieselben ue_tile_moved und ue_layout_changed
Tab-Tastehielt an jeder Kachel; ein Pfeil zu einem Rand ohne Nachbarn sprang zur vorherigen oder nächsten Kachel des Dokumentsein Halt pro Gruppe (die zuletzt fokussierte Kachel), die Pfeile durchlaufen die Kacheln; am Rand bleibt der Fokus
Kachel, die während des Ziehens deaktiviert oder ausgeblendet wirdbeim Loslassen verschoben, ue_tile_moved ausgelöstdas Ziehen wird abgebrochen, nichts bewegt sich
ib_collapsed einer Gruppe, von Ihrem Code gesetztkein Ereignisue_group_toggled, wie ein Klick auf die Kopfzeile (nichts, wenn die Gruppe schon in diesem Zustand ist)

Das Rezept: (1) erzeugen Sie eine Gruppe mit of_add_group, bevor Sie ihren Titel ändern; (2) prüfen Sie das -5 von of_add_live_item, wenn der Text einer Seite leer sein kann; (3) was Sie in ue_tile_moved getan haben, gilt nun auch für ein Verschieben über die Tastatur.

11.23 stepbar: „alles erledigt" am letzten Schritt verankert, entfernte Schritte hinterlassen nichts mehr #

Die zweite Überprüfung der Schrittleiste (stepbar) macht „alles erledigt" mit der Regel des aktuellen Schritts (eine Identität, kein Rang) stimmig, lässt einen entfernten Schritt mitnehmen, was ihm gehörte, und behebt vier Anzeigefehler. Keine Signatur ändert sich.

Was3.04.0
of_add_step, während die Leiste auf „alles erledigt" stehtder hinzugefügte Schritt erschien als abgeschlossen (Haken); ii_current sprang ohne Ereignis auf n + 2nach dem damals letzten Schritt hinzugefügt, wird er zum aktuellen Schritt und ue_step_changed wird ausgelöst; davor eingefügt, ändert sich nichts
of_step(schlüssel).is_state für einen Schlüssel ohne Schrittgemerkt und später auf den unter diesem Namen hinzugefügten Schritt angewendetignoriert; ein hinzugefügter Schritt beginnt mit seinem berechneten Zustand
Farben und QuickInfo eines entfernten Schritts (of_remove_step, of_clear_steps)kehrten beim nächsten unter demselben Schlüssel hinzugefügten Schritt zurückgehen mit dem Schritt
Verdichtete Leiste (OVERFLOW_AUTO), deren aktueller Schritt auf Fehler gesetzt istkeine Beschriftung mehr; ein auf STATE_CURRENT gesetzter Schritt bekam einedie Beschriftung bleibt beim aktuellen Schritt (Rang von ii_current), unabhängig von seinem Zustand
OVERFLOW_SHRINKBeschriftungen über mehrere Zeilen, lange Wörter ohne „…" abgeschnitteneine Zeile pro Beschriftung, mit „…" am Ende
POSITION_BOTTOM mit zweiter Zeile (is_description)über der Beschriftung, direkt daranunter der Beschriftung, über dem Punkt
Überfahren eines deaktivierten oder nicht erreichbaren Schritts (il_back_color_hover, il_text_color_hover)die Überfahrfarbe leuchtete aufnichts leuchtet auf: der Schritt reagiert nicht auf den Klick

Das Rezept: Wenn Ihr Code nach dem Setzen von „alles erledigt" (ii_current = of_count() + 1) einen Schritt hinzufügt und die Leiste so bleiben soll, setzen Sie nach dem Hinzufügen erneut ii_current = of_count() + 1. Wenn Sie die Leiste mit denselben Schlüsseln neu aufbauen, setzen Sie die gewünschten Farben und QuickInfos erneut: sie überleben das Entfernen nicht mehr.

11.24 progressbar: ein Balken, der in sein Control passt, eine Beschriftung, die der Sprache folgt #

Die zweite Überprüfung des Fortschrittsbalkens (progressbar) lässt ihn dorthin passen, wo eine HProgressBar stand, sendet der Komponente nur noch die Werte, die die Zeichnung ändern, schreibt den Prozentsatz in der Anzeigesprache und fügt is_label_format (eine eigene Beschriftung) und is_state (Pause, Fehler) hinzu. Keine Signatur ändert sich.

Was3.04.0
Linearer Balken in einem niedrigen oder breiten Control12 px Rand, höchstens 640 px breit: unter 24 px Höhe erschien eine Bildlaufleiste und der Balken wurde abgeschnitten2 px Rand, die ganze Breite; Spur (14 px) und Beschriftung schrumpfen mit der Höhe
Prozentbeschriftung (ib_label)„50%“ in allen Sprachenin der Anzeigesprache: „50 %“ auf Französisch
of_set_property("value", "12,5") oder ein Text, der keine Zahl istunverändert gesendet: der Befehl ging wortlos verloren; ein ungültiges minimum blockierte die Skala bis zum nächsten of_reset„12,5“ wird als 12.5 gelesen; ein Text, der keine Zahl (bzw. bei einem Boolean nicht true/false) ist, wird ignoriert
id_value zurückgelesender Wert, den die Komponente erhalten hatte; jede Zuweisung war ein Hin und Zurück mit ihrder letzte von der Anwendung gesetzte Wert; die Komponente erhält nur die Werte, die die Zeichnung ändern (ein Zehntelprozent)
of_reset() auf einem gefüllten Balkender Balken glitt auf null zurücker springt sofort auf null zurück

Das Rezept: (1) wenn Sie einen Prozentsatz von Hand berechnet haben, setzen Sie id_maximum und weisen Sie den Rohwert zu, gern bei jeder Zeile; (2) wenn ein automatischer Test die Beschriftung las, erwarten Sie das Format der Anzeigesprache; (3) um eine Pause oder einen Fehler zu zeigen, ziehen Sie is_state einer mit il_color gewählten Farbe vor.

11.25 picture: eine Zuweisung liest die Datei neu, ein Fehlschlag nennt seinen Grund #

Die zweite Überprüfung des Bildes (picture) lässt es bei jeder Zuweisung neu von der Festplatte lesen, wie das native Picture, gibt ue_error ein zweites Argument, das sagt, warum das Bild fehlt, lehnt eine http://-Adresse ab, statt ohne Grund fehlzuschlagen, und löst bei einem Doppelklick nur noch ein ue_clicked aus. ue_error ist die einzige Signatur, die sich ändert.

Was3.04.0
picture: Doppelklick auf das Bildzwei ue_clicked, dann ue_double_clickedein einziges ue_clicked, dann ue_double_clicked — wie das native Picture
picture: ue_errorue_error (string as_message): nur die Meldungue_error (string as_message, string as_reason): as_reason ist eine der Konstanten REASON_* (nicht gefunden, zu groß, http abgelehnt, nicht angezeigtes Format, anderes). Ihr Ereignisskript erhält das Argument von selbst; ein in Ihrem Code geschriebener Aufruf event ue_error(…) übergibt nun zwei
picture: is_source = "http://…"von der Engine über https versucht; auf einem Server ohne TLS ein Fehlschlag ohne Grundvon vornherein abgelehnt: Fehlerzeichen und ue_error mit REASON_INSECURE. Laden Sie das Bild zuerst herunter (n_pbt_restclient.of_download) und zeigen Sie die Datei an
picture: derselbe Pfad erneut zugewiesen, nachdem die Datei neu geschrieben wurde; mono: oder tint: auf is_source; ein .avif-Bilddas alte Bild; das Fehlerzeichen; nicht gefundendie Datei neu gelesen, wie beim nativen Picture; das Glyph vom Design umgefärbt; angezeigt
picture: gezoomtes Bild kleiner als sein Rahmen (Streifen); horizontales Mausrad, Touchpad; gehaltene rechte Maustastees verließ beim Ziehen seinen Rahmen; eine Zoomstufe pro Ereignis, Verkleinern bei horizontalem Bildlauf; das Bild bewegte siches bleibt dort, wo is_align und is_valign es platzieren; Zoom proportional zur Geste, nichts bei horizontalem Bildlauf; nur die linke Maustaste verschiebt

Das Rezept: (1) wenn ein Skript bei ue_clicked einen Datensatz und bei ue_double_clicked eine andere Aktion öffnete, ist nichts zu tun — der Doppelklick öffnet den Datensatz nicht mehr erneut; (2) ersetzen Sie jedes Auswerten des Textes von as_message durch eine Prüfung von as_reason; (3) ein Bild auf einem Intranet-Server über http wird zuerst heruntergeladen (n_pbt_restclient.of_download in einen temporären Ordner) und dann über seinen Pfad angezeigt; (4) wenn Sie dem Pfad ein ?v= anfügten, um das erneute Lesen eines neu geschriebenen Bildes zu erzwingen, entfernen Sie es: eine erneute Zuweisung genügt.

11.26 video: Untertitel und Formate, die spielen, ein Fehlschlag, der seinen Grund nennt #

Die zweite Prüfung des Players (video) gibt ue_failed ein zweites Argument, das sagt, warum ein Film nicht spielt, lehnt eine http://-Adresse ab, spielt .mkv und .mov, lädt per URL gegebene Untertitel, und pausiert den Film, wenn die Komponente ausgeblendet wird. ue_failed ist die einzige Signatur, die sich ändert.

Was3.04.0
video: ue_failedue_failed (string as_message)ue_failed (string as_message, string as_reason) — as_reason ist eine Konstante REASON_*
video: eine http://-Quellescheiterte mit „nicht auffindbar“sofort abgelehnt, REASON_INSECURE; nur https wird abgespielt
video: eine .mkv, eine .mov.mkv „nicht auffindbar“, .mov am Namen abgelehntausgeliefert und abgespielt, wenn die Engine sie dekodiert; .avi, .wmv, .flv bleiben abgelehnt (REASON_FORMAT)
video: ein Untertitel per URLerschien nie, ohne Meldungvon der Komponente heruntergeladen (der Server muss CORS erlauben); eine Ablehnung löst ue_subtitles_failed aus
video: of_add_subtitles zweimal für dieselbe Spracheersetzte die Spur stillschweigend, 0-5 (auch für eine Sprache mit / oder `); zuerst of_remove_subtitles`
video: die Komponente während der Wiedergabe ausgeblendetder Film lief weiter, mit Tonpausiert, ue_paused, und wartet auf of_play (ib_pause_when_hidden, standardmäßig wahr)
video: die Lautstärke auf der Leiste ziehenein ue_volume_changed pro Pixeleines, beim Loslassen
video: of_capture in eine .jpgein PNG unter einem .jpg-Namenein JPEG; die Überladung of_capture(as_path, al_max_width) verkleinert das Bild
video: of_get_last_error nach einem Fehlschlag von of_captureder vorige Fehler der Bibliothekder Grund DIESES Fehlschlags (fehlender Ordner, leerer Pfad…)
video: Escape im Vollbild, ib_enabled = falsewirkungslos (nur Alt+F4 verließ es)verlässt das Vollbild

Das Rezept: (1) ergänzen Sie as_reason in Ihrem Skript von ue_failed und prüfen Sie es statt des Meldungstexts; (2) ein Film oder Untertitel eines http-Intranetservers wird zuerst heruntergeladen (n_pbt_restclient.of_download in einen temporären Ordner) und dann über seinen Pfad abgespielt; (3) ue_fullscreen_changed, ue_pip_changed, ue_source_changed und ue_chapter_changed werden auch nach Ihren eigenen Aufrufen ausgelöst (of_fullscreen, of_pip, of_next, of_seek…), wie bei einer Geste: Hat Ihr Code seine Verarbeitung gleich danach selbst aufgerufen, entfernen Sie diesen Aufruf, sie liefe sonst zweimal; (4) eine Monitorwand, die ausgeblendet spielen muss, setzt ib_pause_when_hidden = false; (5) um die Spur einer Sprache zu ersetzen, of_remove_subtitles und dann of_add_subtitles.

11.27 pdfviewer: of_refresh sagt, was es tut, nichts wird ohne Ihr Wissen heruntergeladen #

Die zweite Überprüfung des Betrachters (pdfviewer) gibt of_refresh einen Rückgabecode — und, damit derselbe Name dasselbe bedeutet, auch denen von webbrowser und shellexplorer —, meldet jeden Link des Dokuments und lehnt ab, was nie angezeigt würde, statt warten zu lassen. Keine Ereignissignatur ändert sich.

Was3.04.0
pdfviewer · webbrowser · shellexplorer: of_refreshsubroutinelong: 0, sobald angefordert, -4 ohne Dokument bzw. Seite (pdfviewer, webbrowser), -2, wenn die Komponente nicht erstellt ist
pdfviewer: of_refresh nach einer Ablehnung (http://…)tat nichts, ohne Ereignisdie Ablehnung wird erneut gemeldet: ue_load_failed
pdfviewer: eine data:-Adresse mit mehr als 2 MB Zeichennie angezeigt, kein Ereignissofort ue_load_failed mit REASON_TOO_LARGE
pdfviewer: ein entferntes PDF, das „als Download“ gesendet wirdue_load_failed, aber die Datei landete in Downloadsue_load_failed mit REASON_REFUSED, nichts wird heruntergeladen
pdfviewer: ue_link_clicked bei einem mailto:-, file:- oder relativen Linknie ausgelöst (nur http und https); ein relativer Link kam als interne Adresse anfür jeden Link ausgelöst; as_url ist ein mailto:… wie es ist, oder ein Festplattenpfad für eine lokale Datei
pdfviewer: of_print_to_pdfschrieb die Seite um den Betrachter, nicht das Dokument-4, nichts wird geschrieben: Kopieren Sie die Datei von is_source
pdfviewer: file://localhost/C:/…, file:////server/freigabe/…ein falscher Pfad, nicht gefundenC:\… und \\server\freigabe\…
pdfviewer: der der Komponente gegebene Fokus (Tab, of_focus_webview)blieb auf der Seite: die Tasten scrollten das Dokument nichtgeht an das Dokument: Bild ab, Pfeile, Pos1 / Ende scrollen es

Das Rezept: (1) ein Aufruf uo_pdf.of_refresh() kompiliert unverändert; prüfen Sie den Rückgabewert, wenn Sie wissen wollen, dass es nichts erneut zu lesen gab; (2) ein Dokument von mehr als 1,5 MB im Speicher wird in eine temporäre Datei geschrieben und dann über seinen Pfad angezeigt; (3) erwarten Sie in ue_link_clicked auch ein mailto: und einen Festplattenpfad, nicht nur eine Webadresse; (4) um das angezeigte Dokument zu kopieren, kopieren Sie die Datei von is_source statt of_print_to_pdf.

11.28 codeeditor: eine sichtbare Suche, ein „Gehe zu“, das die Einfügemarke bewegt, Ersetzen #

Die zweite Überprüfung des Code-Editors (codeeditor) holt auf den Bildschirm, was die Suche findet, behält die Einfügemarke des Benutzers während einer Suche, benennt ii_doc_line um und ergänzt, was man von einem Skripteditor erwartet: Ersetzen, die Einfügemarke steuern, wissen, ob gespeichert werden muss, einen Fehler in der Leiste zeigen. Keine Ereignissignatur ändert sich.

Was3.04.0
codeeditor: ii_doc_lineein long mit integer-Präfixil_doc_line: benennen Sie es um; eine Zeile hinter dem Textende markiert nichts mehr (sie wird so zurückgelesen, wie sie geschrieben wurde)
codeeditor: of_find bei ib_search_enabled = false0, ohne etwas zu suchen-4
codeeditor: of_find("")startete die vorige Suche erneutleert das Feld und entfernt die Hervorhebungen, ohne ue_find_result
codeeditor: of_find, Eingabe in der Leisteder Treffer blieb oft außerhalb der Ansicht; die Einfügemarke ging daraufder Treffer wird auf den Bildschirm geholt; die Suche beginnt an der Einfügemarke, die sich erst beim Schließen der Leiste bewegt (Esc)
codeeditor: of_insert_text bei offener Suchleisteersetzte den gefundenen Treffer außerhalb der Ansicht und leerte den Strg+Z-Verlauffügt an der Einfügemarke des Benutzers ein, auf den Bildschirm geholt; Strg+Z macht es rückgängig
codeeditor: ein neues is_textbehielt die Scrollposition des vorigen Dokuments; ein reiner CR-Text wurde in LF zurückgelesenwird ab seiner ersten Zeile angezeigt und entfernt die Markierungen; reines CR wird in CR zurückgelesen (eine Mischung in CRLF)
codeeditor: ib_current_line mit ib_wrapkein Banddas Band deckt die ganze Zeile der Einfügemarke ab
codeeditor: Neuerungen—Ersetzen (of_replace, of_replace_all, Strg+H) und Suchoptionen (ib_find_match_case, ib_find_whole_word, ib_find_regex, F3); Einfügemarke und Auswahl (il_caret_line, il_caret_column, of_select_range, of_selected_text, of_line_count); ib_modified; Markierungen in der Leiste (of_add_marker, of_remove_marker, of_clear_markers, of_marker_count)

Das Rezept: (1) ersetzen Sie ii_doc_line durch il_doc_line; (2) prüfen Sie das -4 von of_find, wenn die Suche abgeschaltet sein kann; (3) um „zur Zeile“ eines Fehlers zu gehen und dabei die Einfügemarke zu bewegen, setzen Sie il_caret_line (und of_add_marker, um ihn zu zeigen) — il_doc_line markiert nur; (4) wenn Sie ue_caret_changed verfolgten, um zu erfahren, wo ein Ausschnitt eingefügt wurde, lesen Sie il_caret_line nach of_insert_text; (5) eine Schaltfläche Speichern kann ib_modified folgen, das Sie nach dem Speichern auf false zurücksetzen.

11.29 jsontree und xmltree: die Tastatur bleibt beim Baum, eine Suche, die die Auswahl nicht mehr verschiebt #

Die zweite Überprüfung des JSON-Baums (jsontree) betraf die Engine, die er mit dem XML-Baum (xmltree) teilt: das Folgende gilt für beide, sofern nicht anders angegeben. Keine Signatur ändert sich; der JSON-Baum erhält of_expand_path, of_collapse_path, of_is_expanded, of_copy und das Ereignis ue_node_toggled, das durch eine Geste des Benutzers wie durch of_expand_path und of_collapse_path ausgelöst wird.

Was3.04.0
jsontree, xmltree: Eingabe auf einem Blattan das Fenster weitergegeben: seine Standardschaltfläche wurde ausgelöstbleibt beim Baum, löst ue_node_clicked wie ein Klick aus; ohne Auswahl nichts
jsontree, xmltree: Esc bei offenem Suchfelddie Schaltfläche Abbrechen des Fensters wurde ausgelöstschließt zuerst das Feld; bei geschlossenem Feld geht Esc an das Fenster
jsontree, xmltree: schließende Zeilen (}, ], </x>)per Pfeiltasten erreichbar (ue_selection_changed für einen schon gemeldeten Block); ein Klick scrollte zur öffnenden Zeile zurückvon der Tastatur übersprungen; ein Klick wählt den Block ohne die Ansicht zu bewegen
jsontree, xmltree: Pfeil rechts auf einem Blattging eine Zeile nach untentut nichts, wie in einem Baum
jsontree, xmltree: eine Suche während einer Auswahlof_search_next oder Esc konnten die gewählte Zeile einklappen und die Auswahl ohne Ereignis verschiebendie ausgewählte Zeile bleibt sichtbar und ausgewählt: of_selected_path ändert sich nicht
jsontree: die Meldung von ue_errorhalb übersetzt, halb Englisch („Ungültiges JSON : Unexpected end of JSON (line 1, column 6)“)vollständig in der Anzeigesprache, Zeile und Spalte eingeschlossen: vergleichen Sie seinen Text nicht
jsontree, xmltree: ein Dokument mit mehr als 1.500.000 Zeilenangezeigt, aber sein Ende unerreichbar, ohne Hinweisabgelehnt: eine Meldung im Baum und ue_error
jsontree: Strg+C im Baumkopierte nichts und ging als Fensterkürzel weiterkopiert die Auswahl (wie of_copy); ohne Auswahl bleibt das Kürzel beim Fenster

Das Rezept: (1) wenn ein Fenster darauf baute, dass Eingabe im Baum seine Standardschaltfläche auslöst, fügen Sie diesen Schritt in ue_node_clicked ein; (2) suchen Sie in ue_selection_changed keinen leeren Schlüssel mehr (eine schließende Zeile wird nicht mehr ausgewählt); (3) werten Sie den Text von ue_error nicht aus: er folgt der Sprache; (4) um die Faltungen eines Benutzers wiederherzustellen, lesen Sie of_is_expanded und setzen Sie sie mit of_expand_path / of_collapse_path erneut.

11.30 xmltree: jede Zeile hat ihren XPath, jeder XPath wählt aus #

Die zweite Überprüfung des XML-Baums (xmltree) übernimmt alles, was der vorige Abschnitt über die gemeinsame Engine sagt. Sie fügt hinzu, was XML eigen ist: ein Pfad, der IMMER den Knoten der Zeile bezeichnet, unverändert von n_pbt_xml lesbar. Keine Signatur ändert sich; der XML-Baum erhält of_selected_xml, of_copy, of_expand_path, of_collapse_path, of_is_expanded und das Ereignis ue_node_toggled.

Was3.04.0
xmltree: Pfad einer Text-, Kommentar- oder Verarbeitungsanweisungszeileder ihres Elements (während of_selected_value ihren eigenen Text gab); "" vor der Wurzelihr eigener: /r/text()[2], /r/comment()[1], /r/processing-instruction('x')[1], /comment()[1] — n_pbt_xml.of_get_value liest dort denselben Wert
xmltree: Element, dessen Präfix mit einer anderen URI erneut deklariert ist, oder mit einem gleichnamigen Geschwister in einem anderen Namensraumein Pfad, der nichts fand, oder einen ANDEREN Knoten*[local-name()='x' and namespace-uri()='urn:…'], das genau diesen Knoten bezeichnet
xmltree : of_select_pathnur die genaue Form, die der Baum schreibt, sonst -5jeder XPath (//line[@sku='A'], /r/a[1]…): der erste gefundene Knoten wird ausgewählt, of_selected_path gibt danach den Pfad des Baums
xmltree: die Meldung von ue_error„Ungültiges XML : error on line 1 at column 11: …“; der Baum blieb leer„Ungültiges XML : Zeile 1, Spalte 11 (…)“, in der Anzeigesprache; der Baum zeigt die Quelle, die fehlerhafte Zeile markiert
xmltree: <?xml-stylesheet?> ohne XML-Deklarationzweimal angezeigteine einzige Zeile
n_pbt_xml: ein XPath mit @xml:langabgelehnt (unbekanntes Präfix xml), leerer Wertgelesen: das Präfix xml ist von Haus aus gebunden, wie es die Norm verlangt
xmltree: Pfeil rechts auf einem Tag mit AttributenAttribute waren nur mit der Maus erreichbardurchläuft die Attribute einzeln (Pfeil links geht zurück), ein ue_selection_changed pro Schritt, dann geht es hinab
xmltree: Strg+C, Einklappen per Pfadnichts; Strg+C ging als Kürzel an das Fensterof_selected_xml, of_copy und Strg+C (das XML der Auswahl), of_expand_path, of_collapse_path, of_is_expanded (jeder XPath), ue_node_toggled (eine Geste, oder of_expand_path / of_collapse_path)

Das Rezept: (1) wenn Sie von einer Text- oder Kommentarzeile über of_selected_path zu ihrem Element hinaufgingen, nehmen Sie das Elternteil des Pfads (was vor dem letzten / steht); (2) werten Sie den Text von ue_error nicht aus: er folgt der Sprache; (3) ein in 3.0 unter gemischten Namensräumen gespeicherter Pfad wird wiedergefunden, indem man ihn of_select_path übergibt, das jetzt jeden XPath annimmt, und dann of_selected_path zurückliest.

11.31 xml: Ablehnungen, die sich melden, Namensräume, die halten #

Die zweite Überprüfung von n_pbt_xml ändert keine Signatur. Sie lässt of_remove den Codes der Bibliothek folgen, lehnt ein Lesen ab, solange ein gebautes Dokument ein offenes Element hat, und lässt Namensräume halten: was ein Mutator schreibt, wird im richtigen Namensraum zurückgelesen oder mit Begründung abgelehnt.

Was3.04.0
xml: of_remove(""), of_remove ohne geladenes Dokument, Seite ohne Antwort0, wie „nichts entfernt“-5; -4; -2 — die Anzahl (>= 0) nur, wenn das Entfernen versucht wurde
xml: ein Lesen (of_exists, of_count, of_get_value, of_is_valid…) oder eine Änderung, während ein gebautes Element noch offen istdas Dokument wurde so geladen, und der Rest des Baus begann ein NEUES Dokument: das Vorherige ging ohne Fehler verlorenabgelehnt: -4, leer oder false, und is_last_error = „the document is still being built : close its elements first“; nichts geht verloren (of_xml und of_pretty bleiben verfügbar)
xml: of_add_xml unter einem Element mit Standard-Namensraum oder mit dem Präfix des Ziels (<s:Item/> unter s:Body)das Fragment blieb außerhalb des Namensraums (xmlns=''), unsichtbar für den XPath, mit dem es hinzugefügt wurde; das Präfix des Ziels wurde abgelehnt (-4)das Fragment erbt die am Ziel geltenden Namensräume, wie of_add_child
xml: of_set_attr / of_add_child mit einem präfigierten Namen (xsi:type, p:item)0, ein Attribut außerhalb des Namensraums, das der XPath nicht fand; mit nicht deklariertem Präfix ein Dokument, das sich nicht mehr laden ließim Namensraum des Präfixes (am Knoten deklariert oder mit of_register_namespace gebunden); -4 und „undeclared prefix : xsi“, wenn es nirgends gebunden ist
xml: of_pretty nach einem of_add_child unter einem präfigierten Elternteil (s:Body)<Item> ohne Präfix: zurückgelesen außerhalb des Namensraums<s:Item>, wie in of_xml
xml: of_element_attr zweimal mit demselben Namen; ein Name :x, x: oder a:b:czwei Attribute (fehlerhaftes Dokument); Name akzeptiert (ein Dokument, das sich nicht lädt)ein Attribut mit dem zweiten Wert; Name abgelehnt (is_last_error), Element weggelassen
xml: of_transformwendet ein XSLT-Stylesheet auf das geladene Dokument anentfernt: XSLT gibt es in der Engine nicht mehr (Chromium entfernt es); transformieren Sie serverseitig oder in PowerScript

Das Rezept: (1) ein of_remove, das auf = 0 (nichts entfernt) prüfte, funktioniert weiter; prüfen Sie < 0 (nichts konnte versucht werden); (2) wenn Sie ein Dokument WÄHREND des Baus lasen (ein of_exists zur Kontrolle, ein of_count zum Nummerieren), schließen Sie zuerst seine Elemente oder zählen Sie selbst; (3) ein Fragment von of_add_xml muss den Namensraum seines Ziels nicht mehr deklarieren: eines, das xmlns='' schrieb, um ihn zu verlassen, kann es weiterhin; (4) prüfen Sie die Rückgabe von of_set_attr / of_add_child mit einem präfigierten Namen und deklarieren Sie das Präfix (oder binden Sie es mit of_register_namespace).

11.32 json: ein Array, das sich schnell aufbaut, Zahlen, die ihre Stellen behalten, ein leerer Text, der sich leer meldet #

Die zweite Prüfung von n_pbt_json entfernt und ändert keine Signatur. Sie fügt die Überladungen decimal und longlong von of_set_number und of_add_number sowie die Leser of_get_decimal und of_get_longlong hinzu. Ein Array mit of_add_* aufzubauen, durchläuft nicht mehr bei jedem Anhängen das ganze Array: 2.000 Zeilen entstehen in Sekundenbruchteilen statt in mehreren Minuten. Zwei Regeln stehen nun in der Dokumentation, unverändert: eine Null-Zeichenkette wird "" geschrieben (für ein JSON-null: of_set_raw(path, "null")), und ein doppelt geschriebener Schlüssel wird bei seinem ERSTEN Vorkommen gelesen.

Was3.04.0
json: of_load eines Textes nur aus Leerraum (Zeilenumbruch, Tabulator)-4, wie ein fehlerhafter Text-5, wie ein leerer Text
json: of_load eines Textes mit vorangestelltem BOM (UTF-8-Datei mit BOM)-40, das BOM wird übersprungen
json: of_load eines Dokuments mit mehr als 512 Verschachtelungsebenen0 — und ein sehr tiefer Text konnte die Anwendung beenden-4, die Anwendung bleibt am Leben
json: of_set_number / of_add_number eines decimal (oder eines Literals wie 690.50)in ein double umgewandelt: etwa fünfzehn Stellen, ein Cent konnte verloren gehenÜberladung decimal: alle Stellen, abschließende Nullen entfernt (690.5); ein longlong hat ebenfalls eine eigene
json: of_get_number eines Exponenten mit führenden Nullen (1E-0000005)0 oder ein riesiger Wertder richtige Wert (0.00001)
alle Komponenten: \u gefolgt von vier nicht hexadezimalen Zeichen in einer gelesenen Zeichenkettedie vier Zeichen verschwandenunverändert behalten, wie eine unbekannte Escape-Sequenz

Das Rezept: (1) wenn Sie of_load(...) = -4 prüften, um eine leere Datei zu erkennen, prüfen Sie < 0; (2) ein an of_set_number übergebener decimal-Betrag wird nun mit allen Stellen geschrieben, ohne Änderung an Ihrem Code; (3) lesen Sie eine ID mit mehr als 15 Stellen mit of_get_longlong, einen Betrag mit of_get_decimal, nicht mehr mit of_get_number.

11.33 crosstab: of_from_datastore, Ablehnungen, die sich melden, der angezeigte Wert beim Doppelklick #

Die zweite Prüfung des Crosstab benennt of_set_data in of_from_datastore um, den Namen von datagrid und scheduler, die einen DataStore auf dieselbe Weise lesen (gleiche Argumente, gleiche Codes). Jedes Hinzufügen, jeder Filter und jedes Format, das ein unbekanntes Feld nennt, gibt nun -5 statt 0 zurück. Die Tabelle zeichnet nur noch die sichtbaren Spalten: ein Kundencode oder ein Tagesdatum in Spalten friert den Bildschirm nicht mehr ein. Neu: is_thousands, CF_ICONS, die Konstanten VALUEFILTER_* und DATE_*.

Was3.04.0
crosstab: aus einem DataStore speisenof_set_data(ds)of_from_datastore(ds), gleiche Codes
crosstab: ein unbekanntes Feld (Tippfehler) an ein Hinzufügen, einen Filter, ein Format, eine Reihenfolge, eine Datumsgruppierung übergeben0, nichts geschieht-5
crosstab: ein Filtertyp, ein Aggregat, ein Datumsteil außerhalb der Liste; eine berechnete Kennzahl in Zeilen; of_set_value_filter an einer Position ohne Kennzahl0; die Position rutschte auf die letzte Kennzahl-5
crosstab: of_set_layout eines Textes, der kein JSON ist; of_remove_calc_field / of_remove_calc_measure eines unbekannten Namens0-5
crosstab: ad_value von ue_cell_double_clickeddas rohe Aggregat (400 unter „80,0 %“), 0 für eine leere Zelleder angezeigte Wert (0.8), NULL für eine leere Zelle; ein leeres Element ist null in den Tupeln
crosstab: dasselbe Feld in Zeilen (oder Spalten, Filter) UND in Wertehing von der Aufrufreihenfolge ab: der Wert verschwand; Entfernen einer Dimension entfernte allesüberall erlaubt; Hinzufügen oder Verschieben einer Dimension behält die Werte, Entfernen entfernt nur den gemeinten Chip
crosstab: ein leeres Element (NULL, leerer Text); ein Text mit Tabulator oder Zeilenumbruch im DataStore„null“ oder eine Zeile ohne Beschriftung; Phantomzeilen, verschobene Spaltenein einziges Element (leer), zuletzt; der Text bleibt in seiner Zeile
crosstab: is_label nach einem neuen of_from_datastore; is_label = ""verloren; ein Chip ohne Textbehalten; "" stellt die Kopfzeile des DataWindow wieder her
crosstab: Strg+C im Demomodusue_copy ausgelöst, Zwischenablage beschriebenwie ein Export abgelehnt, das Raster sagt es
crosstab: of_collapse_all; Elementfilter des Rasters; of_export_xlsx über 16 384 Spalten; Exporte in VALUES_ROWSnur Zeilen; bei jedem Kästchen angewendet; eine unlesbare Datei; die Kennzahlen nebeneinanderZeilen und Spalten; bei OK angewendet (höchstens 10 000 Elemente gelistet); abgelehnt, ue_xlsx_saved sagt warum; wie am Bildschirm

Das Rezept: (1) ersetzen Sie of_set_data durch of_from_datastore; (2) wenn Sie den Rückgabewert von of_add_*_field oder eines Filters ignorierten, prüfen Sie < 0 — ein Tippfehler zeigt sich endlich; (3) prüfen Sie in ue_cell_double_clicked IsNull(ad_value) vor jeder Berechnung und lesen Sie ad_value als den angezeigten Wert (ein Anteil, keine Summe, in einem „%“-Modus).

11.34 Gemeinsamer Sockel: of_count und of_keys_at zählen in long #

of_count lieferte einen integer, und of_keys_at nahm einen integer-Rang — bei allen Komponenten, ihren Handles und den nicht visuellen Objekten, die sie tragen (commandpalette, messagebox, speechout, toaster). Jenseits von 32 767 Elementen lief die Zählung über: Ein Kalender (scheduler), der aus einem DataStore mit 40 000 Zeilen gespeist wird, ließ sich nicht mehr zählen, und seine letzten Zeilen ließen sich nicht durchlaufen. Die vier Signaturen sind jetzt in long: long of_count ( ), long of_count ( string as_keys ), string of_keys_at ( long al_index ), string of_keys_at ( string as_keys, long al_index ).

Das Rezept: Ein Aufruf ändert sich nicht. Eine integer-Variable, die of_count() empfängt, bleibt bis 32 767 richtig: Deklarieren Sie sie als long. Ein Nachkomme, der of_count oder of_keys_at überschrieb, übernimmt die neue Signatur — der Compiler zeigt Ihnen die Zeile.

11.35 shellexplorer: ein Neulesen, das den Zustand behält, jede Zeile für sich #

Die Überprüfung des Shell-Explorers behält seine Ereignisse: of_select, of_expand und of_collapse lösen sie wie ein Klick aus, wie in 3.0. of_refresh und ib_show_files schließen den Baum nicht mehr. Neu: is_file_filter (die gezeigten Dateien), ib_show_hidden (ausgeblendete Elemente, standardmäßig die Explorer-Einstellung), ib_enabled und of_refresh(Pfad), das einen einzigen Zweig neu liest.

Was3.04.0
shellexplorer: of_refresh() oder geändertes ib_show_filesder Baum schloss sich, die Auswahl verschwand ohne Ereignisdie offenen Zweige und die Auswahl kehren zurück, über ihre Pfade gefunden; eine nicht mehr existierende Auswahl löst ue_selected("", "") aus
shellexplorer: of_expand, of_select, of_collapse mit leerem Pfad0-5
shellexplorer: of_expand einer Datei oder eines Ordners ohne Kindernichtsue_path_not_found(…, "expand", "not a branch")
shellexplorer: of_keys_at(Pfad, i)Pfad/Kind, das nichts zurücklesen konnteder Pfad des Kindes, vollständig: Er geht zurück in of_has, of_select, of_expand
shellexplorer: derselbe Ordner auf zwei Ebenen (die Musik des Desktops und die des Benutzerordners)ein Klick, ein Pfeil oder ein Doppelklick auf die eine wirkte auf die anderejede Zeile antwortet für sich
shellexplorer: ausgeblendete Dateien und Ordnernie gezeigtgezeigt nach der Explorer-Einstellung des Arbeitsplatzes oder ib_show_hidden
shellexplorer: ein Zweig auf einer Freigabe, die nicht antwortet„…“ für immer, auch geschlossen und wieder geöffnetue_error „… : timeout“ nach 30 Sekunden; der Zweig wird beim erneuten Öffnen neu angefragt

Das Rezept: (1) ue_selected und ue_expanded werden auch nach einem of_select oder of_expand Ihres Codes ausgelöst, sobald der Ordner erreicht ist (ein noch zu lesender Pfad kommt etwas später): Erledigen Sie Ihre Arbeit im Ereignis, nicht gleich hinter dem Aufruf, oder lesen Sie of_selected_key(), sobald die Auswahl da ist; (2) behandeln Sie in ue_selected as_path = "" (die Auswahl ist verschwunden); (3) prüfen Sie -5 bei leerem Pfad; (4) setzen Sie ib_show_hidden = false, wenn Ihre Benutzer ausgeblendete Elemente nie sehen sollen, gleich was ihr Explorer sagt.

11.36 commandpalette: jedes Objekt berührt nur seine Palette, ein Schließen, das sich immer meldet, die Sprache der Anwendung #

Es gibt immer nur eine Palette auf dem Bildschirm: öffnet ein zweites Palettenobjekt seine eigene, ersetzt sie die erste. Ein Objekt steht jetzt nur noch für seine Palette und sein Kürzel ein. ue_opened und ue_closed werden bei of_open / of_close weiter ausgelöst: Sie melden den Lebenszyklus des Fensters, keine Geste (dieselbe Regel wie bei den Audio- und Videoplayern). Neu: of_insert_command (ein Befehl an gewählter Position), of_anchor_under (die Palette unter einem Steuerelement, in Bildschirmpixeln) und auf dem Handle is_group, is_hint, is_keywords, is_icon.

Was3.04.0
commandpalette: ue_closedohne Argument; gar nichts, wenn die Palette vor dem Erscheinen starb (sofort geschlossen oder ersetzt, Fenster verweigert)ue_closed(string as_reason) folgt jedem of_open, das 0 geliefert hat: "", cancelled, failed oder blocked
commandpalette: of_is_open, of_close, of_reset, das Zerstören eines Objekts, dessen Palette durch die eines anderen ersetzt wurdeantworteten TRUE für die Palette des anderen und schlossen siestehen nur für ihre Palette ein: FALSE, und nichts wird geschlossen
commandpalette: ein Objekt zerstören (oder zurücksetzen), dessen Kürzel ein anderes Palettenobjekt desselben Fensters übernommen hatentfernte das Kürzel des anderen: die Taste antwortete nirgends mehrdas Kürzel des anderen bleibt
commandpalette: of_register_shortcut einer Taste, die der Hook nicht benennt (ctrl+ù, win+k, space ohne Modifikator)0 („gesetzt“), und die Taste tat nie etwas-5; das vorige Kürzel bleibt
commandpalette: of_register_shortcut mit leerem is_shortcut und ohne gesetztes Kürzel02
commandpalette: of_add_command mit einem Schlüssel, der ein Komma enthält0 — und is_recent las ihn als zwei Befehle zurück-5
commandpalette: eine Gruppe, die in mehreren Schritten deklariert wird (File, Edit, dann File)zwei Überschriften „File“nur eine, an der Stelle ihres ersten Auftretens; die Reihenfolge der Befehle bleibt in der Gruppe erhalten
commandpalette: die Suche und Akzentepreferences fand „Préférences“ nichtAkzente zählen nicht
commandpalette: die Sprachedie Palette sprach Englisch, gleich was PBT_SetLanguage sagtedie Sprache der Anwendung; ein von Ihnen gesetztes is_placeholder wird nicht übersetzt
commandpalette: das auf einer Zeile gezeigte Kürzel, AZERTY-Tastatur; AltGr im SuchfeldStrg+A wurde als Strg+Q gelesen; € (AltGr+E) startete den als Strg+Alt+E gezeigten Befehldie Taste wird so gelesen, wie die DLL sie benennt; ein getipptes Zeichen ist nie ein Kürzel
commandpalette: ein ohne ipo_owner (ganze Anwendung) gesetztes Kürzel vor dem Kürzel eines Fensters, auf derselben Tastegewann auch in diesem Fensterdas Kürzel des Fensters geht vor
commandpalette: POSITION_ABSOLUTEein Befehl mit dem Schlüssel x oder y schob die Palette an den Bildschirmrand; bei zwei Bildschirmen ging sie auf den des Fenstersil_x / il_y gelten, auf dem Bildschirm des angeforderten Punkts
commandpalette: inv_pumpinterne Variable, die öffentlich bliebgeschützt: sie gehört nicht zur API, nichts zu lesen oder zu schreiben
commandpalette: ein Befehl, dessen Text __license zitiertdie Palette öffnete sich nicht (-5)öffnet sich: nur ein als Schlüssel geschriebenes reserviertes Wort wird weiterhin abgelehnt

Das Rezept: (1) Löst Ihr Code ue_closed() selbst aus, geben Sie einen Grund mit (""); ein Skript, das es nur empfängt, kompiliert unverändert; (2) Warteten Sie nach of_open auf ue_opened, behandeln Sie auch ue_closed("cancelled"), "failed", "blocked"; (3) prüfen Sie 2 und -5 bei der Rückgabe von of_register_shortcut; (4) benennen Sie einen Befehlsschlüssel um, der ein Komma enthält.

11.37 radialmenu: ein bloßer Schlüssel, der richtig zielt, ein offenes Rad, das der Anwendung folgt, eine lesbare Beschriftung #

Das Rad wird einmal gezeichnet, und die Anwendung läuft weiter, solange es angezeigt wird: Was Sie inzwischen ändern, zählt jetzt. Die Nabe schreibt nichts mehr aus (seit 3.0 hatte sie es nicht mehr getan, entgegen der Dokumentation): Der angezeigte Zweig zeigt seine vollständige Beschriftung.

Was3.04.0
radialmenu: of_item mit einem bloßen Schlüssel (of_item("csv"))änderte Beschriftung und Zustand des einzigen Zweigs, der ihn trug, aber seine Farben wurden nicht gezeichnet, und das Handle überlebte das Entfernen des Elternzweigswird in die vollständige Adresse (import/csv) aufgelöst: dasselbe Handle, Farben eingeschlossen, mit dem Elternzweig freigegeben. Mehrdeutig oder unbekannt: Das Handle ändert nichts
radialmenu: ein Handle auf eine noch nicht hinzugefügte Adresseeine darüber gesetzte Farbe färbte den später an dieser Adresse hinzugefügten Zweig, selbst nach of_clearschreibt nichts; of_clear vergisst alle Farben
radialmenu: of_showlieferte nichtsliefert ein long: 0 oder -2, wenn die Komponente nicht erzeugt ist
radialmenu: of_show(-1, -1)öffnete das Rad am Cursoröffnet es am Punkt (-1, -1), wie jede negative Koordinate; am Cursor ist of_show()
radialmenu: ein Zweig, der entfernt, geleert, ausgegraut oder ausgeblendet wird, während das Rad offen istließ sich noch wählen: ue_item_selected für einen verschwundenen Zweiglässt sich nicht mehr wählen: ue_dismissed; of_clear, of_remove_item und of_reset schließen das offene Rad
radialmenu: Rechtsklick an anderer Stelle, während das Rad offen istdas neue Rad ersetzte das alte ohne ue_dismissedue_dismissed für das alte, dann das neue Rad
radialmenu: lange oder leere Beschriftungnach zwei Zeilen abgeschnitten und nirgends lesbar; leer ein Segment ohne Inhaltder angezeigte Zweig zeigt sie vollständig; leer wird der Schlüssel angezeigt
radialmenu: Leserichtung von rechts nach linksder Kranz drehte sich im Uhrzeigersinn, ← ging zurückder Kranz dreht sich andersherum, ← und → tauschen die Rollen

Das Rezept: (1) of_show liefert ein long: ein bloßer Aufruf kompiliert unverändert; (2) ersetzen Sie of_show(-1, -1) durch of_show(); (3) machten Sie in ue_dismissed rückgängig, was Sie beim Öffnen gesetzt hatten, ist nichts zu tun: Es kommt jetzt auch, wenn ein Rad ein anderes ersetzt; (4) ein Handle über einen Schlüssel, den zwei Zweige tragen, ändert nichts mehr: Geben Sie die Adresse an.

11.38 toaster: Events, die sagen, welcher Toast, Ablehnungen, die sich melden, ein Toast, der wartet, bis er gesehen wird #

Die drei Toast-Events ändern ihre Signatur, of_add_button liefert einen Code, und ein Toast geht nicht mehr verloren, wenn die Anwendung minimiert ist.

Was3.04.0
toaster: ue_toast_clicked, ue_toast_action, ue_toast_dismissed(string as_key …): as_key trug den Bezeichner des Toasts, als Text(long al_id, string as_key …): al_id ist die von of_show gelieferte Zahl, as_key der is_key des Toasts (leer ohne Schlüssel)
toaster: of_add_buttonlieferte die Anzahl der Schaltflächen; ein bereits vergebener Schlüssel, ein leerer Schlüssel und eine vierte Schaltfläche gingen wortlos durchliefert 0; -5 ohne Hinzufügen bei leerem, bereits vergebenem Schlüssel, einem mit / oder senkrechtem Strich, oder einer vierten Schaltfläche. Die Anzahl liest of_count()
toaster: of_show mit einer Einstellung außerhalb des Bereichszeigte trotzdem an: eine unbekannte Art als Information, eine unbekannte Ecke oben linksliefert -5 und zeigt nichts: is_kind, is_position oder is_sound außerhalb ihrer Konstanten, il_max_visible außerhalb 0 bis 20, il_timeout unter TIMEOUT_AUTO
toaster: derselbe is_key von zwei Toastern gezeigtder zweite ersetzte den Toast des ersten und nahm ihm seine Events; eine Aktualisierung behielt die ursprüngliche Eckejeder Toaster hat seinen eigenen; eine Aktualisierung übernimmt auch Ecke, Bildschirmverankerung und Ankerfenster
toaster: der Klangein Systemklang bei jedem Toast, Information und Erfolg eingeschlossen; keiner für einen Toast aus der Warteschlangeis_sound: SOUND_AUTO (Standard) = nur Fehler und Warnung, SOUND_ALWAYS, SOUND_NEVER; gespielt, wenn der Toast angefordert wird, auch wenn er auf Platz wartet
toaster: am Bildschirm verankerte Toasts aus zwei Fenstern oder ohne ipo_ownerlandeten genau übereinander; die Obergrenze zählte je Fensterein Stapel je Monitor und Ecke, und il_max_visible zählt je Monitor
toaster: ein Toast an einem minimierten Fensterlandete bei -32 000 px und erlosch ungesehenwartet: Er wird nicht angezeigt, und sein Countdown läuft erst, wenn das Fenster zurückkommt
toaster: ein Toast, der ankommt, während der Stapel überfahren wirdzählte herunter und konnte während des Lesens verschwindenstartet angehalten, wie die anderen
toaster: PBT_SetLanguage, PBT_SetDefaultTheme, PBT_SetDefaultThemeAccent, PBT_SetDefaultFont, PBT_SetFlowDirection, während ein Toast angezeigt wirderreichten ihn nicht; die Schriftgröße blieb 11 ptfolgen sofort, Schriftgröße eingeschlossen
toaster: der Text eines Toastsließ sich nicht markieren; das Ziehen der Bildlaufleiste eines langen Textes konnte antworten und schließenlässt sich markieren und kopieren (Rechtsklick, Kopieren); Markierung und Bildlaufleiste schließen den Toast nicht mehr
toaster: il_button_countöffentliche Variableprivat: lesen Sie die Anzahl der Schaltflächen mit of_count()
toaster: ein Toast, dessen Text __license zitiertwurde nicht angezeigtwird angezeigt: nur ein als Schlüssel geschriebenes reserviertes Wort wird weiterhin abgelehnt
toaster: of_close eines angezeigten Toastskein Ereignisue_toast_dismissed, wie sein Kreuz; ein noch wartender, nie gesehener Toast löst nichts aus

Das Rezept: (1) Fügen Sie long al_id als erstes Argument Ihrer ue_toast_clicked, ue_toast_action und ue_toast_dismissed hinzu und ersetzen Sie Long(as_key) durch al_id; as_key ist jetzt der Schlüssel des Toasts; (2) wenn Sie die Rückgabe von of_add_button als Anzahl der Schaltflächen gelesen haben, lesen Sie of_count(); (3) um einen Klang bei Information oder Erfolg zu behalten, setzen Sie is_sound = SOUND_ALWAYS.

11.39 messagebox: ein leeres Pflichtfeld wird nie bestätigt, Auswahlen mit eindeutigen Schlüsseln #

Fünf Verhaltensweisen ändern sich; keine Signatur.

Was3.04.0
messagebox: ib_input_required und eine Standardschaltfläche mit Countdown (of_add_button_timed)der automatische Klick bestätigte das Dialogfeld bei leerem Feld (of_show lieferte die Schaltfläche, of_input_value eine leere Zeichenkette)der Countdown läuft ab, ohne zu klicken; die Schaltfläche wartet, bis das Feld ausgefüllt ist
messagebox: Esc oder Alt+F4 bei einer Schaltfläche, die zugleich Standard und Abbrechen ist, Pflichtfeld leerlieferte 1, wie ein Klick auf diese Schaltflächeliefert 0: ohne Auswahl geschlossen
messagebox: of_add_choiceakzeptierte einen bereits vergebenen oder / bzw. `` enthaltenden Schlüsselliefert -5 und fügt nichts hinzu
messagebox: of_choose ohne jede Auswahlzeigte ein Dialogfeld mit einer einzigen Abbrechen-Schaltflächezeigt nichts: leere Zeichenkette, und of_get_last_error meldet „no choice to show“
messagebox: die Schaltflächen der fertigen Dialogfelder (of_info, of_confirm, of_yes_no, of_prompt…), wenn die Anwendung keine Sprache gesetzt hat„Ok“„OK“, das Wort des englischen Katalogs („Cancel“, „Yes“, „No“ für die anderen)

Das Rezept: (1) Ein Pflichtfeld wird jetzt von Hand bestätigt — wenn Sie sich auf den automatischen Klick verlassen haben, geben Sie dem Feld einen Standardwert (is_input_value); (2) geben Sie jeder Auswahl einen eindeutigen Schlüssel ohne / oder |, und prüfen Sie auf -5, wenn Ihre Schlüssel aus Daten stammen.

11.40 Gemeinsamer Sockel: die standardmäßig angegebene Sprache, die Dezimalzahlen jedes Rechners #

Zwei Korrekturen des gemeinsamen Sockels, gültig für alle Komponenten; keine Signatur ändert sich.

Was3.04.0
die Sprache, die eine Komponente angibt (<html lang>)Französisch, solange die Anwendung keine Sprache wählteEnglisch, die Standardsprache der Komponenten; die von der Anwendung gewählte Sprache ersetzt sie immer
eine Dezimalzahl, die einer Eigenschaft (id_*) übergeben wirdnur ein Dezimalkomma wurde umgewandelt: auf einem Rechner mit einem anderen Dezimaltrennzeichen kam der Wert nicht andas Dezimaltrennzeichen des Rechners wird umgewandelt, welches es auch ist

Das Rezept: nichts zu ändern. Eine Anwendung, die ihre Sprache wählt, sieht sie weiterhin angewendet; ein Bildschirmleser, der eine Komponente einer englischen Anwendung auf Französisch vorlas, liest sie jetzt auf Englisch.

11.41 Tastatur, Fokus und Platz: was die Tests der 4.0 richtiggestellt haben #

Verhaltensweisen, die beim Durchspielen der Komponenten in einer echten Anwendung aufgefallen sind; keine Signatur ändert sich, eine Methode kommt hinzu.

Was3.04.0
Enter auf einem fokussierten PowerBuilder-CommandButtonnichts (die Taste ging verloren)die Schaltfläche wird gedrückt (clicked), wie in einem Windows-Dialogfeld; die Standardschaltfläche einer Leiste nicht
Eine deaktivierte Komponente (ib_enabled = false)Tab blieb darauf stehensie verlässt die Tab-Reihenfolge; wieder aktiviert (oder of_reset), nimmt sie ihren Platz wieder ein
Ein Strg-Kürzel auf einem Zeichen ohne eigene Taste (AZERTY: - auf der Taste 6, + mit Umschalt)Strg+- fand sein Kürzel nienach der Taste das Zeichen des aktiven Layouts: Strg+-, Strg++, Strg+,, Strg+. lösen auf jeder Tastatur aus
Tippen in einem offenen Menü (Suche, unterstrichene Buchstaben)eine Taste der oberen Reihe lieferte ihre Ziffer (AZERTY: - kam als 6 an)das Zeichen des Layouts; ein unterstrichenes &1 reagiert weiterhin auf die Taste 1
Der Kalender der Datumsauswahl (toolbar)nur mit der Mausauch mit der Tastatur: Pfeile (Tag, Woche), Bild auf/ab (Monat), Pos1/Ende, Enter wählt, Esc schließt
Alt mit zwei Menübändern (oder Menüleisten) im selben Fenster, ohne Unterfenster dazwischendas zuerst erzeugtedas dem Fokus auf dem Bildschirm nächstgelegene
breadcrumb in einer sehr schmalen Leistedas erste Segment gab nie nach: der aktuelle Ort schrumpfte auf nichts, der Pfad lief übernach der Mitte gibt der aktuelle Ort bis auf einen Buchstaben und „…“ nach, dann das erste Segment; nichts verlässt die Leiste
menubar: eine Auswahl mit der Maus im Aufklappmenüder Fokus blieb auf der Leiste (Bearbeiten > Einfügen fügte nirgends ein)der Fokus kehrt zum Steuerelement zurück, das ihn hatte
ribbon: in ein Kombinationsfeld tippen und dann in seiner Liste wählenzwei ue_combo_changed: der getippte Text, dann die Auswahleines, die Auswahl
toolbar: is_text = "" in ue_text_changed gesetzt, der Fokus im Feldder alte Text kam zurück, mit einem zweiten Ereignisdas Feld bleibt leer
Der Fokus, der nach einem Fenster der Bibliothek (Befehlspalette) an eine Komponente zurückgegeben wirddie Seite, ohne Element: der Cursor des Code-Editors war verschwundendas Element, das ihn hatte
Eine Beschriftung mit unterstrichenem Buchstaben (&File) von rechts nach linksBuchstaben durcheinander („ileF“)das Wort liest sich in der richtigen Reihenfolge
n_pbt_utils.of_dir_folders(as_dir, ref as_names[])DirList in eine ListBox: 4,5 s für 30 000 Ordner, und das aktuelle Verzeichnis der Anwendung änderte sichneu: die Unterordner, wie der Explorer sie zeigt, sortiert, in einem Durchgang; -4 unlesbar, -5 leerer Pfad
breadcrumb: of_add_children(as_keys, as_child_keys[], as_texts[])ein Zweig nach dem anderen (of_add_child): 30 000 Unterordner öffneten das Menü in über 20 sneu: eine ganze Ebene in einem Aufruf

Das Rezept: nichts zu ändern. Eine Anwendung, deren fokussierter CommandButton Enter ignorieren sollte, deaktiviert ihn (Enabled = false) oder nimmt ihm den Fokus; für einen umfangreichen Ordner ersetzen Sie die Schleife über of_add_child durch ein einziges of_add_children.

11.42 Daten und Tastatur: was die zweite Testreihe der 4.0 richtiggestellt hat #

Verhaltensweisen, die beim Durchspielen der Datenkomponenten in einer echten Anwendung aufgefallen sind; keine Signatur ändert sich.

Was3.04.0
Enter oder Esc in einer Komponente gedrückt, die sie nicht nimmtverloren: der PowerBuilder-CommandButton Default oder Cancel löste nicht ausdie Taste geht an das PowerBuilder-Fenster zurück, wie Kapitel 6.4 verspricht: Esc drückt die Schaltfläche Cancel, Enter die Schaltfläche Default
PBT_SetLanguage, sofort gefolgt von einem Befehl an die Komponenteder Text eines durch diesen Befehl ausgelösten Ereignisses (ue_error von xmltree) blieb in der alten Sprachedie Sprache gilt ab dem nächsten Befehl
jsontree, xmltree: der der Komponente gegebene Fokus (of_focus_webview, die Tab-Taste)blieb auf der Seite: Pfeiltasten und Enter gingen ins Leereder Baum nimmt ihn; F3 und Umschalt+F3 gehen zum nächsten oder vorherigen Treffer der Suche
xmltree: ein NACH dem letzten Zeichen seiner Zeile gemeldeter Fehlerkeine Spalte unterstrichendas Zeilenende ist markiert (↵)
codeeditor mit Zeilenumbruch (ib_wrap)der Balken il_doc_line konnte eine Reihe zu hoch sitzen, am Ende der vorherigen Zeiledie Balken decken alle Reihen ihrer Zeile ab und folgen der Größenänderung
codeeditor: „Alle ersetzen“ und of_replace_all auf einem langen Textmehrere Sekunden, wenn der Fokus im Editor war; darüber hinaus konnte of_replace_all 0 liefernsofort, und die Zahl der Ersetzungen wird geliefert; Strg+H mit leerer Suche setzt den Cursor in „Suchen“
crosstab: „Zu Spalten hinzufügen“ (oder Zeilen, Filtern) aus dem Menü eines Chips, per Tastaturder Fokus ging verloren; nur Enter öffnete das Menü eines Chipsder Fokus folgt dem Chip in seine neue Zone; Umschalt+F10 und die Menütaste öffnen sein Menü ebenfalls
json: Tausende of_add_* hintereinanderfast eine Sekunde für 2 000 Zeileneinige zehn Millisekunden; das Dokument ist dasselbe

Das Rezept: nichts zu ändern. Eine Anwendung, die in einer Komponente gedrücktes Esc selbst behandelte (ein mit of_register_shortcut registriertes Kürzel), behält es: ein Kürzel kommt vor dem Fenster.

11.43 Inhalte und Medien: was die dritte Testreihe der 4.0 richtiggestellt hat #

Verhaltensweisen, die beim Durchspielen der Inhalts- und Medienkomponenten in einer echten Anwendung aufgefallen sind; keine Signatur ändert sich.

Was3.04.0
speechout: of_speak, dann of_pause im selben Skriptue_started und das erste ue_sentence kamen vor ue_paused: die Stimme wurde als gestartet gemeldetue_started wird ausgelöst, wenn die Stimme wirklich zu sprechen beginnt; eine vorher gesetzte Pause hält sie: bis of_resume wird nichts gesprochen oder gemeldet
speechout: eine Sprache ohne genaue Stimme auf dem Rechner (fr-CA, wo es nur fr-FR gibt)ue_started meldete die angeforderte Sprache (fr-CA)ue_started meldet die wirklich gelesene Sprache (fr-FR), nach ue_voice_fallback
webbrowser: Tab nach dem letzten Steuerelement der Adressleisteder Fokus verließ die Komponente zum PowerBuilder-Fensterder Fokus geht in die Website, wie in einem Browser; Umschalt+Tab aus der Website führt zur Leiste zurück
webbrowser: ib_private = true gesetzt, während bereits privat navigiert wirdwirkungslos: die Website fand wieder, was sie in der privaten Sitzung behalten hattejedes Mal eine neue, leere private Sitzung
video im Vollbild: ein modales Fenster der Anwendung (eine MessageBox in ue_ended)unter dem Film verborgen, der ihr die Tastatur wieder wegnahm: die Anwendung schien eingefrorender Film gibt nach: das Fenster kommt nach vorn und erhält die Tastatur; nach dem Schließen übernimmt der Film wieder den Bildschirm, und Esc verlässt ihn
tilesbox: eine Pfeiltaste am Rand, neben einer kleineren KachelPfeil nach oben auf einer großen Kachel der ersten Reihe sprang seitlich zur kleinen Nachbarinnur eine Kachel vollständig jenseits des Rands zählt: am Rand bleibt der Fokus, wo er ist
dockcontainer: il_back_color / il_text_color eines gestapelten Bereichsverloren, sobald sein Reiter aktiv war (er nahm den Akzent des Themas)der aktive Reiter behält die Farben des Bereichs, wie seine Lasche auf der Leiste
progressbar: id_value bei jedem Durchlauf einer langen Schleife gesetztetwa 2,5 s für 20 000 Zeilendeutlich unter einer Sekunde; der Balken bewegt sich weiterhin während der Schleife

Das Rezept: nichts zu ändern. Eine Anwendung, die sich auf ue_started verließ, um zu wissen, dass of_speak angenommen wurde, liest stattdessen seinen Rückgabewert (0); eine, die die Sprache von ue_started mit is_lang vergleicht, erfährt den Ersatz nun auch aus diesem Unterschied, zusätzlich zu ue_voice_fallback.

11.44 Daten: eine Zelle lesen, feiner sortieren und suchen (json, jsontree, xmltree, crosstab) #

Diese Ergänzungen der 4.0 entfernen keine Signatur. Zwei ändern, was Sie sehen, ohne dass Sie etwas geschrieben haben: Strg+C der Kreuztabelle kopiert nun die Überschriften mit, und ue_cell_double_clicked erhält ein Argument mehr.

Was3.04.0
crosstab: ue_cell_double_clicked( string as_row_tuple_json, string as_col_tuple_json, double ad_value )( string as_row_tuple_json, string as_col_tuple_json, integer ai_measure, double ad_value ): ai_measure ist die Position des doppelt angeklickten Werts in Werte, ab 1; mit den beiden Tupeln ist es die Adresse, die of_get_cell_value zurückliest
crosstab: Strg+C auf Zellennur die Zahlendie Überschriften dazu: die Namen der Spalten in einer ersten Zeile, das Element jeder Zeile (sein Pfad, „North / Boston“) in einer ersten Spalte; ib_copy_headers = false liefert nur die Zahlen
crosstab: of_remove_field, of_get_cell_value—neu: ein Feld aus allen Bereichen nehmen, ohne das Layout neu aufzubauen; den Wert einer Zelle über ihre Tupel und die Position ihrer Kennzahl lesen
json: of_get_array, of_pretty (long al_indent)—neu: alle Elemente eines Arrays in einem Aufruf; eine Einrückung in Leerzeichen, oder das Dokument kompakt in einer Zeile mit 0
jsontree, xmltree: die Sucheimmer ohne Groß-/Kleinschreibung, und innerhalb von Wörternib_find_match_case und ib_find_whole_word, wie beim codeeditor, mit den Schaltern Aa und ab des Suchfelds; standardmäßig bleibt die Suche die der 3.0

Das Rezept: ein Skript von ue_cell_double_clicked muss nichts ändern, das Argument kommt vor dem Wert hinzu. Eine Anwendung, die das Ergebnis von Strg+C in eine Verarbeitung einfügt, die nur Zahlen erwartet, setzt ib_copy_headers = false.

11.45 Navigation und Container: Registerkarten per Tastatur, Bereiche per Doppelklick (tab, dockcontainer, ribbon, stepbar, listbar) #

Diese Ergänzungen der 4.0 entfernen keine Signatur. Drei Gesten ändern, was ein Benutzer sieht, ohne dass Sie etwas geschrieben haben: der Mittelklick und Strg+Tab auf einem tab, und der Doppelklick auf einen Bereich eines dockcontainer oder auf die Titelleiste seines schwebenden Fensters.

Was3.04.0
tab: Mittelklick auf eine Registerkartenichtsschließt eine schließbare Registerkarte auf demselben Weg wie ihr Kreuz: ue_tab_closing, wenn ib_veto_close = true, dann ue_tab_closed; eine nicht schließbare oder deaktivierte Registerkarte tut nichts
tab: Strg+Tab, Strg+Umschalt+Tab, Strg+Bild ab / Bild aufnichtsdie nächste oder vorherige Registerkarte, die aktiv werden kann, im Kreis, ob die Tastatur im Band oder in einer gehosteten Seite ist (ein PowerBuilder-Steuerelement, eine andere Komponente); es ist eine Geste: ue_selection_changing, wenn ib_veto_selection = true, dann ue_selection_changed. Aus einem Steuerelement außerhalb des tab bleibt die Taste beim Fenster
dockcontainer: Doppelklick auf eine Kopfzeile oder eine Registerkarte; auf die Titelleiste eines schwebenden Fenstersnichts; das schwebende Fenster wurde maximiertkoppelt den Bereich in ein schwebendes Fenster ab (ue_panel_floated); auf dessen Titelleiste dockt er ihn an seinem Platz wieder an (ue_panel_docked), wie sein Kreuz
dockcontainer: Rechtsklick auf eine Kopfzeile oder eine Registerkartenichtsein Menü Abkoppeln, Schließen, Andere schließen (die anderen schließbaren Bereiche derselben Gruppe); jedes Schließen stellt seine eigene Frage
dockcontainer: ib_veto_close, ue_panel_closing, of_close_panel, n_pbt_dock_panel.ib_closable—neu: die Frage vor dem Schließen eines Bereichs (optional, standardmäßig false), das Schließen per Code (-4, wenn Sie ablehnen, -5 für den Hauptbereich oder einen nicht schließbaren Bereich) und die Schließbarkeit, live geändert
ribbon: n_pbt_ribbon_item.is_image, id_min, id_max, id_stepbeim Hinzufügen festgelegtdas Bild eines Steuerelements und der Bereich eines Drehfelds ändern sich live und lassen sich zurücklesen; der Wert eines Drehfelds wird ohne ue_value_changed in seinen neuen Bereich zurückgeholt, wie id_value
stepbar: STATE_WARNING, STATE_SKIPPED, NAV_VISITED—neu: ein mit Warnung durchlaufener Schritt (bernsteinfarbener Punkt), ein übersprungener Schritt (gestrichelter Ring) und ein Modus, in dem jeder bereits erreichte Schritt anklickbar bleibt, nach einem Zurückgehen auch vorwärts
listbar: n_pbt_listbar_section.ib_pinned—neu: ein unten an der Leiste angehefteter Abschnitt (Einstellungen, Hilfe), der beim Scrollen der Leiste sichtbar bleibt, auch in der Schiene; die gespeicherte Anordnung behält die Reihenfolge der Abschnitte

Das Rezept: nichts zu ändern. In einer Seite eines tab wechselt Strg+Tab jetzt die Registerkarte, auch wenn der Fokus in einem Steuerelement der Seite ist, wie in einem Windows-Eigenschaftendialog. Um ein schwebendes Fenster des dockcontainer zu maximieren, bleibt seine Schaltfläche Maximieren.

11.46 Menüs: der Chevron der Menüleiste, eine Dropdown-Liste in der Symbolleiste, zehntausend Befehle (menubar, toolbar, commandpalette) #

Diese Ergänzungen der 4.0 entfernen keine Signatur. Ein Standardverhalten ändert sich: Eine zu schmale Menüleiste bricht nicht mehr um, sie klappt ihre letzten Titel in einen Chevron ein. Und of_open einer Befehlspalette verweigert das Öffnen ohne ipo_owner oder ipo_receiver nicht mehr.

Was3.04.0
menubar: eine für ihre Titel zu schmale Leistebrach um: ihre Höhe folgte den Zeilen, ue_auto_height bei jeder Breitenänderungbleibt auf einer Zeile: Die Titel, die nicht passen, wandern vom Ende her in das Dropdown eines Chevrons (ihre Einträge als Kaskaden, Alt + ihr Buchstabe öffnet sie vom Chevron aus, die Pfeiltasten halten darauf wie auf einem Titel, links bei RTL); die Höhe ändert sich nicht mehr. ib_wrap = true stellt das frühere Verhalten wieder her
menubar: ib_track_hover, ue_item_hover, of_add_header, n_pbt_menubar_menu.is_align—neu: der überfahrene Eintrag eines Dropdowns, für den Hilfetext einer Statusleiste (optional, standardmäßig false; eine leere Adresse beim Schließen), Abschnittsüberschriften in einem Dropdown und ein Menü am Ende der Leiste (ALIGN_END, Hilfe)
toolbar: of_add_combo, of_add_combo_item, of_remove_combo_item, of_clear_combo, ue_combo_changed, n_pbt_toolbar_item.ib_editable—neu: eine Dropdown-Liste in der Leiste, bearbeitbar oder nicht, die in den Chevron eingeklappt funktionsfähig bleibt; ihr Event hat den Namen und die Bedeutung desjenigen des Menübands
commandpalette: zwei Paletten auf demselben ipo_ownerteilten ihre Ereigniswarteschlange (eine konnte das ue_closed der anderen erhalten), und die zweite übernahm das Kürzel der erstenjede ihre eigenen Events und ihr eigenes Kürzel; dasselbe Kürzel, von der zweiten registriert, geht an diese (1). of_open und of_register_shortcut liefern ohne ipo_owner oder ipo_receiver nicht mehr -5: die Events kommen immer an
commandpalette: Tausende von Befehlenjede Zeile gezeichnet: Öffnen und Tippen wurden langsamernur die sichtbaren Zeilen werden gezeichnet: 10.000 Befehle öffnen und filtern sich ohne Wartezeit
Tastenkürzel der ganzen Bibliothek: AltGr + eine Taste, die ein Zeichen schreibt (das Euro einer französischen Tastatur)löste das Strg+Alt-Kürzel dieser Taste aus, auch in einem PowerBuilder-Felddas Zeichen wird getippt, kein Kürzel wird ausgelöst; AltGr allein übergibt die Tastatur nicht mehr an eine Menüleiste oder ein Menüband

Das Rezept: Eine Menüleiste, deren veränderliche Höhe gewollt war, setzt ib_wrap = true; eine Anwendung, die ihre Steuerelemente bei jeder Größenänderung in ue_auto_height neu anordnete, hat nach dem ersten Mal nichts mehr zu tun. Ein Anwendungskürzel auf Strg+Alt + einem Buchstaben, den die Tastatur des Benutzers mit AltGr schreibt, wird beim Tippen nicht mehr ausgelöst: Wählen Sie eine andere Taste.

11.47 Inhalt und Medien: ein Protokoll Zeile für Zeile, die tatsächliche Größe eines Bildes, ein Film, der wartet (statictext, picture, video) #

Diese Ergänzungen der 4.0 entfernen keine Signatur und ändern keinen Standardwert. Zwei Verhaltensweisen werden genauer: Der Zoom eines Bildes darf seine Obergrenze überschreiten, um die tatsächliche Größe zu erreichen, und ein Film einer URL, der ohne Netzwerk abgespielt wird, sagt es.

Was3.04.0
statictext: of_append_text, ib_follow_end—neu: ein Protokoll, das Zeile für Zeile geschrieben wird — nur die hinzugefügte Zeile geht an die Komponente — und, als Option, die Ansicht, die unten bleibt, solange der Leser nicht nach oben scrollt
statictext: ib_auto_width, ue_auto_width—neu: das Userobject übernimmt die Breite seines Textes (optional, standardmäßig false), wie ib_auto_height es für die Höhe tut
picture: id_max_zoom, die Taste 1der Zoom hielt bei der 8.0-fachen Einpassung an, was auch geschah: ein großer, klein angezeigter Scan war nie Pixel für Pixel lesbardie Obergrenze ist einstellbar (id_max_zoom, standardmäßig 8.0); die Taste 1 zeigt die tatsächliche Größe, und die Obergrenze steigt bis dorthin, wenn diese mehr verlangt
video: ue_buffering, of_is_bufferingein Film, der auf seine Daten wartete, blieb wortlos stehenein Ring in der Akzentfarbe des Themes dreht sich auf dem Bild, und ue_buffering(true) dann ue_buffering(false) rahmen das Warten ein
video: ein Film einer URL, während der Arbeitsplatz kein Netzwerk hat„diese Datei ist nicht auffindbar oder nicht abspielbar“, ue_failed mit REASON_UNSUPPORTED„keine Netzwerkverbindung“ auf dem Bild, ue_failed mit REASON_NETWORK

Das Rezept: nichts zu ändern. Ein Protokoll, das is_text bei jeder Zeile neu schrieb, wechselt zu of_append_text; Code, der REASON_UNSUPPORTED für einen Film einer URL ohne Netzwerk prüfte, prüft REASON_NETWORK.

11.48 Review vom 03.10.2026: eine wiederhergestellte Anordnung wird gemeldet, ein Export in einen relativen Pfad landet am richtigen Ort (toolbar, crosstab) #

Keine Signatur ändert sich. Zwei Verhaltensweisen richten sich nach der Regel der Bibliothek: Jede Änderung der Anordnung wird gemeldet, und ein relativer Schreibpfad wird wie bei den anderen Exporten aufgelöst.

Was3.04.0
toolbar: of_set_layoutkein Eventlöst ue_layout_changed aus, wie der dockcontainer und das datagrid: Jede Änderung der Anordnung wird gemeldet, ob sie vom Benutzer oder von Ihrem Code kommt
crosstab: of_export_csv, of_export_xlsx in einen relativen Pfadin den aktuellen Ordner des Augenblicks geschrieben — den ein DirList oder ein Dateidialog verschoben haben konnte; ue_csv_saved / ue_xlsx_saved lieferten den Pfad wie übergebenin den Ordner geschrieben, in dem die Anwendung gestartet wurde, wie die anderen nativen Exporte; das Event liefert den vollständigen Pfad; ein Pfad, der vom aktuellen Ordner eines Laufwerks abhängt (\x, C:x), wird abgelehnt

Das Rezept: Eine Anwendung, die die Anordnung in ue_layout_changed speichert, speichert nach of_set_layout denselben Wert erneut — folgenlos. Ein Export, der sich auf den aktuellen Ordner des Augenblicks verließ, gibt einen vollständigen Pfad an.


← Von 2.0 auf 3.0 migrieren · Inhalt · Versionshinweise →