The buttons are different
In GFA-BASIC32 the Windows BUTTON class controls (push)button, checkbox, and radio-button are implemented as Ocx Command, Ocx Checkbox, and Ocx Option, respectively. The position of the contents of the BUTTON control can be changed by applying a predefined BUTTON-style alignment value. These are defined in the winuser.h SDK include file:
#define BS_LEFT 0x00000100
#define BS_RIGHT 0x00000200
#define BS_CENTER 0x00000300
#define BS_TOP 0x00000400
#define BS_BOTTOM 0x00000800
#define BS_VCENTER 0x00000C00
These values can be applied using API functions or using the WinStyle property of the Ocx controls. In addition, these style bits can be set using the Align property of the BUTTON class Ocx controls (Command, Checkbox, and Option). However, the values that you can assign to Align are different than the values used with the docking purpose of Align. The documentation lacks proper explanation of using the Align property with buttons. (At least in the English help file.)So let me fill the gap.
The position of the contents of the BUTTON controls can be set using a value between 0 and 10, but not 3 and 7. There meaning - as described by the official GB32 documentation -and the corresponding button styles are listed below.
Value | Position | BUTTON Style | Value |
0 | Center | Normal H/V centered | 0x00000000 |
1 | Left | BS_LEFT (vertical centered) | 0x00000100 |
2 | Right | BS_RIGHT (vertical centered) | 0x00000200 |
3 | no meaning* | BS_CENTER | 0x00000300 |
4 | Top | BS_TOP | 0x00000400 |
5 | TopLeft | BS_TOP | BS_LEFT | 0x00000400 | 0x00000100 |
6 | TopRight | BS_TOP | BS_RIGHT | 0x00000400 | 0x00000200 |
7 | no meaning* | BS_TOP | BS_CENTER | 0x00000400 | 0x00000300 |
8 | Bottom | BS_BOTTOM | 0x00000800 |
9 | BottomLeft | BS_BOTTOM | BS_LEFT | 0x00000800 | 0x00000100 |
10 | BottomRight | BS_BOTTOM | BS_RIGHT | 0x00000800 | 0x00000200 |
When one of the position values from the first column is passed to the Align property the value is shifted left 8 bits and then sent to the BUTTON control using
SendMessage(ocx.hWnd, BM_SETSTYLE, position, 1)
* The no meaning values 3 and 7 can be used in code, not in the Form Editor. When used in code, the internal GB32 function that implements Align will accept any value between 0 and 15! It simply shifts the value 8 bits left and sends it to the BUTTON control.
So, the value of the Align property is used to position the contents of a BUTTON control Ocx. The value is converted to a BS_* constant value as defined in the SDK and passed to the BUTTON control. In this particular case the Align property has a different meaning. Perhaps, it should be named ‘Alignment’ as with the Label Ocx controls.
No comments:
Post a Comment