PBToolboxAI v5 ← Site

12. Von 4.0 auf 5.0 migrieren #

← Von 3.0 auf 4.0 migrieren · Inhalt · Versionshinweise →


5.0 ändert keine Signatur der siebenunddreißig Komponenten aus 4.0, auch kein Event — außer der Schaltflächenleiste (buttonbar, 12.7) und dem Event ue_link_clicked des Markdown-Viewers (markdownview), das ein zweites Argument erhält, as_kind (12.5). Drei Komponenten wechseln ihre Wörter. Der Fortschrittsbalken (progressbar) übernimmt die der Anzeigen — ib_label, il_color und is_label_format entfallen zugunsten von ib_show_value, il_value_color, is_format und is_unit (12.1). Das kartesische Diagramm (chartcartesian) schreibt seine Zahlen über is_format, wie die Anzeigen und das Kreisdiagramm: of_set_value_format und of_clear_value_format entfallen, und ii_point_count einer Reihe wird zu il_point_count (12.4). Die Kreuztabelle (crosstab) geht denselben Weg: of_set_value_format und of_clear_value_format entfallen zugunsten von is_format — auf dem Feld oder über of_value auf einem einzelnen Wert — und von ib_negative_red (12.8). Der Compiler zeigt Ihnen jede Zeile, die anzupassen ist. Die Seitenleiste (listbar) ändert ein Ereignis: ue_item_rclicked erhält zusätzlich den Bildschirmpunkt des Klicks, al_x und al_y (12.9). Das Kachel-Panel (tilesbox) benennt ein Ereignis um: ue_tile_context(as_keys) wird zu ue_tile_rclicked(as_keys, al_x, al_y), und die Position von of_move_tile und of_insert_tile wird zu long al_position (12.12). Das radiale Menü (radialmenu) verliert vier Tooltip-Eigenschaften, die es nie angezeigt hat — is_tooltip, is_super_tooltip_title, is_super_tooltip_text und is_super_tooltip_image (12.5). Der Kalender (scheduler) ändert drei Gesten-Events: ue_appointment_changing erhält as_kind, ue_appointment_moved und ue_appointment_resized erhalten die bisherigen Werte (12.10). Der Shell-Explorer (shellexplorer) ändert ein Ereignis: ue_error erhält zusätzlich den Pfad und einen konstanten Grund, as_path und as_reason (12.11). Der Rich-Text-Block (statictext) ändert ein Ereignis: ue_hyperlink erhält zusätzlich ab_opened, ob sich der Link wirklich geöffnet hat (12.5). Die Registerkarte (tab) ändert ein Ereignis: ue_tab_rclicked erhält zusätzlich den Bildschirmpunkt des Klicks, al_x und al_y (12.13). Der Soundplayer (soundplayer) ändert drei Ereignisse: ue_started, ue_ended und ue_failed erhalten zusätzlich die Nummer des Tons, al_sound (12.14). Der Toaster (toaster) ändert ein Ereignis: ue_toast_dismissed erhält zusätzlich den Grund des Schließens, as_reason (12.15). Der Webbrowser (webbrowser): of_go_back, of_go_forward und of_stop geben einen long zurück, und unter ib_veto_navigation wird eine vom Benutzer getippte Adresse bei ue_navigating erfragt (12.17). Die Symbolleiste (toolbar) ändert ein Ereignis: ue_item_rclicked erhält zusätzlich den Bildschirmpunkt des Klicks, al_x und al_y (12.18). Der Videoplayer (video) ändert eine Signatur: of_stop wird eine Funktion, die einen long zurückgibt (12.16) — ein als Anweisung geschriebener Aufruf kompiliert weiterhin. Drei Komponenten ändern ein Rechtsklick-Ereignis eines Elements, das zusätzlich seinen Bildschirmpunkt al_x, al_y erhält: die Schaltflächenleiste (ue_button_rclicked), der Brotkrumenpfad (breadcrumb, ue_item_rclicked) und das kartesische Diagramm (ue_point_rclicked); die Statusleiste (statusbar) liefert diesen Punkt wie die anderen, nicht mehr mit der Skalierung des Bildschirms multipliziert (12.19). Die Basis (12.20): Der Grund für das Scheitern einer nicht visuellen Komponente wird über of_get_last_error() gelesen — die Eigenschaft is_last_error verschwindet aus crypto, restclient, soundplayer, speechout, xml, u_pbt_regex und u_pbt_zip —, und of_stop, of_close und of_reset der nicht visuellen Komponenten liefern einen long.

Der Rest verlangt nichts von Ihrem Code: Das Datenraster (datagrid) und das Menüband (ribbon) erhalten numerische Eingabemasken, und der Editor einer numerischen Spalte des Rasters öffnet sich jetzt mit dem Text der Maske (12.2, 12.3). Die neuen Komponenten der 5.0 werden in den Versionshinweisen vorgestellt.

12.1 progressbar: die Wörter der Anzeigen #

5.0 bringt zwei Anzeigen, linear (gauge) und mit Zifferblatt (angulargauge). Auch ein Fortschrittsbalken zeigt einen Wert auf einer Skala: Die Bibliothek spricht dafür nur noch eine Sprache, und der Balken, der dasselbe mit anderen Worten sagte, übernimmt die Wörter der Anzeigen. Kein alter Name bleibt: weder eine Eigenschaft noch ein von of_set_property akzeptierter Name.

Was4.05.0
Ablesewert anzeigenuo.ib_label = trueuo.ib_show_value = true
Farbe des Wertes (-1 = das Design, unverändert)uo.il_color = RGB(…)uo.il_value_color = RGB(…)
Ein Ablesewert, der den Wert schreibtuo.is_label_format = "{value} of {max} rows"uo.is_format = "#,##0" + uo.is_unit = "of 500 rows"
Der Prozentsatz (Standard, unverändert)uo.is_label_format = ""uo.is_format = ""
Steuern per Nameof_set_property("label", …), ("label_format", …), ("color", …)("show_value", …), ("format", …), ("unit", …), ("value_color", …)
// 4.0 : the label wrote the value through placeholders
uo_progress.ib_label        = true
uo_progress.il_color        = RGB(/*red*/ 0, /*green*/ 120, /*blue*/ 215)
uo_progress.is_label_format = "{value} of {max} rows"
// 5.0 : the words of the gauges - a display format for the value, then a unit
uo_progress.ib_show_value  = true
uo_progress.il_value_color = RGB(/*red*/ 0, /*green*/ 120, /*blue*/ 215)
uo_progress.is_format      = "#,##0"
uo_progress.is_unit        = "of 500 rows"

Das Rezept: Kompilieren Sie; jedes ib_label, il_color und is_label_format eines Fortschrittsbalkens wird gemeldet. Ersetzen Sie die ersten beiden durch ib_show_value und il_value_color. Für das dritte: Ein leerer Text bleibt in is_format leer; eine Beschriftung, die den Wert schrieb, wird zu einem Format ("#,##0") und einer Einheit; eine Beschriftung, die den Prozentsatz schrieb, lässt is_format leer und legt ihren Text in is_unit. Ein of_set_property, das label, label_format oder color nannte, liefert jetzt -5 und bewirkt nichts (of_get_last_error nennt die Eigenschaft): Suchen Sie diese Namen in Ihrem Code.

12.2 datagrid: ein numerischer Editor, der über eine Maske tippt #

Keine Signatur ändert sich, und ue_cell_edited erhält weiterhin die reine Zahl (1234.5). Was sich ändert, sieht man am Bildschirm: Die Eingabe in einer numerischen Spalte folgt jetzt einer Eingabemaske in der Syntax des DataWindows — der, die Sie über die neue Eigenschaft is_mask der Spalte angeben, sonst ihrem Anzeigeformat ohne seine Literale.

Was4.05.0
Der Editor einer als $1,234.50 angezeigten Zelleöffnete sich mit der reinen Zahl 1234.5; jedes Zeichen wurde angenommenöffnet sich mit 1,234.50; die Gruppierung erscheint mit den Ziffern, die Dezimalstellen sind auf die Maske begrenzt, Buchstaben werden abgelehnt; eine eingefügte Zahl wird in der Anzeigesprache gelesen
Eine vierstellige Zahl unter einem numerischen Formatin manchen Sprachen nicht gruppiert (1234 auf Spanisch)in allen Sprachen gruppiert (1.234 auf Spanisch)
Eine auf null gerundete negative Zahl-00
Den Editor öffnen und ohne Eingabe schließenkonnte einen Wert ändern, den das Format rundetändert nichts
Eine Bewertungszelle (rating), von einem Bildschirmleser gelesenfünf Sternzeichen4 / 5
// 5.0 : the input mask of a numeric column - the cell still receives the bare number
uo_grid.of_column(/*key*/ "revenue").is_mask = "#,##0.00"

Das Rezept: nichts zu ändern. Code, der den getippten Text las, sieht ihn nicht: ue_cell_edited liefert weiterhin die Zahl. Eine Spalte, deren Eingabe frei bleiben muss (ein Code, eine Teilenummer), ist eine Textspalte, keine numerische.

12.3 ribbon: die Masken eines Drehfelds #

Für ein Drehfeld ohne Maske ändert sich nichts. Zwei neue Eigenschaften seines Handles, in der Syntax von PowerBuilder: is_mask, die Eingabemaske ("#,##0.00", "0%"), und is_format, das Anzeigeformat mit seinen Literalen (0 "pt" zeigt 11 pt, getippt 11). id_value und ue_value_changed behalten die reine Zahl, der Wechsel zwischen beiden löst kein Event aus, und die Masken folgen dem Drehfeld in den Bereich einer eingeklappten Gruppe.

// 5.0 : a font size shown "11 pt", typed "11"
uo_ribbon.of_item(/*keys*/ "home/font/size").is_format = "0 ~"pt~""

Das Rezept: nichts zu ändern.

12.4 chartcartesian: das Zahlenformat über is_format #

Das kartesische Diagramm schrieb seine Zahlen über eine Funktion mit vier Argumenten (Dezimalstellen, Präfix, Suffix, Tausendertrennzeichen). 5.0 stellt Diagramme und Anzeigen unter eine einzige Sprache: ein PowerBuilder-Anzeigeformat, das einer DataWindow-Spalte, in der Eigenschaft is_format — des ganzen Diagramms und einer Achse über ihren Handle. Die Abschnitte positiv;negativ;null, die Literale und der Prozentsatz kommen mit, und die Trennzeichen bleiben die der Anzeigesprache. Kein alter Name bleibt.

Was4.05.0
Das Format des Diagrammsuo.of_set_value_format(0, "$", "", true)uo.is_format = "$#,##0"
Das Format einer Achseuo.of_set_value_format(AXIS_VALUE2, 1, "", " u", false)uo.of_axis(AXIS_VALUE2).is_format = '0.0" u"'
Zurück zur Zahl, wie sie istuo.of_clear_value_format()uo.is_format = "" (und "" auf jeder Achse mit eigenem Format)
Steuern per Name—of_set_property("format", "#,##0")
Die Zahl der Punkte einer Reihe (nur lesen)uo.of_item("k").ii_point_count (integer)uo.of_item("k").il_point_count (long)
// 4.0 : decimals, prefix, suffix and thousands as four arguments
uo_chart.of_set_value_format(/*decimals*/ 0, /*prefix*/ "$", /*suffix*/ "K", /*thousands*/ true)
uo_chart.of_set_value_format(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE2, /*decimals*/ 1, /*prefix*/ "", /*suffix*/ " u", /*thousands*/ false)
// 5.0 : a display format, written as in a DataWindow - for the chart, then for one axis
uo_chart.is_format = "$#,##0K"
uo_chart.of_axis(/*axis*/ u_pbt_chartcartesian.AXIS_VALUE2).is_format = '0.0" u"'

Das Rezept: Kompilieren Sie; jedes of_set_value_format und of_clear_value_format wird gemeldet. Schreiben Sie das Format wie in einem DataWindow: decimals gibt die Zahl der 0 nach dem Punkt (-1 = #,##0.###), thousands das Gruppierungs-,, Präfix und Suffix stehen davor und dahinter (in Anführungszeichen, wenn sie Ziffern oder Leerzeichen enthalten). Das Format einer Achse gehört in of_axis(<Achse>).is_format.

12.5 Weitere Verhaltensweisen, die Sie bemerken können #

Was4.05.0
Native Menüs einer Komponente mit eigenem Akzent (il_theme_accent)der Akzent war nur im Kästchen eines aktivierten Eintrags zu sehenauch der markierte Eintrag zeigt ihn, als Streifen am Anfangsrand (rechts bei RTL)
button: Strg, Alt oder Umschalt + Eingabe (und Strg / Alt + Leertaste, Strg + Esc) auf dem Button mit dem Fokusklickten diesen Buttongehen an das Fenster, wie von jedem anderen Steuerelement aus: Das Tastenkürzel eines anderen Buttons (is_shortcut = "Ctrl+Enter") wird ausgelöst, der fokussierte Button nicht; Eingabe und Leertaste allein klicken ihn weiterhin
Ausgegrauter button mit ib_default (oder ib_cancel), dem Fokus am nächsten, in einem MDI-BlattEingabe (Esc) ging an den Standard-Button eines anderen Blattsdie Taste bleibt in ihrem Blatt: das Feld oder der Standard-CommandButton von PB erhält sie
breadcrumb: ii_max_visible gesetzteine genaue Zahl von Segmenten bei OVERFLOW_COLLAPSE (die Breite faltete nichts mehr ein), ignoriert bei OVERFLOW_SCROLL und OVERFLOW_SHRINKeine Obergrenze in allen drei Modi; bei OVERFLOW_COLLAPSE faltet die Breite noch mehr ein, wenn die Leiste zu schmal ist, und der aktuelle Ort verlässt die Leiste nicht mehr
breadcrumb: of_add_child mit leerem Texteine leere Zeile im Menüder Schlüssel des Zweigs, wie bei of_add_children
breadcrumb: Strg+S, F5 und die anderen Tastenkürzel des Fensters während der Pfadeingabewurden nicht ausgelöstwerden ausgelöst, wie aus einem SingleLineEdit; Eingabe und Esc bleiben beim Feld
breadcrumb: ue_children_needed, das nie zurückkehrtkein Chevron öffnete sich mehr bis zum nächsten of_resetein Klick auf ein anderes Chevron gibt die Frage auf, und der Pfad lässt sie nach 10 Sekunden fallen
chartcartesian: ein Band oder eine Schwelle ohne Farbe (-1 oder NULL)ein voller Block in der Textfarbeeine blasse Lasur des Themenakzents (eine Schwellenlinie: der Akzent); eine NULL-Grenze wird abgelehnt (-5)
chartcartesian: ein NULL-Gewicht in einer Wärmekartedie Zelle in der heißesten Farbe, mit „NaN“ beschrifteteine leere Zelle: dort wird nichts gezeichnet, beschriftet oder angeklickt; eine Blase ohne Gewicht behält die Standardgröße, außerhalb der Skala
chartcartesian: of_remove_seriesdie folgenden Reihen wechselten die Farbe; der Tooltip der entfernten Reihe zierte die nächste Reihe mit demselben Schlüsseljede Reihe behält die beim Hinzufügen vergebene Farbe; Tooltip und Elementfarben gehen mit der Reihe
chartcartesian: of_append_values / of_append_categories mit ib_animateddas ganze Diagramm fiel bei jedem Anhängen auf die Achse zurück und stieg wieder auf, solange das Fenster nicht voll warnur die neue Form steigt auf, die anderen gleiten; die ganze Ankunft wird nur beim Hinzufügen einer Reihe erneut abgespielt
chartcartesian: gestapelte Balken auf beiden Wertachsendie beiden Stapel lagen übereinandernebeneinander in der Kategorie
chartcartesian: ein Auszeichnungs-Tag in einer Kategorie oder Wertebeschriftungauf der Achse wörtlich geschrieben, im Panel ausgewertetüberall Text: das Tag wird entfernt (Achse, Panel, #x#, #label#)
chartcartesian: Esc ohne Geöffnetes, Eingabe auf einer Lückevom Diagramm behaltengehen an das Fenster: seinen Abbrechen-Button, seinen Standard-Button
codeeditor: Strg+Tab oder Alt+Tab im Editorrückten den Code ein: die Tastatur kam nicht mehr aus dem Editor herausgehen an das Fenster (die nächste Seite eines Registers); Esc und dann Tab verlässt den Editor, Strg+M oder ib_tab_moves_focus lassen Tab hinaus
codeeditor: of_find mit einem ungültigen regulären Ausdrucklieferte 0liefert -5, wie of_replace
codeeditor: ein neues is_text während einer Suchedie Leiste blieb offen und löste ue_find_result ausdie Leiste schließt sich, ohne etwas auszulösen (ein Wert bleibt stumm)
codeeditor: is_syntax = "SQL" zurückgelesen"sql""SQL", wie geschrieben
Gefalteter codeeditor: #regionopen, die Kopie und of_selected_textals #region angezeigt; die Kopie lieferte die Anzeige, ohne die Zeilen der geschlossenen Regionenwie geschrieben angezeigt; Kopie und of_selected_text liefern die Quelle des Bereichs, geschlossene Regionen eingeschlossen
codeeditor: Markierungen und il_doc_line, wenn darüber Zeilen hinzugefügt oder entfernt werdenblieben auf derselben Zeilennummerwandern mit ihrer Zeile; eine gelöschte Zeile nimmt ihre Markierungen mit
codeeditor: die Einfügemarke nach „Alle ersetzen“ (of_replace_all)auf der letzten Ersetzungbleibt, wo sie war, verschoben um das davor Eingefügte
codeeditor: Strg+Z, Strg+Yder Verlauf des Browsers, verloren, wenn der Text bei Fokus anderswo geschrieben wurdeder Verlauf der Komponente (of_undo, of_redo): er zählt auch, was Ihr Code tut, ein neues is_text leert ihn
crypto: of_totp_verify(secret, code, ref al_step) mit einem mit Leerzeichen getippten Code („864 010“)abgelehnt, Schritt 0akzeptiert, wie bei der Form mit zwei Argumenten; die Leerzeichen werden ignoriert
crypto: of_base64_encode_file einer Datei von 32 bis 64 MB in einer 32-Bit-Anwendungbis 64 MB versprochen; der Speicher des Prozesses konnte ausgehen"" und of_get_last_error() (höchstens 32 MB in 32 Bit); of_base64_encode_file_to_file kodiert eine Datei beliebiger Größe in eine andere Datei
crypto: of_totp_uri eines von Hand getippten Geheimnisses („gezd gnbv“, eine „0“)unverändert in die URI geschriebenin Base32-Großbuchstaben ohne Leerzeichen und = geschrieben; ein anderes Zeichen: "" und of_get_last_error()
crypto: ein NULL-Argumentis_last_error konnte NULL zurückkommenzählt als leeres; of_get_last_error() ist nie NULL
crypto: ein Ziel \x oder C:x (of_base64_decode_to_file, of_encrypt_file, of_decrypt_file)-5 und eine falsche Meldung („not a base64 value“, „all needed“)-5, und of_get_last_error() sagt, dass der Pfad vom aktuellen Ordner eines Laufwerks abhängt
commandpalette: eine Suche und die zuletzt verwendeten Befehle (is_recent)ein kürzlich verwendeter Befehl erhielt bis zu il_max_recent × 4 Punkte: bei einem großen Limit überholte er einen besseren Trefferer entscheidet nur zwischen Ergebnissen, die etwa gleich gut passen
commandpalette: ein Befehl ohne Gruppe (as_group = ""), zwischen zwei Gruppen deklariertunter der Überschrift der davor deklarierten Gruppe aufgeführtzuerst in der Liste, ohne Überschrift
commandpalette: Pos1 / Ende im Suchfeld mit Text, Umschalt+Pos1bewegten die Auswahl in der Liste; Umschalt+Pos1 markierte nichtsbewegen die Einfügemarke im Feld; Strg+Pos1 / Strg+Ende erreichen die Liste; Umschalt markiert im Feld
commandpalette: ein Rechts- oder Mittelklick auf eine Zeileführte den Befehl austut nichts
commandpalette: of_command mit einem Schlüssel, den kein Befehl trägtib_enabled / ib_visible lasen sich true, ein Schreiben ging stillschweigend verlorensie lesen sich false; ein Schreiben geht verloren und of_get_last_error sagt es
commandpalette: ein zweites Palettenobjekt, das ein Kürzel übernommen hatte, wird zerstörtdie Taste antwortete niemandem mehr, bis das erste sie erneut registriertedas Kürzel geht an das erste zurück
commandpalette: is_recent mit Leerzeichen oder wiederholten Schlüsseln, ein niedrigeres il_max_recent"a, b" behielt nur a; ein Duplikat erschien zweimal; is_recent blieb langbereinigt, auf das Limit gekürzt und beim Öffnen bereinigt an is_recent zurückgegeben
dockcontainer: das Dock aufbauen, eine Anordnung wiederherstellenue_layout_changed bei jedem Hinzufügen, das erste kannte nur ein Panel: eine im Ereignis gespeicherte Anordnung wurde von einer halb aufgebauten überschriebeneinmal für eine von of_set_redraw(false) … (true) eingerahmte Folge, bei der Wiederaufnahme (und für Änderungen im Abstand unter 40 ms); of_set_layout löst es einmal aus. Lesen Sie die gespeicherte Einstellung vor dem Erstellen der Panels
dockcontainer: das vorderste Panel eines Stapels wechselt ohne Klick auf seine Registerkartenichts wurde ausgelöst (ein per of_add_panel oder of_move_panel gestapeltes Panel, das vorderste geschlossen, abgekoppelt oder entfernt, ein wieder angedocktes Panel)ue_panel_selected des nach vorne gekommenen Panels, nach ue_panel_closed, ue_panel_floated oder ue_panel_docked; eine wiederhergestellte Anordnung löst keines aus. n_pbt_dock_panel.ib_front liest es zurück
dockcontainer: ib_visible = true auf einem geschlossenen Panel eines Stapelses kam hinter die aktive Registerkarte zurückes kommt nach vorne, und ue_panel_selected folgt; in einer eingeklappten Gruppe bleibt es auf der Leiste
dockcontainer: of_move_panel auf das Panel selbst (as_target = as_key)lieferte 0 ohne Wirkung, oder teilte seinen Stapelliefert -5; um einen Stapel zu teilen, zielen Sie auf ein anderes Panel des Stapels (of_move_panel("b", "a", POSITION_BOTTOM))
dockcontainer: ein Panel, das in eine eingeklappte Gruppe verschoben wird oder aus ihr herausib_pinned änderte sich ohne Ereignisue_panel_pinned folgt
dockcontainer: ein Klick ohne Verschieben auf eine Trennlinielöste ue_layout_changed auslöst nichts aus: nichts hat sich geändert
dockcontainer: of_keys_at mit numerischen Schlüsselndie ganzzahligen Schlüssel zuerst (2, 10, zeta)die Reihenfolge des Hinzufügens (zeta, 10, 2)
dockcontainer zur Laufzeit zerstört (CloseUserObject)seine Steuerelemente kamen ins Fenster zurück, ausgeblendetsie erhalten die Sichtbarkeit zurück, die sie vor of_add_panel hatten
dockcontainer: of_add_panel eines Steuerelements, das das Dock ENTHÄLTdie Fenster verschachtelten sich im Kreisliefert -5, das Steuerelement bleibt, wo es war
crosstab: AGG_COUNTzählte die Zeilenzählt die nicht leeren Werte, wie die Funktion Anzahl von Excel; das neue AGG_COUNT_ROWS zählt die Zeilen
crosstab: eine Summe ohne jeden Wert; eine „Abweichung zum Vorherigen“ neben einer leeren Zelle0eine leere Zelle (of_get_cell_value liefert NULL)
crosstab: Top N oder Bottom N (of_set_value_filter oder das Menü) auf einem Feld, das unter einem anderen seines Bereichs stehtüber die ganze Tabelle gereihtinnerhalb jedes übergeordneten Elements gereiht (die beste Stadt jeder Region); auf der ersten Ebene unverändert; die mit dem N-ten gleichauf liegenden Elemente bleiben alle
crosstab: kein Feld in Spalteneine Summenspalte, die die einzige Spalte verdoppelte (`Nord650650`)keine Summenspalte mehr; ib_col_grand_total behält seinen Wert
crosstab: mehrere Kennzahlen und Felder in Spalteneine Spalte Gesamt je Kennzahl, ohne Kennzahlnamen und nicht sortierbareine Kopfzeile „Gesamt“, darunter eine Kopfzeile je Kennzahl, sortierbar
crosstab: ue_layout_changedvon den Gesten des Benutzers ausgelöst, und nur von is_thousands und of_remove_fieldauch von jedem Befehl des Codes ausgelöst, der ändert, was of_get_layout liefert (of_set_layout eingeschlossen), einmal je Befehl; nur einmal am Ende eines von of_set_redraw(false) … (true) eingerahmten Aufbaus; nie, wenn sich nichts ändert, auch nicht bei of_reset
crosstab: ein Prozentwert (SHOW_PCT_*)57.9 % in allen Sprachenso geschrieben, wie die Anzeigesprache es schreibt: 57.9% auf Englisch, 57,9 % auf Französisch
crosstab: der Bezeichnungsfilternur im Chip-Menü eines numerischen Feldes angeboten; bei einem Datum verglich of_set_label_filter das Jahr (2025-03-15 galt als 2025)für jedes Feld angeboten; bei einem Datum nimmt die Text-Überladung Tage: LABEL_BEFORE, LABEL_AFTER, LABEL_BETWEEN ("yyyy-mm-dd", Tage eingeschlossen); die numerische Überladung oder LABEL_CONTAINS / LABEL_BEGINS / LABEL_ENDS auf einem Datum: -5
crosstab: of_group_date_field auf einem Feld ohne Datumswerte0 und ein einziges Element „(leer)“-5
crosstab: of_add_calc_field / of_add_calc_measure vom Raster abgelehnt (Name bereits belegt, Formel nicht übersetzbar)0; nur ue_calc_field_error sagte es-5 und der Grund in of_get_last_error (ue_calc_field_error wird weiterhin ausgelöst); ein Name mit / oder `: -5; eine Formel akzeptiert .5 und 1e3`
crosstab: of_set_value_filter Top oder Bottom mit weniger als 1 Element; of_expand_to_level unter 1auf 1 gesetzt-5
crosstab: of_get_cell_value aus einem Event aufgerufen, das während eines Befehls dieses Skripts ausgelöst wurde-2, wie bei einer nicht erstellten Komponente-4, und of_get_last_error sagt warum: lesen Sie nach dem Event
crosstab: das Menü Optionen des Rasters (das Zahnrad)„Gesamtsumme“ und „Zwischensummen“ schalteten beide Achsen nach dem Zustand der Zeilen umein Eintrag je Achse: Gesamtsummenzeile und -spalte, Zwischensummen der Zeilen und Spalten
crosstab: of_from_datastore — eine CHAR-Spalte, eine Dezimalzahl, das Format einer Spaltedie Füllleerzeichen blieben im Element; das Format wurde ignoriertdie Füllleerzeichen werden entfernt; eine Dezimalzahl wird mit dem Trennzeichen des Arbeitsplatzes gelesen; das Format der Spalte ist das Standardformat ihrer Werte
datagrid: eine ausgewählte Zeile, die die Suche oder ein Filter ausblendet oder of_remove_row entferntblieb stillschweigend ausgewählt (of_selected_keys und ue_row_menu_clicked trugen sie)verlässt die Auswahl, und ue_selection_changed meldet es; of_select_rows nimmt keine ausgeblendete Zeile
datagrid: ib_hidden, is_pin, ii_index auf ihren bisherigen Wert gesetzt; ein Klick auf den Griff ohne Ziehenlösten ue_layout_changed auslösen nichts aus: nichts hat sich geändert
datagrid: Layoutänderungen zwischen of_set_redraw(false) und of_set_redraw(true)ein ue_layout_changed pro Änderungein einziges, bei der Wiederaufnahme, mit dem endgültigen Layout
datagrid: ein Typ oder Renderer außerhalb der Konstanten (of_add_column, is_renderer, is_selection_mode); of_add_row_menu_item ohne erstellte Komponenteangenommen und unverändert zurückgelesen, ohne Wirkung; 0of_add_column liefert -5 (of_get_last_error sagt, welcher); ein unbekannter Renderer liest sich "", ein unbekannter Modus SELECT_NONE; -2
datagrid: of_reload_row oder of_update_row einer bearbeiteten Zelledie Markierung „geändert“ bliebsie verschwindet: die Zeile hält wieder, was der DataStore hält
datagrid: eine Spalte mit Codetabelle, ein Datum bearbeiten; eine time-Spalte eines DataStoresdas <select> und das Datumsfeld der Engine; eine Uhrzeit war TextListe und Kalender der Bibliothek (ein Datum lässt sich auch TIPPEN, in der Reihenfolge der Sprache); eine Uhrzeit (TYPE_TIME): Sortierung, Filter > 09:00, Format, Eingabe 9:5
datagrid: ein Filter > 3 auf einer Bewertung ohne Typ oder einer Spalte mit Codetabellesuchte den Text „> 3“: keine Zeilevergleicht die Daten (die Zahl, den Code)
datagrid: ein Baum unter einer Suche; eine Zeile, deren Elternteil nicht im Raster istdas gefundene Kind blieb verborgen; die Zeile erschien nieseine Vorfahren werden geöffnet gezeigt; die Zeile hängt an der Wurzel
datagrid: of_from_datastore / of_load_rows nach of_open_source; of_append_rows ohne Schlüssel nach of_from_datastore; ein CHAR-Wertdas Raster blieb bei Platzhaltern; die Zeile wurde abgelehnt (-5); behielt ihre Auffüllung mit Leerzeichendie Quelle wird verlassen; der Schlüssel folgt der größten RowID; gekürzt
datagrid: of_export_xlsxDatumswerte wurden als Text geschrieben; keine Obergrenzeechte Excel-Datumswerte; eine zu große Arbeitsmappe (über etwa 18 MB) wird abgelehnt, ue_xlsx_saved sagt warum
messagebox: Esc oder Alt+F4 bei einem Dialogfeld ohne Abbrechen-Schaltflächeschlossen das Dialogfeld und lieferten 0 — auch of_info, das 1 versprachwie unter Windows: Ein Dialogfeld mit einer einzigen Schaltfläche schließt über diese (of_info liefert 1), ein Ja/Nein-Dialogfeld schließt sich nicht — es muss beantwortet werden; ib_closable = true liefert die 0 der 4.0 zurück. Ein aus einem MessageBox übernommener Test = 2 lässt keine Löschung mehr durch
messagebox: eine Abkürzung (of_info, of_error, of_confirm, of_prompt…) nach dem Setzen von il_accent, is_position, ib_movable, einer Größe oder ib_input_passwordalles wurde stillschweigend gelöscht: Das Kennwort von of_prompt erschien im Klartextdie Abkürzung ersetzt nur den Inhalt (Titel, Meldung, Symbol, Schaltflächen, Kontrollkästchen, Wahlen); das Erscheinungsbild und die Einstellungen des Feldes bleiben. of_reset() löscht alles
messagebox: of_reset() nach einem Dialogfeldof_get_last_error, of_checked, of_action und of_input_value sprachen noch vom alten Dialogfeldsie werden zurückgesetzt
messagebox: ein Pflichtfeld voller Leerzeichenakzeptiertleer: die Standardschaltfläche wartet (der getippte Wert kommt unverändert zurück)
messagebox: eine [action]-Zone im Titel, in einer Beschriftung oder in der Fußnote; ein Link in einer Wahl; zwei Schaltflächen mit demselben Kürzeldie Zone tat nichts; der Link öffnete den Browser UND wählte; Alt+Buchstabe antwortete mit der ersten Schaltflächedie Zone antwortet wie in der Meldung (of_action); der Link öffnet sich, ohne zu wählen; Alt+Buchstabe verschiebt den Fokus von einer Schaltfläche zur anderen, die Eingabetaste wählt
messagebox: Strg+Cverlor das & von &&, kopierte die Tags einer Schaltfläche, ignorierte die Eingabedie Beschriftungen wie angezeigt, „Beschriftung: Wert“ des Feldes (nie ein Kennwort), die Details und die Fußnote
messagebox: ein Nachkomme, der xx_set_style_override oder xx_clear_style_override (geschützt) aufriefüberschrieb ein Themen-Token des Dialogfeldssie sind entfallen: il_accent färbt das Dialogfeld
json und jsontree: eine Pfadebene mit ~0 oder ~1so gelesen, wie er steht; ein Schlüssel mit / hatte keinen Pfad~1 ist ein / des Schlüssels, ~0 ein ~ (JSON Pointer, RFC 6901): paths/~1users liest den Schlüssel /users; ein Schlüssel mit ~ wird im Pfad ~0 geschrieben
json: eine leere Pfadebene (a//b, a/) oder ein Pfad, der mit / beginntmit -5 abgelehnt, als fehlend geleseneine leere Ebene ist der Schlüssel "", ein führendes / ist die vollständige Form des Zeigers: /name ist name, / bezeichnet den Schlüssel "" der Wurzel
json: of_get_number, of_get_decimal, of_get_longlong auf einem String wie "12 kg" oder "1,5"las den Anfang: 12, 10: ein String zählt nur, wenn er vollständig eine JSON-Zahl ist — "12.50" ist weiterhin 12,5
json: of_set_members mit einem Schlüssel, den das Dokument schon hatder Schlüssel wurde ein zweites Mal geschrieben: n_pbt_json las den ersten, ein Browser oder ein Server den letztender Wert wird an Ort und Stelle ersetzt; ein Schlüssel, den das Fragment wiederholt, behält seinen letzten Wert
json: of_pretty eines Dokuments mit einem of_set_raw-Wert, der mehr als 512 Ebenen tief verschachtelt istein anderes Dokument, bei 512 Ebenen abgeschnittenein leerer Text
jsontree: Klick auf einen Schlüssel mit /, einen leeren Schlüssel oder unter einem doppelten Schlüsselein Pfad, der in n_pbt_json einen ANDEREN Wert lasx~1y für den Schlüssel x/y, a//b für einen leeren Schlüssel; of_selected_addressable liefert false unter dem zweiten von zwei gleichen Schlüsseln
jsontree: Strg+C mit einem mit der Maus markierten Textstückder ganze Knotendas markierte Stück
jsontree: ein JSON-Text, der mit einem BOM beginntabgelehnt (ue_error)angezeigt, wie n_pbt_json ihn liest; is_json liest sich zurück, wie gesetzt
jsontree: die Meldung von ue_error auf EnglischInvalid JSON : …Invalid JSON: … (jede Sprache behält ihre Zeichensetzung); 01, 1., 1e melden Bad number
jsontree: of_expand_path während einer Suchebeim nächsten Suchschritt wieder eingeklappt, ohne ue_node_toggledbleibt offen, mit den darüber geöffneten Blöcken
jsontree: Leertaste auf einem ausgewählten Wertrollte den Baum um eine Seitetut nichts (ein Block klappt weiterhin ein)
xmltree: ein Leerraum zwischen zwei Kindern (<b>x</b> <i>y</i>)hatte keine Zeile: /p/text()[1] lieferte -5eine eigene Zeile, als ␠ gezeigt, mit ihrem Pfad: die Zeilennummern gemischten Inhalts ändern sich
xmltree: ein Text zwischen zwei Kindern (Hello <b>x</b> again)Hello, again: Randleerzeichen abgeschnittenHello , again: nur die Layout-Zeilenumbrüche entfallen
xmltree: of_select_path eines XPath, dessen erster Knoten ein Layout-Leerraum ist (//text())-5der erste Knoten, den der Baum ZEIGT, wird ausgewählt
xmltree: of_selected_value eines Elements, das nur Zeilenumbrüche enthält (als <x/> gezeigt)""diese Zeilenumbrüche, wie n_pbt_xml sie liest
xmltree: Strg+C mit einem mit der Maus markierten Textstückdas XML des ganzen Knotensdas markierte Stück
xmltree: die Meldung von ue_error auf EnglischInvalid XML : …Invalid XML: … (jede Sprache behält ihre Zeichensetzung)
xmltree: of_expand_path während einer Suchebeim nächsten Suchschritt wieder eingeklappt, ohne ue_node_toggledbleibt offen, mit den darüber geöffneten Elementen
xmltree: Leertaste auf einem ausgewählten Blattrollte den Baum um eine Seitetut nichts (ein Element mit Kindern klappt weiterhin ein)
jsontree, xmltree: eine Suche, die sich schließt (Esc im Suchfeld, of_clear_search, of_reset, ib_search_enabled = false)kein Ereignis: eine Zeile „3 / 12“ der Anwendung blieb falschue_search_result(0, 0), einmal; nichts, wenn keine Suche lief
PBT_SetDefaultFont mit einer Größe: codeeditor, jsontree, xmltree, ribbon, toolbar, crosstab, datagrid, tilesbox, stepbar, listbar, dockcontainer, video, picture, Menüs und TooltipsCode, Dokument, Menüband (seine Designgröße) und viele Nebentexte behielten ihre Größesie folgen der Größe der Anwendung in ihren Proportionen; die Größe der Anwendung hat Vorrang vor der Menübandgröße des Designs; ein ii_font_size des codeeditor hat Vorrang vor beiden
markdownview: ue_link_clicked(string as_url)(string as_url, string as_kind): ein bereits geschriebenes Skript des Events bleibt gültig; as_kind (LINK_WEB, LINK_MAIL, LINK_DOCUMENT, LINK_FILE, LINK_OTHER) sagt, was der Link ist — sortieren Sie danach statt nach dem Text der Adresse
markdownview: ein Bild eines Dokuments auf einer Netzwerkfreigabegeladenabgelehnt, es sei denn, es liegt auf der Freigabe, von der das Dokument gelesen wurde, oder mit ib_network_pictures; ein aus dem Web gelesenes Dokument zeigt keine Datei des Arbeitsplatzes
markdownview: ein neues is_markdown desselben Dokuments, of_refreshdie Ansicht sprang nach obendie Leseposition bleibt; ein neues is_source beginnt weiterhin oben
markdownview: of_toc, of_scroll_to und eine Suche direkt nach is_sourcewirkten auf das vorherige Dokumentdie Datei wird im Hintergrund gelesen: of_toc liefert 0, of_scroll_to und die Suche warten auf sie; lesen Sie das Verzeichnis in ue_loaded
markdownview: eine vom Autor ausgerichtete Spalte (:--, --:) in einer Rechts-nach-links-Anwendungwechselte die Seitebehält ihre Seite; nur die Standardausrichtung folgt der Richtung
markdownview: ue_load_failed für einen mit is_markdown gesetzten Textnie ausgelöstausgelöst (REASON_FAILED, leeres as_source) für einen Text, den die Komponente nicht lesen kann; das vorherige Dokument bleibt angezeigt
menubar: das Tastenkürzel eines Eintrags (is_shortcut)wirkte auf den Zustand, den das letzte Öffnen des Menüs hinterlassen hattelöst zuerst ue_menu_opening seines Menüs aus, wie Windows: ein Eintrag, den dieses Event ausgraut, antwortet nicht, und ue_menu_closed meldet es
menubar: ein Öffnen, das vor dem Erscheinen abgebrochen wird (schnelles Gleiten, Esc oder Alt während ue_menu_opening, Fokusverlust)ue_menu_opening ohne ue_menu_closed; nach Esc öffnete sich das Dropdown trotzdemnichts öffnet sich, und ue_menu_closed folgt: jedes ue_menu_opening erhält genau ein ue_item_selected oder ein ue_menu_closed
menubar: Alt dann Esc, F10 dann EscEsc ging auch an das Fenster: seine Abbrechen-SchaltflächeEsc verlässt den Menümodus und bleibt bei der Leiste
menubar: ein per Tastatur geöffnetes Menü (Alt+Buchstabe, F10 dann Eingabe)kein Eintrag hervorgehoben: Eingabe wählte nichtsder erste Eintrag ist hervorgehoben, Eingabe wählt ihn
menubar: Alt, wenn die Leiste bereits den Fokus hatder Menümodus schaltete beim Drücken um: Alt+Umschalt (Tastaturlayout) schaltete ihn einbeim Loslassen eines einzelnen Alt, wie unter Windows
menubar: ein Klick auf einen ausgegrauten Titel oder den leeren Teil der Leistedie Leiste behielt die Tastatur, das bearbeitete Feld verlor siedie Tastatur bleibt beim Steuerelement, in dem getippt wurde
menubar: is_shortcut auf einer Adresse, die keinen Eintrag bezeichnetdie Taste war im ganzen Fenster belegt, sogar nach of_clearnichts wird aktiviert: setzen Sie es nach of_add_item
pdfviewer: ib_allow_save / ib_allow_print eines Betrachtersgalten für alle Betrachter der Anwendung; ein of_reset an anderer Stelle gab einem vertraulichen Dokument Speichern zurückjeder Betrachter behält seine eigene Einstellung
pdfviewer: ib_allow_save / ib_allow_print vor is_source gesetztdrei Ladevorgänge, drei ue_load_completed; ein fehlgeschlagenes Dokument wurde bei jeder Änderung erneut versuchtein einziger Ladevorgang; ein fehlgeschlagenes Dokument wird nicht erneut versucht
pdfviewer: ii_page gesetzt, während ein Dokument angezeigt wird, dann ein anderes is_sourcedas nächste Dokument öffnete sich auf dieser Seitedie Seite gehörte zum angezeigten Dokument: das nächste öffnet sich auf seiner ersten Seite; um ein Dokument auf einer Seite zu öffnen, setzen Sie is_source und dann ii_page
pdfviewer: derselbe Wert erneut gesetzt (ii_page, ii_zoom, is_fit, ib_viewer_toolbar)lud das Dokument neu und löste ue_load_completed ausbewirkt nichts
pdfviewer: ii_zoom außerhalb von 25 bis 500unverändert an den Betrachter übergebenauf 25 bis 500 zurückgeführt, so zurückgelesen, wie angewendet
pdfviewer: eine Adresse https://name:geheim@…; eine Quelle nur aus Leerzeichenan den Betrachter übergeben, der sie mit einem ungenauen Grund ablehnte, das Geheimnis kam in den Ereignissen zurück; unverändert zurückgelesen, of_refresh gab 0 zurücksofort über ue_load_failed abgelehnt (REASON_UNSUPPORTED): Laden Sie das Dokument mit dem restclient herunter; als "" zurückgelesen, of_refresh gibt -4 zurück
picture: id_max_zoom bei einem Bild, das größer als sein Rahmen istMausrad, + und id_zoom gingen bis zur tatsächlichen Größesie halten an der Obergrenze; nur die Taste 1 geht darüber hinaus
picture: eine neue is_source oder ib_zoomable = false bei einem gezoomten Bildder Zoom ging stillschweigend auf 1.0 zurückue_zoom_changed(1.0) wird ausgelöst (of_reset bleibt stumm); setzen Sie id_zoom nach is_source
picture: ein Pfad mit Leerzeichen darum (eine CHAR-Spalte)abgelehnt, REASON_UNSUPPORTEDangezeigt; is_source liest sich wie geschrieben zurück
picture: die Zoomtasten mit gedrückter Strg-, Alt- oder Windows-TasteStrg++ zoomte, Alt+1 zeigte die tatsächliche GrößeIhrer Anwendung überlassen (Tastenkürzel, Zugriffstasten)
picture: ein umgefärbtes Bild (mono:, tint:) einer anderen Website, deren Server Anfragen anderer Herkunft ablehntue_loaded und ein leerer Rahmenue_error mit REASON_FAILED, die Meldung sagt warum
radialmenu: is_tooltip, is_super_tooltip_title, is_super_tooltip_text, is_super_tooltip_imageexistierten, zeigten nie etwas: Der Starter hat keine Oberflächeentfernt: Der Compiler zeigt die Zeile, löschen Sie sie
radialmenu: of_close, ein zweites of_show, of_clear oder of_reset, während ein Rad offen istue_dismissed kam, als das Rad den Bildschirm verließ; of_is_open blieb bis dahin trueue_dismissed sofort, einmal je Öffnung; of_is_open false, sobald der Aufruf zurückkehrt
radialmenu: of_remove_item eines Zweigs, den das offene Rad nicht zeigt (ausgeblendet)das Rad schloss sich (ue_dismissed)das Rad bleibt offen; es schließt sich nur, wenn es den Zweig zeigte
radialmenu: of_remove_item mit einem bloßen Schlüssel ("csv")-5aufgelöst wie bei of_item (der einzige Zweig, der ihn trägt); -5, wenn zwei Zweige ihn teilen
radialmenu: of_show eines Rades ohne Inhalt, während ein anderes offen istue_dismissed, und das alte Rad blieb auf dem Bildschirmdas alte Rad schließt sich auch: ein ue_dismissed je Öffnung
radialmenu: il_back_color_hover eines Zweigs ohne il_text_color_hoverdie angezeigte Beschriftung behielt den Text des Themas (weiß auf Blassrosa im dunklen Thema)ein auf diesem Farbton lesbarer Text wird gewählt; eine von Ihnen gesetzte Farbe wird nie geändert
restclient: ib_windows_auth oder is_client_certificate und eine Umleitung auf einen anderen Hostdie Windows-Anmeldedaten und das Zertifikat folgten der Umleitungnur Host und Port der Anfrage erhalten sie: der andere Host bekommt die Anfrage ohne sie
restclient: ein Header-Wert jenseits von Latin-1 (Griechisch, Japanisch…)von of_set_header angenommen (0), danach lieferte jede Anfrage des Objekts -5schon von of_set_header abgelehnt (-5, of_get_last_error() nennt den Grund); of_set_basic nimmt sie an: sein Paar geht als Base64 seines UTF-8 ab
restclient: eine fehlerhafte Methode ("GE T"), Anmeldedaten in der URL (https://user:pwd@…), ein Feldname von of_upload mit einem Anführungszeichen-4 „request failed: 0“; die Anmeldedaten verschwanden kommentarlos; der Multipart-Körper war defekt-5 und der Grund in of_get_last_error() (für Anmeldedaten: nehmen Sie of_set_basic)
restclient: eine 303 oder eine 301 bzw. 302 nach einem POST, die als GET weitergehtbehielt den Content-Type des ursprünglichen Körpersgeht ohne Content-Type
restclient: ue_progressfür jeden asynchronen Körper ausgelöst, ohne je die Gesamtgröße zu erreichen: ein Balken blieb bei 39 %für jeden asynchronen Körper ausgelöst (die Doku sagt es), und das letzte, unmittelbar vor ue_response, ist die Gesamtgröße
restclient: of_response_header eines mehrfach gesendeten Headers (Link, Set-Cookie)nur der erste Wertalle, verbunden durch , — Set-Cookie durch einen Zeilenumbruch
restclient: der gesendete User-AgentPBToolboxAI/4.0, fest eingetragendie Version der Bibliothek; of_set_header("User-Agent", …) ersetzt ihn weiterhin
restclient: eine Anfrage, wenn der HTTP-Client nicht angelegt werden konnteging über eine Wegwerf-Sitzung ab, ohne Windows-Authentifizierung, Client-Zertifikat und Cookies-2, und il_status sagt es
restclient: of_set_header("Authorization", …) nach of_set_basicbeide Authentifizierungen wurden gesendeteine Authentifizierung zugleich: das gesetzte Authorization ersetzt die Basic-Authentifizierung
ribbon: ein vom Code geschriebener Wert (is_text, id_value), während das Feld eines Kombinationsfelds oder Drehfelds den Fokus hatdas Feld behielt den alten Text; beim Verlassen wurde ue_combo_changed / ue_value_changed mit dem alten Wert ausgelöst, der Ihren ersetztedas Feld zeigt ihn sofort, außer der Benutzer tippt gerade (seine Eingabe gewinnt); das Feld ohne Eingabe zu verlassen löst nichts aus
ribbon: eine Beschriftung mit Tags (is_label, Titel einer Registerkarte, einer Gruppe, eines Banners, Anwendungsschaltfläche)wie getippt angezeigt, Tags eingeschlossen (das Panel einer eingeklappten Gruppe interpretierte sie)die Rich-Text-Auszeichnung wird überall interpretiert; ein Text des Benutzers geht durch of_escape_markup
ribbon: das Mausrad über dem Menübandjede kleine Bewegung eines Touchpads wechselte die Registerkarte; ein eingeklapptes Menüband wechselte ebenfalls, ohne etwas zu zeigeneine Registerkarte pro Raste (kleine Bewegungen summieren sich); nichts bei einem eingeklappten Menüband
ribbon: of_add_spinner mit einem Schritt von 0 oder weniger oder einem Minimum über dem Maximum; widersprüchliche id_min / id_max / id_stepangenommen: tote oder umgekehrte Pfeile, ein Wert außerhalb des Bereichs angezeigtof_add_spinner liefert -5 und hält den Wert im Bereich; ein Schritt von 0 oder weniger wird abgelehnt (of_get_last_error sagt, warum); eine über die andere hinaus gesetzte Grenze nimmt diese mit, wie bei einem NumericUpDown — die Reihenfolge der beiden Zuweisungen spielt keine Rolle mehr
ribbon: ein is_keytip, das nicht aus Buchstaben A-Z und Ziffern besteht ("É", "-")gespeichert und gelesen, nie über die Tastatur erreichbarabgelehnt: nichts ändert sich, of_get_last_error sagt, warum
ribbon: Esc auf der zweiten Ebene der Zugriffstasten (die Befehle einer Registerkarte)schloss alle Zugriffstastenkehrt zu den Buchstaben der Registerkarten zurück, wie in Office; ein zweites Esc schließt
speechout: of_speak_from(0) oder eine negative Zahllas ab dem ersten Satz-5, nichts wird gelesen (Positionen zählen ab 1)
speechout: ii_rate, ii_pitch, ii_volume außerhalb ihres Bereichs gesetzt (ii_rate = 1000)lasen sich wie gesetzt zurück (1000), während die Stimme die Grenze anwandtelesen sich so zurück, wie sie gelten (400)
speechout: ein [rate]…[/rate]-Stück in einem Satzein eigener Satz: sein ue_sentence, seine Nummer, und ein Punkt nach [/rate] wurde zu einem „Satz“bleibt in seinem Satz: ein einziges ue_sentence mit dem ganzen Text, eine Nummer, ue_word zählt in diesem Text, of_spoken_text eine Zeile pro Satz; das Satzzeichen geht mit dem Stück
speechout: [rate=0]mit 100 % gelesendas langsamste Tempo, 10 %
speechout: eine Regel von of_add_replacement auf einem Wort, das auch Name oder Wert eines Tags ist (total mit [mark=total], rate, ein Wort in [spell])schrieb das Tag um: die Marke änderte ihren Namen, das Tag wurde vorgelesen, der buchstabierte Text änderte sichdie Regel schreibt nur den Text zwischen den Tags um
speechout: ein Arbeitsplatz ganz ohne Stimmeue_error, dann ein „laufendes“ Lesen: ue_started, jedes ue_sentence, ue_stopped; of_speak_sync gab 0 zurückue_error und sonst nichts: kein Lesen, kein ue_started; of_speak_sync gibt -4 zurück
speechout: is_lang ohne Region ("fr", "en")ue_voice_fallback bei jedem Lesenkein Ersatz für eine Stimme dieser Sprache, gleich welcher Region
speechout: of_clear_queue hinter einem of_speak (das laufende Lesen ist kein Text der Warteschlange)ue_queue_done am Ende des Lesenskein ue_queue_done: kein Text der Warteschlange wurde gelesen
speechout: eine Initiale (John F. Kennedy), ein abgekürzter Monat (Oct. 10), ein Akronym mit Punkten (U.S.)beendete den Satzbleibt im Satz (ein Monat oder ein Akronym beendet ihn vor einem Großbuchstaben, wie etc.): die Satznummern können sich ändern
statusbar: ein anklickbarer, ausgegrauter Bereich mit Tooltipder Tooltip erschien nieer erscheint, um zu sagen, warum der Bereich ausgegraut ist
statusbar: of_count, of_keys_at, of_has auf der Adresse eines Bereichs ("enc")0, "", false: die Einträge seiner Liste wurden nicht gesehendie Einträge seiner Liste, ohne Trenner
statusbar: eine Position in einer Dropdown-Liste (of_insert_menu_item, of_move_menu_item)zählte die Trenner mitzählt nur die Einträge, wie die Positionen der Bereiche
statusbar: ein Bereichs- oder Eintragsschlüssel, der mit __ beginntangenommenabgelehnt, -5: er ist der Komponente vorbehalten
statusbar: is_tooltip und die fünf Farben auf einem Listeneintrag (of_menu_item)gespeichert und gelesen, ohne Wirkungignoriert, leer gelesen (-1 für eine Farbe): das native Menü zeigt sie nicht
statusbar: der Griff (ib_show_resize_grip) in einem MDI-Blatt, oder eine Leiste, die nicht am unteren Rand ihres Fensters liegter änderte die Größe des Rahmens, von seiner Ecke auser ändert die Größe des Blatts; kein Griff, wenn die Leiste nicht in der unteren Ecke sitzt
statusbar: die Menü-Taste oder Umschalt+F10 auf einem fokussierten Bereichnichtsue_panel_rclicked, an der Ecke unten links des Bereichs
stepbar: Eingabe oder Leertaste auf einem Schritt, in einem Fenster mit Standardschaltflächeue_step_clicked und die Standardschaltfläche („Weiter“) wurde ausgelöstnur ue_step_clicked: die Taste bleibt bei der Leiste
stepbar: of_clear_steps, während die Leiste auf einem Schritt stehtlöste nichts ausue_step_changed(verlassener Rang, verlassener Schlüssel, 1, ""), wie das Entfernen des aktuellen Schritts; of_reset löst nichts aus
stepbar: ii_current jenseits von „alles erledigt“ (weiter als Anzahl der Schritte + 1)ue_step_changed meldete sofort einen Rang, den es nicht gab; das Eintreffen des Schritts blieb stummnichts wird ausgelöst, solange die Leiste wartet; ue_step_changed wird ausgelöst, wenn der Schritt eintrifft
stepbar: of_move_step auf einer Leiste auf „alles erledigt“konnte die Leiste wieder öffnen: ein Schritt wurde wieder aktuell, mit ue_step_changeddie Leiste bleibt auf „alles erledigt“, nichts wird ausgelöst
stepbar: NAV_VISITED, ein vor den aktuellen Schritt eingefügter oder verschobener Schrittanklickbarals erledigt angezeigt, aber nicht anklickbar: er wurde nie erreicht
stepbar: ein Schritt mit Warnung (STATE_WARNING)eine bernsteinfarbene Markierungeine bernsteinfarbene Markierung mit zweitem Ring: er sieht nicht mehr wie ein erledigter Schritt aus, wo der Akzent bernsteinfarben ist
statictext: ue_hyperlink(string as_url)(string as_url, boolean ab_opened): ein bereits geschriebenes Skript des Events bleibt gültig; ab_opened ist FALSE, wenn sich der Link nicht geöffnet hat (ein anderes Schema als http, https, mailto — of_get_last_error() sagt warum —, oder von ue_hyperlink_opening geschlossen gehalten)
statictext deaktiviert auf einem eigenen Hintergrund (il_back_color, ein [bk]-Abschnitt)der Text nahm das Grau des Designs an, unlesbar auf einem dunklen oder farbigen Hintergrundseine Farben bleiben erhalten und werden abgeschwächt; auf der Fläche des Designs das Grau des Designs, wie bisher
statictext: PBT_SetDefaultFont mit einer Größedie Größe blieb bei 11 ptdie angegebene Größe gilt (11 pt ohne sie, unverändert)
statictext: ii_font_size außerhalb von 6 bis 200unverändert angewendetauf die nächste Grenze zurückgeführt, wie das [size]-Tag, und so zurückgelesen, wie angewendet
statictext: Doppelklick auf ein Wort mit ib_selectableein einziges ue_clicked vor ue_double_clickedzwei ue_clicked, dann ue_double_clicked, wie der StaticText von PowerBuilder; das Loslassen nach einem markierenden Ziehen bleibt ohne Klick
statictext: of_reset eines als abgeschnitten gemeldeten Textesnichtsue_text_overflow(false)
statictext: is_text nach of_append_text gelesen, wenn eine Zeile ein Tag offen ließ[b]Start[br]two: erneut gesetzt, lief der Fettdruck in die nächste Zeile weiter[b]Start[/b][br]two, was der Bildschirm zeigt; eine leere Zeile behält ihre Höhe; unter ib_marquee laufen die Zeilen als eine Zeile
statictext: ib_auto_width und ein geleerter Textbehielt die Breite des vorherigen Textesschrumpft auf seinen Innenabstand; ein Designwechsel misst die Breite ebenfalls neu
xml: of_count, of_get_values, of_get_attrs, of_get_attr_names, wenn nichts geladen ist, ein gebautes Element noch offen ist oder die Engine den XPath ablehntlieferten 0, wie eine Suche ohne Trefferliefern -4 (-2, wenn die Seite nicht antwortet), of_get_last_error() sagt warum; 0 ist immer eine echte Null. Ein Test > 0 ändert sich nicht; ein Test = 0, der „nichts gefunden“ bedeutete, sieht die Ablehnung jetzt getrennt
xml: of_get_attr und of_remove_attr eines fehlenden Attributs, of_get_attrs mit leerem Namenleer ohne Grund, 0 („erledigt“), 0leer und „no such attribute“ in of_get_last_error() (ein leer geschriebenes Attribut bleibt ohne Grund), -4, -5
xml: of_set_value, of_set_attr, of_add_child mit einem Text, der ein Steuerzeichen (Char(1)) oder ein CR enthältunverändert geschrieben: das Dokument ließ sich nicht mehr laden, das CR kam als LF zurückdas verbotene Zeichen wird entfernt, wie beim Builder; das CR wird &#13; geschrieben und so zurückgelesen
xml: Builder — ein zweites Element auf oberster Ebene, ein Text ohne offenes Element, ein Attribut nach einem Kindgeschrieben (zwei Wurzeln) oder wortlos ignoriertweggelassen, und of_get_last_error() sagt warum
xml: of_get_value("sum(//qty)") über einen Text, der keine Zahl ist; of_get_value("/")der Text NaN; leerleer und „the expression is not a number“; der Text des Dokuments

Das Rezept: nichts zu ändern.

12.6 Was hinzugekommen ist #

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

ObjektHinzugefügt
progressbaris_unit: ein Text nach dem Ablesewert ("of 500 rows", "MB")
datagridis_mask einer Spalte (n_pbt_datagrid_column): die Eingabemaske einer numerischen Spalte; eine Spalte ohne Anzeigeformat zeigt ihre is_mask
datagriddie Tastatur der Spaltenköpfe (Pfeil nach oben ab der ersten Zeile; Eingabe sortiert, Umschalt+Eingabe fügt der Sortierung hinzu; Alt+Ab oder die Menütaste öffnet das Menü der Spalte; Strg+Umschalt+Pfeile verschieben sie, Alt+Pfeile ändern ihre Breite); TYPE_TIME; of_get_last_error sagt, warum ein Aufruf -5 lieferte
ribbonis_mask und is_format eines Drehfelds (n_pbt_ribbon_item); is_group: sich ausschließende Umschalter einer Gruppe (n_pbt_ribbon_item) und Optionseinträge eines Menüs (n_pbt_ribbon_menu_item); ue_item_rclicked (Rechtsklick auf ein Steuerelement, eine Gruppe, eine Registerkarte oder eine Schaltfläche der Symbolleiste für den Schnellzugriff, mit dem Bildschirmpunkt al_x, al_y; auch Menütaste und Umschalt+F10) und ue_rclicked (außerhalb jedes Items); is_title einer kontextbezogenen Gruppe (n_pbt_ribbon_ctx_group), deren QuickInfo auf dem Banner erscheint; Zugriffstasten der Schaltflächen der Symbolleiste für den Schnellzugriff; Item-Farben der Menüeinträge und der Schaltflächen der Symbolleiste für den Schnellzugriff; barrierefreie Namen aller Steuerelemente
breadcrumbdie Pfadeingabe wird zur Adressleiste: ib_auto_complete, ue_path_typing und of_add_suggestion (Vervollständigung beim Tippen), ib_veto_path, ue_path_entering und is_path_error (ein abgelehnter Pfad behält die Eingabe)
chartcartesianof_from_datastore (DataStore, DataWindow, DataWindowChild), of_map und die Konstanten ROLE_*, of_reload: die Grafik eines DataWindow (Zeilen je Kategorie und Reihe summiert, an Ort und Stelle neu gelesen); of_set_point_color / of_get_point_color; ue_point_rclicked, ue_rclicked; of_get_categories; of_remove_axis_section
codeeditorof_undo, of_redo, ib_can_undo, ib_can_redo und ue_undo_state_changed (der steuerbare Rückgängig-Verlauf); ue_modified_changed; of_toggle_comment (Strg+/); of_next_marker (F8); ib_match_brackets; ib_tab_moves_focus (Strg+M)
cryptoBlobs (of_base64_encode_blob, of_base64_decode_blob, of_hash_blob, of_hmac_blob, of_crc32_blob, of_encrypt_blob, of_decrypt_blob); of_base64_encode_file_to_file; of_jwt_verify_jwks, of_jwk_to_pem, of_pem_to_jwk; die erwarteten Claims von of_jwt_verify und il_jwt_leeway_seconds; JWT_HS384/HS512, JWT_RS384/RS512, JWT_PS256/PS384/PS512, JWT_ES384 und KEY_EC_P384; Schema und Hash von of_sign / of_verify (SIGN_PKCS1, SIGN_PSS); die Zusatzdaten von of_encrypt_with_key / of_decrypt_with_key; der Hash von of_rsa_encrypt / of_rsa_decrypt; die Einstellungen von of_totp_code, of_totp_verify, of_totp_uri und of_hotp_code; of_password_needs_rehash
buttonbaris_style einer Schaltfläche (STYLE_PRIMARY, STYLE_FLAT, STYLE_DANGER), is_badge (eine Text-Plakette), il_badge_color, is_mnemonic, ii_image_size und ii_badge_size der Leiste, ib_enabled der ganzen Leiste, ue_button_rclicked und ue_rclicked, of_clear_shortcuts
commandpaletteof_load_menu(menu): die Palette aus einem PowerBuilder-Menü gefüllt, bei jedem Öffnen neu gelesen; of_loaded_item(as_key) liefert das Element eines Befehls; of_get_last_error()
dockcontainerib_front eines Panels (n_pbt_dock_panel, nur lesend): das Panel, das sein Stapel zeigt; der Eintrag Automatisch ausblenden im Panel-Menü, auch auf der Lasche der Leiste; Umschalt+F10 und die Menütaste öffnen dieses Menü unter der Registerkarte; das aktive Panel, das die Tastatur hat: of_active_panel() und ue_active_panel_changed(as_key)
crosstabof_value(position) und sein Handle n_pbt_crosstab_value (ein Wert des Bereichs Werte: is_agg, is_show, is_conditional_formatting, is_format, ib_negative_red, is_label, of_field()); of_value_count, of_remove_value, of_move_value; of_get_cell_rows (die Zeilen des DataStore hinter einer Zelle); is_format eines Feldes; AGG_COUNT_ROWS, LABEL_BEFORE, LABEL_AFTER
messageboxof_messagebox (die Argumente von MessageBox(), Question! und YesNo! inbegriffen) und die Konstanten BUTTONS_*; of_retry_cancel; die Standardschaltfläche von of_confirm, of_yes_no, of_yes_no_cancel (al_default); Wiederholen, Abbrechen, Ignorieren, Schließen übersetzt; ib_closable, ib_sound; is_details, is_details_label; is_footer, is_footer_icon; ib_input_multiline, il_input_max_length, is_input_pattern, is_input_error; of_prompt, das maskiert und verlangt; eine deaktivierte Wahl (of_add_choice, ab_enabled)
jsontreeof_get_layout, of_set_layout und ue_layout_changed (die Faltungen, die Auswahl, die oberste Zeile); of_selected_addressable, of_selected_type, of_selected_count, of_copy_path; ue_node_rclicked (Rechtsklick, Menütaste); ib_find_decoded (die Suche in den decodierten Werten, Schalter &)
xmltreeof_find_xpath (jeder Knoten eines XPath, durchlaufen mit of_search_next); of_get_layout, of_set_layout und ue_layout_changed (die Faltungen, die Auswahl, die oberste Zeile); of_selected_kind (Konstanten KIND_*), of_selected_name, of_selected_namespace, of_copy_path; ue_node_rclicked (Rechtsklick, Menütaste); ib_find_decoded (die Suche in den decodierten Werten, Schalter &)
jsonof_from_datastore und of_to_datastore (DataStore, DataWindow, DataWindowChild): ein DataStore als Array typisierter Objekte und zurück; Datumswerte nach ISO 8601 (of_set_date, of_set_datetime, of_set_time, of_add_date, of_add_datetime, of_add_time, of_get_date, of_get_datetime, of_get_time); of_get_last_error und of_error_position (wo ein Text kein JSON ist); of_escape_key
listbarue_item_invoked (ein Klick auf den Eintrag, der bereits ausgewählte eingeschlossen); ib_search, is_filter, ue_filter_changed (eine Suche); of_from_datastore (DataStore, DataWindow, DataWindowChild), of_map und die Konstanten ROLE_* (eine Zeile = ein Eintrag)
markdownviewis_base_path, ib_allow_html (eine kurze Liste harmloser HTML-Tags), ib_network_pictures, ib_remote_pictures, ib_tasks_editable und ue_task_toggled, ib_track_heading und ue_heading_visible, is_position, ii_zoom, of_selected_text, of_copy und Strg+Einfg, die Konstanten LINK_*; GitHub-Hinweise, nackte E-Mail-Adressen und Emojis
menubarof_load_menu(menu): die ganze Leiste aus dem PowerBuilder-Menü eines Fensters, bei jedem Öffnen neu gelesen, seine Clicked-Skripte ausgeführt; of_loaded_item; of_insert_item (ein Eintrag an einem Rang) und of_clear_items (eine Kaskade leeren und den Eintrag behalten); of_open, of_close, of_is_open
pdfviewerof_load_blob(blob) und of_load_blob(blob, string): ein PDF in einem Blob (mit SELECTBLOB gelesen), ohne Datei angezeigt, gleich welcher Größe; is_find (ein beim Öffnen hervorgehobener Text); ib_navigation_pane (die Seitenleiste des Betrachters); is_destination (an einem benannten Ziel des PDF öffnen); ib_allow_search, ib_allow_rotate und ib_allow_fullscreen (die Befehle Suchen, Drehen und Vollbild der Leiste des Betrachters)
pictureof_set_picture(blob): ein im Speicher gehaltenes Bild (SelectBlob), wie SetPicture des nativen Picture; ib_clickable: das Bild wird zur Schaltfläche für die Tastatur (Tab, Eingabe, Leertaste); die Formate TIFF, WMF, EMF und RLE, im Flug umgewandelt; ein Name für Bildschirmleser, der die Plakette und den Fehlschlag nennt
radialmenuof_show_over(dragobject ado_control {, boolean ab_keyboard}): das Rad zentriert auf einem Steuerelement, sein erster Zweig leuchtet, wenn es von der Tastatur kommt; auf dem Zweig-Handle is_image (Symbol an Ort und Stelle geändert), is_tone (Konstanten TONE_* von u_pbt_radialmenu) und is_group (Optionsgruppe)
restclientof_url und of_url_encode (eine kodierte URL-Abfrage); of_post_form und of_post_form_async (ein HTML-Formular); of_oauth_client_credentials (ein sich selbst erneuerndes OAuth2-Token); of_retrieve (DataStore, DataWindow, DataWindowChild: ein JSON-Array als Zeilen); die Header einer einzelnen Anfrage (of_request und of_request_async, viertes Argument as_headers); is_last_request; ib_check_revocation
statusbarib_spring (und eine Breite von -1 in of_add_panel, of_insert_panel): ein Bereich, der den freien Platz nimmt; of_dock_bottom (die Leiste am unteren Fensterrand); is_help und is_help_panel (die MicroHelp eines PowerBuilder-Rahmens); ib_announce (Bildschirmleser); der Tooltip eines gekürzten Textes
tilesboxof_move_tile(as_keys, as_to_key, al_position): eine vom Code in eine andere Gruppe geschickte Kachel, mit Farben, Plakette und Seiten; Esc bricht ein Ziehen ab, das Panel rollt, wenn sich der Mauszeiger seinem Rand nähert; ein Bildschirmleser hört die Plakette und das Laufband einer Kachel; ein SVG-Symbol bleibt auf einer großen Kachel scharf; die Kopfzeile einer Gruppe hellt sich unter dem Mauszeiger auf; die Windows-Einstellung „weniger Animationen“ wird beachtet
statictextib_mnemonic (das & einer PowerBuilder-Beschriftung), ii_max_lines (höchstens N Zeilen, „…“), il_max_log_lines und of_clear (ein begrenztes, geleertes Protokoll), ii_max_width (Obergrenze von ib_auto_width), ib_veto_links und ue_hyperlink_opening (entscheiden, ob sich ein Link öffnet); ein Protokoll wird Bildschirmlesern Zeile für Zeile angesagt; deaktiviert verlassen die Bereiche der Auszeichnung die Tab-Reihenfolge
xmlof_get_number, of_get_decimal, of_get_longlong, of_get_boolean, of_get_date, of_get_datetime: der Wert am XPath, gegen seinen XML-Schema-Typ geprüft und auf jedem Rechner gleich gelesen (NULL und of_get_last_error(), wenn er nicht von diesem Typ ist)
xmlÜberladungen decimal, date, datetime, boolean von of_leaf, of_element_attr und of_set_value: mit Punkt und in ISO 8601 geschrieben, unabhängig vom Rechner

12.7 buttonbar: Schlüssel, Beschriftung, dann Symbol; das „&“ und das Kürzel #

Die Schaltflächenleiste sprach anders als der Rest der Bibliothek: das Symbol vor der Beschriftung, die Position als zweites Argument und ein is_shortcut, das „Alt-Buchstabe“ bedeutete, wo es überall sonst „Kürzel“ bedeutet — is_shortcut = "Ctrl+S" belegte Alt+C. 5.0 gleicht sie an button, die Symbolleiste und den CommandButton von PowerBuilder an.

Was4.05.0
Eine Schaltfläche hinzufügenuo.of_add_button("save", "img\save.png", "Save")uo.of_add_button("save", "&Save", "img\save.png")
Eine reine Textschaltflächeuo.of_add_button("ok", "", "OK")uo.of_add_button("ok", "OK")
Eine Schaltfläche einfügenuo.of_insert_button("mid", 2, "", "Mid")uo.of_insert_button("mid", "Mid", "", 2)
Der Alt-Buchstabe einer Schaltflächeis_shortcut ← "S" (Alt+S)die Beschriftung "&Save" oder uo.of_button("save").is_mnemonic = "S"
Ein Kürzel auf einer Schaltflächeuo.of_register_shortcut("Ctrl+S", "save")dasselbe oder uo.of_button("save").is_shortcut = "Ctrl+S" — im Tooltip angezeigt
Ein „&“ in einer Beschriftungunverändert angezeigtmarkiert den Alt-Buchstaben; && für ein geschriebenes „&“
Die Plaketteuo.of_button("inbox").il_badge = 3uo.of_button("inbox").is_badge = "3" (ein Text: "New", "!"); il_badge wird weiter akzeptiert
Die fokussierte Schaltfläche, ohne is_defaultvoll im Akzent gefärbtnur sein Fokusrahmen
// 4.0 : the icon before the label
uo_bar.of_add_button(/*key*/ "save", /*image_file*/ "img\save.png", /*text*/ "Save")

// The Alt letter went to is_shortcut (the letter S alone), the chord to of_register_shortcut
uo_bar.of_register_shortcut(/*chord*/ "Ctrl+S", /*key*/ "save")
// 5.0 : key, label, icon - the "&" of the label gives Alt+S
uo_bar.of_add_button(/*key*/ "save", /*text*/ "&Save", /*image*/ "img\save.png")

// The chord is a property of the button, shown in its tooltip
uo_bar.of_button(/*key*/ "save").is_shortcut = "Ctrl+S"

Das Rezept: Kompilieren Sie; ein Aufruf von of_insert_button wird gemeldet (die Position kommt zuletzt). Ein of_add_button mit drei Argumenten kompiliert weiterhin: Vertauschen Sie die letzten beiden (die Beschriftung, dann das Symbol) — eine Schaltfläche, deren Beschriftung ein Dateipfad ist, zeigt Ihnen die übrigen. Ersetzen Sie jedes is_shortcut aus einem Buchstaben durch ein „&“ in der Beschriftung und verdoppeln Sie jedes „&“, das angezeigt werden soll (R&&D).

12.8 crosstab: das Format der Werte über is_format #

Die Kreuztabelle schrieb die Zahlen einer Kennzahl über eine Funktion mit vier oder fünf Argumenten (Dezimalstellen, Tausendertrennzeichen, Symbol, Symbol davor), die für alle Werte eines Feldes galt: Dasselbe Feld zweimal in Werte — der Betrag und sein Anteil an der Summe — konnte keine zwei Formate haben. 5.0 stellt es unter die Sprache der Diagramme und Anzeigen: ein PowerBuilder-Anzeigeformat in is_format, auf dem Handle des Feldes (of_field) für alle seine Werte oder auf dem Handle eines Wertes (of_value(position), neu) nur für ihn. Leer übernimmt ein Wert das Format der DataWindow-Spalte. Kein alter Name bleibt.

Was4.05.0
Das Format aller Werte eines Feldesuo.of_set_value_format("amount", 2, "locale", "$", true)uo.of_field("amount").is_format = "$#,##0.00"
Ein Symbol nach der Zahluo.of_set_value_format("amount", 0, "", " EUR")uo.of_field("amount").is_format = '#,##0" EUR"'
Das Format eines Wertes (dasselbe Feld zweimal)—uo.of_value(2).is_format = "#,##0.00"
Negative in Rotnur das Chip-Menüuo.of_value(1).ib_negative_red = true
Zurück zum Standardformatuo.of_clear_value_format("amount")uo.of_field("amount").is_format = "" (das Format der DataWindow-Spalte)
// 4.0 : decimals, thousands, symbol and its side as arguments - for every value of the field
uo_cross.of_set_value_format(/*field*/ "amount", /*decimals*/ 2, /*thousands*/ "locale", /*suffix*/ "$", /*symbol_before*/ true)
// 5.0 : a display format, written as in a DataWindow - for the field, then for its second value alone
uo_cross.of_field(/*field*/ "amount").is_format = "$#,##0.00"
uo_cross.of_value(/*position*/ 2).is_format = "#,##0"

Das Rezept: Kompilieren Sie; jedes of_set_value_format und of_clear_value_format wird gemeldet. Schreiben Sie das Format wie in einem DataWindow: ai_decimals gibt die Zahl der 0 nach dem Punkt, ein Tausendertrennzeichen das Gruppierungs-, ("none": keines), das Symbol steht davor oder dahinter (in Anführungszeichen, wenn es Ziffern oder Leerzeichen enthält). Das Format eines einzelnen Wertes gehört in of_value(<Position>).is_format.

12.9 listbar: der Rechtsklick trägt seinen Punkt, eine Anordnung wird gemeldet #

Die Seitenleiste schließt sich der Bibliothek in drei Punkten an: Der Rechtsklick auf einen Eintrag liefert seinen Bildschirmpunkt wie bei den Bäumen, den Rastern und dem Kanban; ein Befehl des Codes, der die Anordnung ändert, meldet sie wie eine Geste; ein ausgegrauter Eintrag wird nicht mehr zur Auswahl. Sie erhält außerdem ein Ereignis für den Klick auf den bereits ausgewählten Eintrag, eine Suche und den Aufbau aus einem DataStore (12.6).

Was4.05.0
ue_item_rclicked(string as_keys)(string as_keys, long al_x, long al_y): der Punkt in Bildschirmpixeln; die Menütaste und Umschalt+F10 lösen es ebenfalls aus
of_set_layout, das die Anordnung ändertkein Ereignisein ue_layout_changed (nie ue_section_toggled)
of_move_item / of_move_section an den bereits gehaltenen Rangue_layout_changednichts: nichts hat sich bewegt
of_select_item eines ausgegrauten Eintrags0, er wurde zur Auswahl-5, ohne ue_selection_changing zu fragen; den bereits ausgewählten Eintrag auszugrauen, behält ihn
ib_auto_width gelesen, während die Leiste eingeklappt isttruewas die Anwendung gesetzt hat
of_item einer Adresse mit einer Ebene ("nav")erreichte den Abschnittein Handle, das nichts benennt; ein Abschnitt wird über of_section erreicht
Derselbe Buchstabe zweimal getipptein Präfix dd, oft ohne Trefferdie nächste Zeile, die mit ihm beginnt; ein Leerzeichen mitten im Präfix gehört dazu
Ein ausgegrauter Eintrag unter dem Mauszeigerohne Tooltipihr Tooltip erscheint; der Klick bewirkt weiterhin nichts
// 4.0 : PointerX() of the userobject - the menu opened too high under a ribbon
m_entry.PopMenu(PointerX(), PointerY())
// 5.0 : the pointer of the WINDOW for a PowerBuilder menu (al_x, al_y serve a menu of the library)
m_entry.PopMenu(parent.PointerX(), parent.PointerY())

Das Rezept: Nichts verweigert die Kompilierung — ein Skript von ue_item_rclicked behält as_keys. Öffnen Sie Ihr Menü am Mauszeiger des Fensters (parent.PointerX()), oder übergeben Sie al_x, al_y an of_show eines contextmenu. Setzen Sie die anfängliche Auswahl, bevor Sie ib_veto_selection einschalten, und prüfen Sie, dass Ihr ue_layout_changed den Aufruf verträgt, den of_set_layout jetzt auslöst.

12.10 scheduler: die Art einer Änderung und die bisherigen Werte #

Der Kalender schließt sich dem Gantt-Diagramm an: Die Frage vor einer Geste sagt, ob es ein Verschieben oder eine Größenänderung ist, und die folgenden Ereignisse liefern die bisherigen Werte — ein Protokoll, ein Rückgängigmachen oder eine Bestätigung müssen keine eigene Kopie jedes Termins mehr führen. Eine Auswahl, die Ihr Code entfernt, wird gemeldet, und vier Aufrufe lehnen jetzt ab, was sie stillschweigend annahmen.

Was4.05.0
ue_appointment_changing(string as_key, string as_start, string as_end, string as_resource)(string as_key, string as_kind, string as_start, string as_end, string as_resource): as_kind ist CHANGE_MOVE oder CHANGE_RESIZE
ue_appointment_moved(string as_key, string as_start, string as_end, string as_resource)(string as_key, string as_start, string as_end, string as_resource, string as_old_start, string as_old_end, string as_old_resource)
ue_appointment_resized(string as_key, string as_start, string as_end)(string as_key, string as_start, string as_end, string as_old_start, string as_old_end)
Ihr Code entfernt, leert oder lädt den ausgewählten Termin neukein Ereignisue_selection_changed(""); of_reset bleibt stumm
of_add_appointment, dessen Ende vor dem Beginn liegt0, das Ende wurde Beginn + 30 Min.-5, of_get_last_error sagt warum
of_scroll_to_time("abc")0, nichts scrollte-5
of_set_field auf der Spalte mit ROLE_KEY0, zwei Termine mit einem Schlüssel-5: Ein Schlüssel ändert sich durch Neuladen
of_show_appointment eines ausgeblendeten, gefilterten oder auf einer ausgeblendeten Ressource liegenden Termins0, die Ansicht wechselte zu einem Tag, an dem nichts zu sehen war-5, nichts bewegt sich
is_now nach einer Navigation des Benutzers gesetztbrachte die Ansicht zu seinem Tag zurückdie Ansicht bleibt, wohin der Benutzer gegangen ist
of_clear_appointmentsbehielt die Spalten des DataStores für of_mapvergisst den DataStore: of_map akzeptiert die Spalten des nächsten
// 5.0 : ue_appointment_changing event of uo_sched : (string as_key, string as_kind, string as_start, string as_end, string as_resource) returns boolean
// A resize keeps the day : only a move is checked
if as_kind = u_pbt_scheduler.CHANGE_RESIZE then return true

// Nothing on a Saturday or a Sunday : returning false puts the appointment back
if DayNumber(Date(Left(as_start, 10))) = 1 or DayNumber(Date(Left(as_start, 10))) = 7 then return false
return true

Das Rezept: Nichts verweigert die Kompilierung — ein Skript von ue_appointment_changing, ue_appointment_moved oder ue_appointment_resized behält seine Argumente, die neuen kommen hinzu. Wenn Ihr ue_selection_changed Schaltflächen aktiviert, erhält es jetzt "", wenn der ausgewählte Termin verschwindet; prüfen Sie die Rückgabewerte von of_add_appointment, of_scroll_to_time, of_set_field und of_show_appointment, die jetzt -5 liefern können. Um die Gesten ohne Code zu speichern, siehe ib_write_back.

12.11 shellexplorer: der Fehler nennt seinen Grund #

Der Shell-Explorer gibt jetzt in ue_error wie in ue_path_not_found einen Grund, den Ihr Code prüfen kann — eine REASON_*-Konstante von u_pbt_shellexplorer, gleich in jeder Sprache von Windows. Er löst ue_selected für den bereits gewählten Ordner nicht mehr aus und meldet mit ue_collapsed einen Zweig, den er selbst schließt. Er erhält außerdem den Rechtsklick auf einen Ordner (ue_node_rclicked) und die Adresse der Wurzel.

Was4.05.0
ue_error(string as_message)(string as_path, string as_reason, string as_message): der Pfad ("" für den Desktop), eine REASON_*-Konstante, der Text der Shell
as_reason von ue_path_not_foundein englischer Satz (not found, outside the root, not a branch…)eine REASON_*-Konstante (not_found, outside_root, not_a_branch…); not_shown für einen Pfad, der existiert, den der Baum aber nicht zeigt
Den bereits gewählten Ordner erneut wählen (Klick, Pos1 auf der ersten Zeile)ue_selectednichts
Ein Zweig, den der Baum selbst schließt (leer zurückgekommen, von der Shell verweigert)kein Ereignisue_collapsed
ib_show_files, ib_show_hidden, is_file_filter, is_root mit ihrem Wert geschriebender Baum wird neu gelesennichts wird neu gelesen; is_file_filter ohne Dateien gesetzt wartet auf sie
of_collapse eines zweimal gezeichneten Pfadsjede Zeile, je ein ue_collapseddie Zeile, die of_select erreicht, ein ue_collapsed
of_count(""), of_keys_at("", i)die angezeigten Zeilen, wie of_count()die erste Ebene (die Wurzel), wie of_count(is_root)
// 5.0 : ue_error event of uo_tree : (string as_path, string as_reason, string as_message)
// Test the reason, never the text of the shell
if as_reason = u_pbt_shellexplorer.REASON_TIMEOUT then
    st_status.text = "The network folder " + as_path + " does not answer"
else
    st_status.text = as_message
end if

Das Rezept: Nichts verweigert die Kompilierung — ein Skript von ue_error behält as_message, die neuen Argumente kommen hinzu. Eine Prüfung auf den TEXT von as_reason in ue_path_not_found ("not found", "outside the root") wird mit einer REASON_*-Konstante neu geschrieben; eine Anwendung, die bei jedem ue_selected einen Bereich neu lud, tut es jetzt einmal je Änderung.

12.12 tilesbox: der Rechtsklick trägt seinen Punkt, ein Befehl des Codes wird gemeldet, die Anordnung überlässt die Rechte der Anwendung #

Das Kachel-Panel schließt sich der Bibliothek an: sein Rechtsklick liefert den Bildschirmpunkt wie bei den Bäumen, den Rastern und dem Kanban; ein Befehl des Codes, der eine Kachel verschiebt, eine Gruppe einklappt oder eine Größe ändert, löst dieselben Ereignisse aus wie eine Geste; die Anordnung enthält die Sichtbarkeit nicht mehr, sie bleibt Sache der Anwendung. Es erhält außerdem das Verschieben einer Kachel in eine andere Gruppe per Code (12.6).

Was4.05.0
ue_tile_context(string as_keys)ue_tile_rclicked (string as_keys, long al_x, long al_y): der Punkt in Bildschirmpixeln; die Menütaste und Umschalt+F10 lösen es ebenfalls aus, an der linken unteren Ecke der Kachel
of_move_tile, of_insert_tileinteger ai_indexlong al_position; eine Überladung of_move_tile(as_keys, as_to_key, al_position) schickt die Kachel in eine andere Gruppe
of_move_tile an eine andere Stellenichtsue_tile_moved, ue_layout_changed
ib_collapsed einer Gruppe, vom Code gesetztue_group_toggledue_group_toggled, ue_layout_changed
is_size, vom Code gesetztnichtsue_layout_changed (nie ue_tile_resized, das sagt, dass der Benutzer sie gewählt hat)
is_size einer unbekannten Größe ("huge")die Kachel wurde mediumabgelehnt: nichts wird geschrieben, of_get_last_error sagt warum; of_add_tile / of_insert_tile liefern -5
Die Anordnung (of_get_layout, ue_layout_changed)enthielt die Sichtbarkeit der Gruppen und Kachelnenthält sie nicht mehr: of_set_layout blendet nie wieder ein, was Ihr Code ausgeblendet hat; eine 4.0-Anordnung wird ohne sie gelesen
of_set_layout, das die Anordnung ändertkein Ereignisein ue_layout_changed; -5 bei einem JSON, das keine Anordnung ist ({})
of_tile / of_group einer Adresse, die nichts benenntein Handle pro Aufruf, behaltendas wirkungslose Handle, dasselbe für alle: es schreibt nichts und liest sich leer
// 4.0 : the right click of a tile
// ue_tile_context event of uo_tiles : (string as_keys)
// 5.0 : the same script, under the new name, with the screen point
// ue_tile_rclicked event of uo_tiles : (string as_keys, long al_x, long al_y)

Das Rezept: Kompilieren Sie; Ihr Skript von ue_tile_context bleibt an einem Ereignis, das es nicht mehr gibt — verschieben Sie es nach ue_tile_rclicked, das as_keys behält. Wenn Ihr ue_layout_changed die Anordnung speichert, sieht es jetzt auch, was Ihr Code ändert; ein ue_tile_moved, das nur auf den Benutzer reagieren soll, ignoriert die Verschiebungen, die Ihr Code gerade vorgenommen hat. Wenn Sie die Sichtbarkeit in der Anordnung aufbewahrt haben, setzen Sie sie beim Öffnen per Code (ib_visible), nach den Rechten.

12.13 tab: der Rechtsklick trägt seinen Punkt, eine angewendete Anordnung wird gemeldet #

Die Registerkarte schließt sich der Bibliothek an: Der Rechtsklick auf eine Registerkarte liefert bei ausgeschaltetem integriertem Menü seinen Bildschirmpunkt wie bei den Bäumen, den Rastern und dem Kanban, und of_set_layout, das die Anordnung ändert, meldet sie wie eine Geste. Ein an seinen Platz zurückgegebenes Ziehen meldet nichts mehr. Sie erhält außerdem bei Bedarf erzeugte Seiten (ue_page_needed, of_supply_page), den Doppelklick (ue_tab_double_clicked), ib_cycle_keys, is_close_mode, ii_strip_width und, auf einer Seite, ib_modified und is_badge — siehe die Seite der Registerkarte.

Was4.05.0
ue_tab_rclicked(string as_key)(string as_key, long al_x, long al_y): der Punkt in Bildschirmpixeln; die Menütaste und Umschalt+F10 lösen es ebenfalls aus, an der linken unteren Ecke der Registerkarte
of_set_layout, das die Anordnung ändertkein Ereignisue_layout_changed, einmal
ein an seinen Platz zurückgegebenes Ziehen, of_move_page an den eigenen Platzue_tab_reordered und ue_layout_changednichts: Die Reihenfolge hat sich nicht geändert
mehrere Verschiebungen unter of_set_redraw(false)ein ue_layout_changed pro Verschiebungein einziges, bei der Wiederaufnahme
Umschalt+F10 auf einer Registerkarte, integriertes Menüdas Menü öffnete sich unter der Mausunter der Registerkarte
senkrechte Leiste und langer Titeldie Leiste nahm die Breite des Titels anhöchstens 40 % der Komponente, Auslassungspunkte; ii_strip_width legt sie fest
il_accent einer Seitenur der Fokusrahmenunterstreicht auch die aktive Registerkarte
is_shortcut auf dem Handle eines Schlüssels ohne Seiteregistriert: Die Taste wurde umsonst belegtnichts wird registriert, of_get_last_error sagt warum
of_insert_page, dessen Verschiebung scheitertnegativer Code, die Seite bliebnegativer Code, die Seite wird wieder entfernt
// 4.0 : the right click of a tab, built-in menu off
// ue_tab_rclicked event of uo_tabs : (string as_key)
// 5.0 : the same script, with the screen point
// ue_tab_rclicked event of uo_tabs : (string as_key, long al_x, long al_y)

Das Rezept: Nichts verweigert die Kompilierung — ein Skript von ue_tab_rclicked behält as_key. Öffnen Sie Ihr Menü am Mauszeiger des Fensters (parent.PointerX()), oder übergeben Sie al_x, al_y an of_show eines contextmenu. Prüfen Sie, dass Ihr ue_layout_changed den Aufruf verträgt, den of_set_layout jetzt auslöst.

12.14 soundplayer: die Nummer eines Tons, eine sofort zurückgegebene Ablehnung #

Der Soundplayer ändert drei Dinge, die Ihr Code sehen kann. Seine Ereignisse tragen die Nummer des Tons: ue_started, ue_ended und ue_failed erhalten ein letztes Argument, al_sound — die Nummer, die of_play_over und of_enqueue jetzt liefern (sie lieferten 0) und die das neue of_stop_sound nimmt. Eine sofort abgelehnte Quelle ist ein Code: of_play, of_play_over, of_crossfade und of_preload liefern -5, den Grund in of_get_last_error(), für eine leere Quelle, eine http://-Adresse, eine fehlerhafte file://-Adresse oder ein über seinen Namen abgelehntes Format — und lösen kein ue_failed mehr aus; der laufende Ton spielt weiter. In der Warteschlange (of_enqueue) kommt die Ablehnung weiterhin über ue_failed, bei ihrer Runde. Weitere -5: of_pause und of_resume ohne etwas anzuhalten oder fortzusetzen, of_beep und of_beep_sync mit 0 Hz oder 0 ms, of_meter außerhalb von 1 bis 64 Balken.

// Local variables
string ls_url
long ll_rc

// The address of the sound, typed by the user
ls_url = sle_url.text

// 4.0 : of_play returned 0, and an http:// address came back later through ue_failed
// 5.0 : the refusal is a code, at once ; of_get_last_error() gives the reason
ll_rc = inv_sound.of_play(/*source*/ ls_url)
if ll_rc = -5 then
	MessageBox("Sound", inv_sound.of_get_last_error())
end if

Was sich ändert, ohne Ihrem Code etwas abzuverlangen: of_stop klingt jetzt über il_fade_ms aus, wie die Dokumentation es versprach (ue_stopped kommt weiterhin sofort); wenn il_timeout_ms abläuft, wird nur der Ton des synchronen Aufrufs abgebrochen — der Hintergrund, die Überlagerungen und die Warteschlange laufen weiter; of_crossfade zu einer abgelehnten Quelle behält den laufenden Titel; of_level ist 0 und of_spectrum liefert keinen Balken, wenn der Meter aus ist; of_equalizer(ab_on, ai_gains[]) setzt ein Band, das das Array nicht erreicht, auf 0 zurück; of_clear_queue vergisst auch die Töne, die die Warteschlange schon gespielt hat; die Meldungen von ue_failed folgen der Anzeigesprache (as_reason bleibt das zu prüfende Wort). Der Player erhält außerdem die bewegliche Warteschlange (of_next, of_previous, of_queue_index, ue_source_changed, ib_queue_repeat), die lückenlose Schleife (ib_gapless_loop, REASON_TOO_LONG), den Abschnitt (of_play_range), die Stummschaltung (ib_muted) und die Pufferung (ue_buffering, of_is_buffering) — siehe die Seite des Soundplayers.

Das Rezept: Nichts verweigert die Kompilierung — ein Skript von ue_started, ue_ended oder ue_failed behält seine Argumente, al_sound kommt hinzu. Prüfen Sie die Rückgabewert-Tests von of_play_over und of_enqueue (aus = 0 wird > 0) und den Code, der für eine http://-Adresse oder eine leere Quelle auf ue_failed wartete: er prüft jetzt das -5 des Aufrufs.

12.15 toaster: der Grund eines Schließens, ein vom Code geschlossener Toast meldet sich immer #

Der Toaster sagt, warum ein Toast geschlossen wurde: ue_toast_dismissed erhält ein letztes Argument, as_reason — REASON_TIMEOUT, REASON_USER (sein Kreuz), REASON_CODE (of_close, of_close_all) oder REASON_OWNER_CLOSED (sein Fenster wurde geschlossen). Und jeder vom Code geschlossene Toast meldet es, auch direkt nach of_show, bevor er gezeichnet wurde, oder während er auf seinen Platz wartete: Eine Anwendung, die auf ue_toast_dismissed wartete, um ihren Zustand freizugeben, hängt nicht mehr von einem Wettlauf ab.

Was4.05.0
ue_toast_dismissed(long al_id, string as_key)(long al_id, string as_key, string as_reason), constants REASON_*
of_close eines noch nicht gezeichneten oder wartenden Toastsnichts wurde ausgelöstue_toast_dismissed, REASON_CODE
of_close eines Toasts eines anderen Toastersschloss ihn, die Meldung ging an den anderen-5, nichts wird geschlossen, of_get_last_error sagt warum
das Fenster von ipo_owner wird geschlossenseine Toasts verschwanden wortlosue_toast_dismissed, REASON_OWNER_CLOSED
ein zerstörter Toaster, Toasts auf dem Bildschirmsie blieben, stummdie dauerhaften und die mit Schaltflächen schließen sich mit ihm; die anderen enden von selbst
of_show, bevor die Anzeige-Engine bereit ist-6: „Runtime fehlt“-4: erneut versuchen; of_get_last_error sagt warum
Ecke eines am Fenster verankerten Toastsdas ganze Fenster: der Toast verdeckte die Titelleiste und ihre Schaltflächender Clientbereich (der des Rahmens bei MDI)
ein sehr langer Titelschob das Kreuz und die Schaltflächen aus dem Fensterbegrenzt, er scrollt
// 4.0
// Event ue_toast_dismissed von inv_toaster : (long al_id, string as_key)
// 5.0 : dasselbe Skript, mit dem Grund
// Event ue_toast_dismissed von inv_toaster : (long al_id, string as_key, string as_reason)

Das Rezept: Nichts verweigert die Kompilierung — ein Skript von ue_toast_dismissed behält al_id und as_key, as_reason kommt hinzu. Prüfen Sie den Code, der annahm, ein sofort durch of_close geschlossener Toast würde nichts sagen: Er meldet es jetzt. Toasts bleiben an den Toaster gebunden, der sie gezeigt hat: Ein of_close auf die Kennung eines anderen Toasters liefert -5. Der Toaster erhält außerdem of_close_all (alle seine Toasts schließen) und of_get_last_error — siehe die Seite des Toasters.

12.16 video: eine sofort zurückgegebene Ablehnung, ein Film und seine Untertitel in einem Aufruf, derselbe Film fortgesetzt #

Der Videoplayer ändert fünf Dinge, die Ihr Code sehen kann. Eine Ablehnung wird sofort zurückgegeben, wie beim Soundplayer (12.14): of_play(), of_play(source) und of_play_range geben -5 zurück, den Grund in of_get_last_error(), für eine leere Quelle, eine http://-Adresse oder ein an seinem Namen abgelehntes Format (avi, wmv, flv) — und lösen kein ue_failed mehr aus; der laufende Film geht weiter. Die Eigenschaft is_source behält ihr ue_failed: eine Eigenschaft hat keinen Rückgabecode. Derselbe Film wird nicht neu geladen: of_play(source) oder is_source auf dem bereits geladenen Film setzt ihn fort, wo er ist (ue_resumed), statt ihn neu zu starten; of_seek(0) startet ihn neu. Eine Suche bleibt im Abschnitt von of_play_range, die des Benutzers wie of_seek: Pos1 geht zum Anfang des Abschnitts, ein Klick hinter sein Ende zu seinem Ende — vorher verließ Pos1 den Ausschnitt, und ein Klick dahinter hielt den Film an. Ein nicht abspielbarer Listeneintrag löst zuerst ue_source_changed aus, dann ein einziges ue_failed — es kam vorher, und zweimal. of_stop wird eine Funktion: es gab nichts zurück (Subroutine), es gibt 0 zurück, oder -2, wenn die Komponente nicht erzeugt ist — wie of_stop des Webbrowsers.

// Local variables
string ls_path
long ll_rc

// The film chosen by the user
ls_path = sle_film.text

// 4.0 : of_play returned 0, and an http:// address or an .avi came back later through ue_failed
// 5.0 : the refusal is a code, at once ; the reason is in of_get_last_error
ll_rc = uo_video.of_play(/*source*/ ls_path)
if ll_rc = -5 then
	MessageBox("Video", uo_video.of_get_last_error())
end if

Was sich ändert, ohne Ihrem Code etwas abzuverlangen: eine Marke, die durch eine Suche WÄHREND DER PAUSE erreicht wird, löst kein ue_marker_reached mehr aus (nur ue_seeked); Leertaste und Wiedergabe-Schaltfläche eines Players ohne Film tun nichts mehr (sie lösten ue_failed(REASON_NO_SOURCE) aus); die vom Benutzer gewählte Untertitelsprache folgt zum nächsten Film der Liste; ein http://-Poster wird abgelehnt und is_poster liest sich leer; ein abgelehntes is_subtitles liest sich leer; eine nicht auffindbare Untertiteldatei des Arbeitsplatzes löst ue_subtitles_failed(REASON_NOT_FOUND) aus; das Geschwindigkeitsmenü ist per Tastatur bedienbar, und seine Pfeile ändern die Lautstärke nicht mehr; im Vollbild zeigt sich die Leiste über die Tastatur; die gemerkte Position (ib_remember_position) hängt nicht mehr von der Schreibweise des Pfads ab, und nur die letzten 200 Filme werden behalten (eine Position aus 4.0 wird noch einmal gelesen). Der Player erhält of_play(source, subtitles) (der Film und SEINE Untertitel: vor einem zweiten Film gesetzt, gingen sie mit dem ersten), ib_forward_seek, of_watched_ms, of_watched_percent, ue_watched_completely und ib_skip_failed — siehe die Seite des Videoplayers.

Das Rezept: nichts verweigert das Kompilieren. Lesen Sie den Code noch einmal, der nach of_play für eine http://-Adresse, eine leere Quelle oder eine .avi auf ue_failed wartete: er prüft jetzt die -5 des Aufrufs. Lesen Sie auch eine „Abspielen“-Schaltfläche noch einmal, die sich darauf verließ, dass of_play(source) von vorn beginnt: fügen Sie of_seek(0) hinzu.

12.17 webbrowser: eine Geste des Benutzers wird erfragt, eine Seite von of_show_html hat keine Adresse #

Mit ib_veto_navigation = true wird ue_navigating jetzt auch für eine Geste des Benutzers erfragt: eine in die Leiste getippte Adresse, Link öffnen im Kontextmenü, ein durch einen Klick geöffnetes neues Fenster. In 4.0 fragten diese drei Wege nicht. Nur eine von Ihrem Code gesetzte Adresse wird nie erfragt, ebenso wenig eine Umleitung des Servers: Für eine Serverliste, die auch für Umleitungen gilt, setzen Sie die neue Eigenschaft is_allowed_hosts.

Was4.05.0
ue_navigating unter dem Veto: getippte Adresse, Link öffnen, neues Fensterdie Seite öffnete sich ohne Rückfragedie Rückfrage wird gestellt; false behält die Seite
is_address, die Leiste, ue_load_completed nach of_show_htmldie ganze Seite, kodiert (data:text/html;charset=utf-8,…, bis zu 2 MB)""
is_title einer Seite ohne <title>ihre Adresse""
of_go_back, of_go_forward, of_stopohne Rückgabewertlong: 0, sobald angefordert, -2 Komponente nicht erstellt
ib_private nach einer Seite geändertis_address, is_title, die Leiste und die Pfeile behielten die vorherige Seitealles liest sich leer: die Ansicht ist neu
Eingabe in einer leeren Adressleistedie Seite wurde leernichts
Eine Seite der Website lädt, Adressleiste angezeigtNeu laden bleibt Neu ladenNeu laden wird zu Abbrechen und kehrt zurück, sobald die Seite geladen ist

Das Rezept: nichts verweigert das Kompilieren, ein ignorierter long kompiliert. Ein für die Links der Website geschriebenes Skript von ue_navigating sieht jetzt auch die vom Benutzer getippten Adressen: Wenn es anhand der Adresse entscheidet, soll es deren Host vergleichen, wie das Beispiel der Komponentenseite — oder überlassen Sie die Liste is_allowed_hosts. Code, der as_url von ue_load_completed oder is_address nach of_show_html las, erhält eine leere Zeichenkette.

12.18 toolbar: der Rechtsklick trägt seinen Punkt, ein Befehl des Codes wird gemeldet #

Die Symbolleiste schließt sich der Bibliothek an: der Rechtsklick eines Werkzeugs liefert seinen Bildschirmpunkt, wie bei den Bäumen, den Rastern und der Registerkarte, und das Verschieben einer Leiste per ii_band / ii_index löst ue_bar_reordered wie die Geste aus. Zwei Hinzufügungen lehnen ab, was sie stillschweigend annahmen, und ein Tastenkürzel, das dort gesetzt wird, wo nichts lebt, wird nicht mehr registriert. Sie erhält außerdem is_text auf einer Leiste, einen von einem Bildschirmleser gelesenen Namen für jedes Werkzeug und jedes Feld sowie eine Tastatur, die die Felder durchquert — siehe die Seite der Symbolleiste.

Was4.05.0
ue_item_rclicked(string as_keys)(string as_keys, long al_x, long al_y): der Punkt in Bildschirmpixeln; die Menütaste und Umschalt+F10 lösen es ebenfalls aus, an der unteren linken Ecke des Werkzeugs, ebenso der Rechtsklick eines Feldes
ii_band / ii_index, die eine Leiste verschiebenue_layout_changedue_bar_reordered, ue_layout_changed
of_add_datepicker mit einem Datum, das nicht jjjj-mm-tt ist ("31/12/2026")0, das Datum unverändert angezeigt-5, nichts wird hinzugefügt
of_add_menu_separator auf einem Eintrag ohne Untereintrag0: der Eintrag wurde grau und ließ sich nicht mehr wählen-5
is_shortcut oder of_register_shortcut auf einer Adresse ohne Inhalt, einem Eintrag mit Kaskade oder einer Auswahl einer Listeregistriert: die Taste wurde im ganzen Fenster abgefangennichts registriert; of_register_shortcut liefert -5, of_get_last_error sagt warum
Strg+A, Strg+C, Strg+V, Strg+X, Strg+Z, Strg+Y in einem Feld der Leistedas Werkzeug mit dem Tastenkürzel wurde ausgelöstdas Feld bearbeitet seinen Text
is_text einer Datumsauswahlbehalten und zurückgelesen, nie angezeigtignoriert, liest ""
// 4.0 : the right click of a tool
// ue_item_rclicked event of uo_toolbar : (string as_keys)
// 5.0 : the same script, with the screen point
// ue_item_rclicked event of uo_toolbar : (string as_keys, long al_x, long al_y)

Das Rezept: nichts verweigert die Kompilierung — ein Skript von ue_item_rclicked behält as_keys. Öffnen Sie Ihr Menü am Punkt al_x, al_y (übergeben Sie ihn an of_show eines contextmenu). Prüfen Sie, dass ein Skript von ue_bar_reordered auch die Verschiebungen Ihres Codes annimmt, testen Sie den Rückgabecode von of_add_datepicker, wenn das Datum aus einem regionalen Feld kommt, und setzen Sie is_shortcut nach dem Hinzufügen des Werkzeugs oder des Eintrags.

12.19 Der Rechtsklick auf ein Element trägt seinen Punkt: buttonbar, breadcrumb, chartcartesian, statusbar #

Eine einzige Regel für jeden Rechtsklick auf ein Element der Bibliothek: das Ereignis erhält den Schlüssel (oder die Adresse) des Elements, dann al_x, al_y, den Punkt, an dem ein Menü zu öffnen ist, in Bildschirmpixeln — der Zeiger, oder über die Tastatur (Menü-Taste, Umschalt+F10) die Ecke unten links des Elements (unten rechts bei Leserichtung von rechts nach links; die Mitte einer Form, die kein Rechteck ist: ein Punkt eines Diagramms). Ein contextmenu der Bibliothek öffnet sich dort unverändert: uo_menu.of_show(al_x, al_y). Drei Ereignisse, die ihn nicht trugen, erhalten ihn; die Statusleiste multiplizierte ihren mit der Skalierung des Bildschirms, und ein dort geöffnetes Menü landete auf einem Bildschirm mit 125 % oder 150 % weit vom Zeiger entfernt.

Was4.05.0
buttonbar · ue_button_rclicked(string as_key)(string as_key, long al_x, long al_y)
breadcrumb · ue_item_rclicked(string as_keys)(string as_keys, long al_x, long al_y)
chartcartesian · ue_point_rclicked(string as_key, long al_index, double ad_value)(string as_key, long al_index, double ad_value, long al_x, long al_y)
statusbar · al_x, al_y von ue_panel_rclickedmit der Skalierung des Bildschirms multipliziertder Punkt, wie die Seite ihn liest, wie bei jedem Rechtsklick
// 5.0 : the menu of a button, opened where the user right-clicked it
// ue_button_rclicked event of uo_buttons : (string as_key, long al_x, long al_y)
is_menu_button = as_key
uo_menu.of_show(/*x*/ al_x, /*y*/ al_y)

Das Rezept: nichts verweigert die Kompilierung — ein Skript dieser Ereignisse behält seine Argumente. Öffnen Sie Ihr Menü am Punkt al_x, al_y (übergeben Sie ihn an of_show eines contextmenu); ein PowerBuilder-Menü behält PopMenu(PointerX(), PointerY()) Ihres Fensters. Ein Skript, das die Skalierung der Koordinaten von ue_panel_rclicked selbst korrigierte, darf das nicht mehr tun.

12.20 Die Basis: der Fehler einer Komponente ist ihr eigener, jedes Verb liefert einen Code #

Fünf Änderungen betreffen die ganze Bibliothek oder eine ganze Familie von Komponenten. Nur eine verweigert die Kompilierung: is_last_error einer nicht visuellen Komponente, jetzt of_get_last_error().

Was4.05.0
of_get_last_error() einer visuellen Komponentedie letzte Meldung der DLL, eine für den ganzen Prozess — oft die einer anderen Komponentewas dieser Komponente geschah: ein abgelehnter Name oder ein Aufruf dieser Komponente an die DLL, dessen Grund im Moment des Fehlschlags gelesen wird; sonst leer
Der Grund für das Scheitern einer nicht visuellen Komponente (crypto, restclient, soundplayer, speechout, xml, u_pbt_regex, u_pbt_zip)inv.is_last_errorinv.of_get_last_error()
of_stop, of_close, of_reset der nicht visuellen Komponenten (commandpalette, crypto, messagebox, restclient, soundplayer, speechout, toaster, xml)ohne Rückgabewertein long, 0 sobald erledigt — wie die visuellen Komponenten
of_set_property("tooltip", …) und super_tooltip_* auf einer Komponente ohne Tooltip (webbrowser, pdfviewer, radialmenu, progressbar)setzte einen Tooltip, den die Dokumentation für nicht vorhanden erklärt-5, und of_get_last_error() sagt warum
Das Kürzel eines übernommenen PowerBuilder-Menüs (of_load_menu von menubar und commandpalette)Ctrl++, PageUp, Insert (menubar); nichts jenseits von F12 (Palette)eine Schreibweise, die des contextmenu: Ctrl+Plus, PgUp, Ins, F13 bis F24, Num 0 bis Num 9, Num +
// Local variables
string ls_why

// 4.0 : ls_why = inv_crypto.is_last_error
// 5.0 : the reason of a failure, by the same method as every component
ls_why = inv_crypto.of_get_last_error()

Das Rezept: Der Compiler zeigt jedes .is_last_error, das durch .of_get_last_error() zu ersetzen ist. Ein als Anweisung geschriebener Aufruf von of_stop, of_close oder of_reset kompiliert weiterhin. Ein Skript, das of_get_last_error() einer Komponente las, um das Scheitern eines anderen Aufrufs zu erfahren (ein direkt aufgerufener Export der DLL, eine andere Komponente), liest jetzt den Grund dieser Komponente oder nichts: Fragen Sie den, der gescheitert ist.

Hinzugefügt, nichts nachzuarbeiten: is_accessible_name und is_accessible_description auf allen visuellen Komponenten — Name und Beschreibung, die ein Bildschirmleser sagt (3.4); of_from_datastore eines DataWindow oder eines DataWindowChild bei crosstab und datagrid, wie bei den anderen datengebundenen Komponenten; die vollständige Form von of_insert_command (commandpalette), die Hinweis, Kürzel und Schlüsselwörter wie of_add_command nimmt, mit einer Position als long.


← Von 3.0 auf 4.0 migrieren · Inhalt · Versionshinweise →