Status bar — version history
The window-bottom status bar made of panels: rich text, icons, mini progress bar, coloured states, clickable panels and dropdown lists. Introduced in 1.0.
4.0 — October 2026 #
New #
ib_show_resize_grip = truenow gives a working grip: dragging it resizes the window by its corner (bottom-left in right-to-left layouts), with the diagonal cursor; it is not drawn on a maximized window or one without a resizable border.- A panel with a dropdown list also opens from the keyboard with Up / Down arrow (Left and Right still move to the neighbouring panel).
- A right-click on a keyed panel that is not clickable raises
ue_panel_rclicked: a context menu can finally open on "Line 12, Col 4" (a disabled panel stays silent). - The name the bar announces to screen readers follows the application language.
- With "reduce animations" (Windows setting), the indeterminate progress bar pulses instead of sliding; in high contrast mode, the gauge and the state mark stay visible.
[symbol=name]tag in rich text: eighteen monochrome glyphs that follow the text colour (clock,location,person,calendar,phone,mail,warning…); an unknown name stays as text.- Every native menu of the component (like every native menu of the library) lets the user type the first letters of an entry to jump to it, read through the keyboard layout; a menu with more than 500 entries only draws what is visible.
Fixed #
- The resize grip (
ib_show_resize_grip) is visible in every theme: its dots now use the muted text colour of the theme; they were drawn in the border colour and could hardly be seen. of_add_panel/of_insert_panelrefuse (-5) a key already taken or containing/or|;of_move_panel,of_remove_panel,of_flash_panel,of_clear_menuandof_add_menu_separatorrefuse an unknown panel;of_add_menu_item/of_insert_menu_itemrefuse an unknown panel or a taken entry;of_remove_menu_item/of_move_menu_itemrefuse an unknown address. All of them used to return0and do nothing.- A choice made in the list of a panel that is removed, emptied (
of_clear,of_clear_menu), disabled or hidden while the list is open no longer raisesue_panel_menu_clicked: the list closes. - A double-click on a panel with a dropdown list no longer adds
ue_panel_double_clickedto the opened list; a list made of separators only, or whose entries are all hidden, no longer turns the panel into an empty selector. of_panel(k).is_textread during anof_flash_panelreturns the panel's text, not the temporary message.ii_progressreads back-1on a panel without a bar (instead of0, like a bar at 0 %), and an out-of-range value reads back as drawn (150→100).is_stateignores case ("Error"= error); an unknown value means "no state" instead of raising a script error.- A disabled panel takes the theme's grey, state mark included, without transparency and without losing its background on hover; state colours have a palette readable in dark themes, and the gauge reads well in every theme.
- A separator between two panels aligned at the end of the bar is drawn between them, not at the end of the start group; the state accent and the Left / Right arrows follow right-to-left reading order.
of_panel("")or a two-level address no longer designate anything (they used to write into every keyless panel and separator);of_menu_itemwith a one-level address no longer writes onto the panel.- The colours and tooltip of a removed panel no longer carry over to a panel added later under the same key; handles are released by
of_remove_panel,of_remove_menu_item,of_clear_menuandof_clear(IsValid()returnsfalse). - A focused panel that becomes disabled or hidden hands the keyboard focus to its neighbour instead of losing it; updating a text, a progress or a state no longer redraws the whole bar (animations no longer jump).
- In right-to-left reading, native menus hang from the right edge of their title and cascades open to the left (
Leftopens,Rightcloses). - Rich text: a closing tag closes its own tag only (
[b]A[i]B[/b]CleavesCin italics only), a]escaped byof_escape_markupright after a tag no longer breaks the formatting around it, and[picture=…]accepts a data URI and a file name containing a comma. - Reading back
il_back_color_hoveroril_text_color_hoverof an item never coloured returns-1(the theme's colour), like the other item colours (it returned0, black). - A right-click on an item raises only one event, the item's, no longer a second, component-level one.
- Enter or Esc pressed in the component, when it does not use them, goes back to the window: the PowerBuilder
DefaultorCancelCommandButtonfires (the key was lost). - A disabled component (
ib_enabled = false) leaves the Tab order; enabled again (or afterof_reset), it takes its place back. - A language set by
PBT_SetLanguageapplies from the very next order given to the component: a text of an event raised by that order no longer comes in the old language. - With no language chosen by the application, the component announces English to screen readers (it announced French).
is_theme_style,is_theme_modeandil_theme_accentread back the style and mode shown and the component's own accent (-1when it has none); an unknown or badly written value is ignored instead of leaving the component without a theme, and an axis left empty follows the application's theme.- The application accent (
PBT_SetDefaultThemeAccent) survives a change of theme, is followed as long as the component has no accent of its own, and repaints everything derived from it (hover, pressed, selections); Windows high contrast is supported. - The documentation example of a user panel shows a neutral name.
Behavior changes #
- A separator (
of_add_sep) no longer counts inof_count,of_keys_ator the positions ofof_insert_panel/of_move_panel: a position counts panels. A keyless panel does count (of_keys_atreturns""for it). of_insert_panel(…, 0)inserts first (0 or less = first place); in 3.0 it appended at the end of the bar.of_flash_panelreturns-5on an unknown or empty key, or on an address.of_countreturns alongandof_keys_attakes alongrank.- Rich text: a markup image on a network share (
[picture=\\server\share\x.png]) is no longer shown: go throughof_icon(), which embeds it. - See the 3 → 4 migration guide, sections 11.3 and 11.18.
3.0 — September 2026 #
New #
of_set_property,of_get_propertyandof_component_name: drive a property by its name (settings screen, saved configuration).
Fixed #
ue_panel_rclicked(as_key, al_x, al_y)finally returns screen coordinates (physical pixels), as documented: they were relative to the component.- The text of a hovered clickable panel is readable in Office 2007 dark (white text on pale yellow before).
- A panel's colours read back through its handle (
il_back_color,il_text_color…) returned0(black), set or not: they now return the colour set, and-1for the theme's. - Rich text: a
[word]that is not a tag is shown as typed (report[final].pdf) instead of disappearing with the rest of the text.
Behavior changes #
- Positions count from 1:
of_insert_panel,of_move_panel,of_insert_menu_item,of_move_menu_item(2 → 3 migration guide, section 10.1).
2.0 — September 2026 #
New #
- A panel's menu is built entry by entry:
of_add_menu_item("panel/id", label { , image }),of_insert_menu_item,of_remove_menu_item,of_move_menu_item,of_add_menu_separator,of_clear_menu, replacing the two parallel arrays ofof_set_panel_menu. - Entry handle
n_pbt_statusbar_menu_item(of_menu_item("panel/id")):ib_enabledgreys,ib_checkedchecks,ib_visiblehides an entry without removing it. of_count,of_keys_atandof_hastell what the bar and each menu contain.ue_script_error: a script error in the page reaches PowerBuilder with its message instead of being lost.
Behavior changes #
- A panel's getter is
of_panel(as_key)(instead ofof_item), and identifiers are namedas_keyeverywhere. ue_panel_menu_clicked(as_keys)returns the"panel/entry"address in one argument, instead of(as_id, as_item_id).- See the 1 → 2 migration guide, section 9.4 (Statusbar).
1.0 — August 2026 #
New #
- Keyed panels (
of_add_panel,of_insert_panel,of_move_panel,of_remove_panel) in rich text with an icon, fixed or text-fitted width, aligned at the start or the end of the bar, and group breaks (of_add_sep). - Per panel: mini progress bar (
ii_progress), indeterminate animated bar (ib_indeterminate), coloured state (is_state: info, warning, error, success), greyed and hidden states. - Opt-in clickable panels (
ib_clickable):ue_panel_clicked,ue_panel_double_clicked,ue_panel_rclicked; a panel can become a selector with a dropdown list (ue_panel_menu_clicked). - Temporary message (
of_flash_panel) that gives the panel its text back afterwards, and a resize grip drawn in the corner (ib_show_resize_grip).