• |
The Resize controls tool provides three options to resize
controls uniformly. This tool examines the dimension(s) of the
leading control in the selection group, and uses those dimensions to
adjust the width, or height, or both width and height of the
remaining controls in the selection group. This tool becomes
available in the Tools menu once the selection group holds at least
two controls.
|
• |
The Align controls tool provides six options to uniformly
align/reposition controls using methods that closely resemble text
justification in a word processor. This tool examines the
coordinates of the leading control in the selection group, and uses
those coordinates to set the coordinates of the remaining controls in
the selection group. The six alignment options feature Left-edge
alignment, Right-edge, Top-edge, Bottom-edge, Horizontal Center, and
Vertical Center. This tool becomes available in the Tools menu once
the selection group holds at least two controls.
For example, using Left edge alignment on the controls in a
selection group will reposition the controls so that their left edges
line up to the left edge of the leading control. That is, all
controls will be given the same horizontal coordinate as the leading
control, but without affecting the size or the vertical coordinate of
the controls. Similarly, Right edge alignment would result in the
right side of the controls in the selection group becoming aligned
with the right side of the lead control. Center alignment
repositions the selected controls so they are vertically (or
horizontally) "centered" relative to the leading control in the
selection group.
|
• |
The Space controls evenly tool repositions controls in the
selection group so that the gap between each of the selected controls
is as even or uniform as possible, either horizontally (across the
dialog) or vertically (down the dialog). This tool calculates the
distance between the two most widely separated controls in the
selection group, calculates the best possible gap that can exist
between each control, and then moves the controls. Controls are
positioned to maintain relative tab order, with the exception of the
first and last controls. For best results, edge-align the controls
in the same plane before spacing them with this tool. This tool
becomes available in the Tools menu once the selection group holds at
least three controls.
|
• |
The Arrange button controls tool repositions Button,
ImgButton, and ImgButtonX controls in the selection group, ignoring
all other types of controls in the selection group. Arrange buttons
either distributes the buttons evenly across the bottom of the
dialog, or it positions the first button near the top-right corner
and proceeds to arrange the remainder in a downward direction.
Provided the selection group contains at least one button control,
this tool may be chosen from the Tools menu.
|
• |
The Center in dialog tool enables a complete group of
controls to be centered horizontally or vertically (or both) without
disrupting the relative position of each control in the group. Hint:
this tool is useful to polish up the final appearance of the dialogs
in a project, ahead of final release. First choose the Select All
(CTRL+A) function so that the selection group will contain every
control on the dialog, then use the Center in dialog tool's Both
option to neatly center all the child controls in one swift
operation. This technique is often easier and faster at producing a
tidy dialog appearance than can be achieved when adjusting the dialog
size by eye. Provided the selection group contains at least one
control, this tool will be available in the Tools menu.
|
• |
Size grip behavior in design mode has been significantly
revised to greatly improve accuracy when positioning and resizing
controls with a mouse.
|
• |
The resizing cursor is displayed when the mouse cursor hovers
over selected controls (as opposed to showing only when a mouse
button was depressed), resulting in improved interaction with
ComboBox controls, etc.
|
• |
Super-nudge mode extends the regular keyboard move/ resize
operations to use grid-size increments (compared with single-unit
increments in regular mode). Super-nudge mode is engaged by pressing
and holding the SHIFT key down while using the regular arrow keys to
move (and/or the CTRL key to resize) the controls in the selection
group.
|
• |
Move to (0,0) and Cancel options have been added to the
auto-position "warning" dialog -- this dialog is displayed when
auto-positioning code would result in the control extending beyond
the edge of the dialog (clipped). Status bar controls are ignored
when calculating the location of a control placed via
auto-positioning.
|
• |
Clipboard paste options now include an Always paste at (0,0)
option, and a Paste Below Selected Control option. When a selection
group is copied to the clipboard, the left-most control of the group
is used to determine the origin of a subsequent paste operation (as
opposed to using the lead controls position for the origin). Pasting
below a selected Combo Box now pastes below the visible portion of
the control instead of the drop-down portion.
|
• |
The new View DDT Code button on the main toolbar permits
instant access to the DDT Code Viewer window.
|
• |
The Code Viewer now displays code using the keyword
capitalization setting used by the PowerBASIC for Windows IDE. The
Code Viewer also features improved scrolling with the top line number
displayed in a popup dialog resembling a ToolTip.
|
• |
The Code Viewer displays #PBFORMS COPY blocks in light gray,
and all syntax highlighting is disabled if the PC is using
high-contrast mode.
|
• |
The Control/Dialog Properties dialog is now movable and
resizable, and the tab order of the controls on the tab pages has
been improved. PowerBASIC Forms now tracks and stores any changes
made to the positions/sizes of those dialogs, and automatically uses
the revised position/size for subsequent launches.
|
• |
By default, the Menu Editor, Version Editor, and Tab Editor
are displayed as centered dialogs, however, these dialogs may now be
moved freely to other positions on the screen. PowerBASIC Forms
automatically tracks the new positions of each dialog, and
automatically uses the new positions for each subsequent launch.
|
• |
Import from Clipboard dialog now includes a Refresh button to
reload the clipboard contents.
|
• |
Test mode now supports dialogs with the %WS_CHILD style.
|
• |
Test mode has improved support for controls with the
%WS_EX_TRANSPARENT extended style.
|
• |
New option: Display on reload enables or disables the project
statistics display when reloading a project.
|
• |
New option: Reload previous file at start can be a time-saver
when working constantly on a single project. Projects reloaded from
the Most Recently Used (MRU) section of the File menu will load up
and display same dialog as when the file was saved/closed last.
|
• |
New option: Remember dialog after reload reselects the
current dialog after reloading a project.
|
• |
PowerBASIC Forms now supports the status bar control. Only
one status bar control can be added to a dialog. The status bar
control automatically displays a size grip on the lower-right corner
if the parent dialog includes the %WS_THICKFRAME style (which makes
it resizable). If the dialog contains both a menu and a status bar,
the prompt string of a highlighted menu item will be automatically
displayed in the status bar control via a %WM_MENUSELECT handler.
Prompt strings will also be displayed in test mode.
|
• |
PowerBASIC Forms now supports transparent background color
for most types of controls. Control color properties can also be set
for a wider range of standard and common controls, including
Progress, ListView, TreeView, DateTime, Month, RichEdit, and
Statusbar.
|
• |
The code generation engine now offers improved code and
comment block formatting, along with improvements in whitespace to
increase readability of generated source code. Long source code
lines are also wrapped with improved precision.
|
• |
While working with existing projects, the code generation
engine inserts new CASE message handler blocks for each
control added to a dialog. These handlers are inserted at the top of
the SELECT CASE AS LONG CBCTL block, which must be located within the
CASE %WM_COMMAND handler block. Similar CASE statements may also be
inserted for existing controls, if an associated CASE statement
appears absent. If code comments are enabled, the inserted CASE
statements will have a leading comment line that denotes the time and
date of the insertion, plus a trailing comment line indicating the
end of the insertion.
|
• |
In Callback Functions, the code generation engine positions
variable declaration statements within the CASE block that uses the
variable, instead of amassing all declaration statements at a central
point at the top of the Callback Function block. This strategy
enables the code generator to insert complete CASE
handler blocks as a single insertion of code, and similarly, it
allows the programmer to copy and paste complete CASE blocks with a
single clipboard operation.
|
• |
Depending upon the requirements of each dialog, the code
generator engine may add and/or insert a selection of new CASE
handler blocks at the top of the SELECT CASE AS LONG
CBMSG block. The following standard window/dialog message handlers
(and support code) are currently supported by PowerBASIC Forms and
can be inserted as required: _%WM_INITDIALOG, %WM_DESTROY,
%WM_DROPFILES, %WM_MENUSELECT, %WM_NCACTIVATE, and %WM_SIZE. Note
that the code generator engine cannot insert a new message handler if
that message handler already exists in the dialogs Callback Function.
|
• |
A dialog with the extended style %WS_EX_ACCEPTFILES enables
it to receive files via the Windows Drag-n-Drop interface. In this
situation, the code generator engine adds/inserts CASE %WM_INITDIALOG
and CASE %WM_DROPFILES message handlers (with the appropriate support
code in each handler) into the Callback Function used by the dialog.
The code in these handlers will activate the Drag-n-Drop interface
for the dialog, and process the names of the file(s) that are dropped
onto the dialog.
|
• |
The %WM_NCACTIVATE handler and support code is inserted into
all new dialogs, and inserted into existing projects that lack the
handler. This message handler block maintains and restores control
focus after task-switch operations. This code in this handler uses a
STATIC variable to store the handle of the control that has focus at
the point the application deactivates, and it restores control focus
when the application is activated again.
|
• |
The %WM_MENUSELECT handler block is created/inserted into the
Callback Function of each dialog that contains both a status bar
control and a menu. As menu items are highlighted by the user, the
default %WM_MENUSELECT handler code will automatically display the
menu items associated Prompt string in the status bar control.
|
• |
The %WM_SIZE handler block is created/inserted into the
Callback Function of dialogs that contain a status bar control. This
handler passes the %WM_SIZE message to the status bar control so that
it will update its size and position within the dialog.
|
• |
All %WM_COMMAND handlers for Button controls with an ID Name
= %IDOK or %IDCANCEL, and a ID Value =1 or 2 (respectively) will
contain a DIALOG END statement, as opposed to a MSGBOX statement.
|
• |
%WM_COMMAND handlers for Menu items with an IDNAME =
%IDCANCEL and ID Value = 2 will contain a DIALOG END statement
instead of MSGBOX.
|
• |
New option: %USEMACROS instructs PowerBASIC Forms to generate
the project source code so that it uses the various Macros in the
.INC files sets, rather than the traditional Function wrappers. This
option mainly affects common control code.
|
• |
Generated source code is saved to disk using the same keyword
capitalization setting as the PowerBASIC for Windows IDE.
|
• |
New option: Include Code Comments enables or disables code
comment generation in new projects, in addition and code inserted
into existing projects.
|
• |
New option: Constants (equates) may appear in the generated
code in unsorted order (the default), or they may be sorted by ID
Name, or sorted by ID Value, as set in the Options dialog. ID Values
in the definition statements is now right justified for improved
readability, and obsolete/unused equate definition statements are
flagged with a brief comment: '*
|
• |
MSGBOX statements in new project code will display modally,
due to the %MB_TASKMODAL flag.
|
• |
The CREATED named-block header includes version number in
format "v#.##". PowerBASIC Forms produces a warning if a project
seems to have been created with a more recent version of PowerBASIC
Forms.
|
• |
A new named-block titled CLEANUP is placed after the DIALOG
SHOW statement in generated code, and inserted into existing projects
when they are saved. Code in the CLEANUP block releases resources
associated with customized control fonts, and the code is
automatically updated as font requirements change.
|
• |
Projects containing a RichEdit control now use an updated
version of PBFORMS.INC which dynamically loads the very latest
version of the RichEdit control that is installed, up to and
including Windows XP's RichEdit50W control.
|
• |
If Code Comments are enabled, generated code will include a
commented %WS_GROUP "flag" ahead of any control with the %WS_GROUP
style.
|
• |
%DM_SETDEFID support is added to each dialog that includes a
default button.
|
• |
ID Names and Captions derived from class names with numeric
suffixes and custom controls will now include an underscore to
separate the class name from the ID Value. For example,
%IDC_MSCTLS_STATUSBAR32_2, %IDC_CUSTOMCONTROL_1, etc.
|
• |
The %DS_CENTER style is automatically assigned to
loaded/imported dialogs with an X origin of -1, and to dialogs where
both X and Y origins are zero. In addition, origin values for all
%DS_CENTER dialogs are adjusted during loading/importing to ensure
all such dialogs remain visible if the %DS_CENTER style is
subsequently removed.
|
• |
The sample code functions included in generated code have
been updated. The changes include formatting improvements, code
refinements, and optimizations, etc.
|