Right-To-Left Formatting

In PowerBuilder .NET, the RightToLeft PowerScript property has been deprecated, and is replaced by the FlowDirection property.

The RightToLeft properties that you set in the PowerBuilder Classic IDE automatically convert to FlowDirection values when you migrate your applications to PowerBuilder .NET.

Levels of right-to-left support

Right-to-left features in WPF applications can affect text order, text and control alignment, control title bar layout, control position mirroring, and can be inherited from container controls.

In PowerBuilder Classic client server applications, setting the RightToLeft property supports only right-to-left text order, and text and control alignment. In .NET Windows Forms applications, the RightToLeft property also determines the layout of the title bar (for controls that have title bars), causing the Close, Maximize, and Minimize buttons to appear on the left side of the title bar, and the control icon on the right.

With earlier versions of PowerBuilder, you could design two separate user interfaces (UIs) to mimic control position mirroring. You can still use this type of design for PowerBuilder Classic, and you can migrate these applications to PowerBuilder .NET. However, for newer PowerBuilder .NET applications, it is much easier to use a single UI design and take advantage of the FlowDirection property for automatic mirroring support.

Property inheritance for right-to-left features in PowerBuilder .NET applications means that if you set the flow direction on a container control, such as a GroupBox or Grid, all the controls that are placed in the container automatically use the same flow direction value—unless you override that value in the individual controls. In earlier versions of PowerBuilder, and in PowerBuilder Classic, this type of inheritance is not supported.

Although you cannot currently set a FlowDirection property on DataWindow objects and DataWindow columns, when you display a DataWindow object in a DataWindow control, the flow direction of the DataWindow object and its columns is determined by the value of the FlowDirection property of the DataWindow control.

Effects of flow direction on system functions

When calling a system function to open an object (Open, OpenSheet, OpenSheetWithParm, OpenWithParm, OpenUserObject, OpenUserObjectWithParm, OpenTab, or OpenTabWithParm), flow direction follows the FlowDirection property set for the object's container or for the Application object, unless the object you are opening has its own FlowDirection setting.

When calling a system print function with coordinate arguments (Print, PrintScreen, PrintText, PrintBitmap, PrintRect, PrintRoundRect, PrintLine, or PrintOval), and the Application object FlowDirection property is set to RightToLeft!, the print coordinates are converted to new values based on the change of the 0,0 start point from the top, left-most part of the page to the top, right-most part of the page.

The MessageBox and PopMenu system functions inherit the Application object FlowDirection setting.

Migrating right-to-left applications

Migration converts RightToLeft property values that you set in the PowerBuilder IDE, but it does not convert values that you set in script. Although the RightToLeft property is still supported by PowerBuilder .NET at runtime, it is often more useful to modify these scripts to use the FlowDirection property.

The PowerBuilder .NET Migration wizard has a "Specify RTL Conversion Option" page that enables you to designate whether the conversion process includes automatic mirroring. Do not select this option if you are migrating right-to-left applications with separate UIs that mimic control position mirroring, and you want to preserve the dual UI design. When the option is not selected, the Migration wizard strategically places FlowDirection values to prevent automatic mirroring, yet continues to maintain the right-to-left orientation where required.

If you later want to switch to automatic mirroring, edit the XAML to remove any of the LeftToRight! FlowDirection values inserted by the Migration wizard. Without an explicit FlowDirection value, the controls take on the FlowDirection value of their containers, which, in these types of migrated applications, is RightToLeft!.