VKScrollDemo: A Working Example of Vertical Scroll Box Management
This is the forth post of a four-post series on Delphi's FireMonkey support for mobile device virtual keyboards. For the first in the series, see Using Delphi's FireMonkey Vertical Scroll Box With a Virtual Keyboard.
There is source code that accompanies these blogs. The project group FMXVertScrollBoxEtude can be downloaded from GitHub:
https://github.com/Pasquina/FMXVertScrollBoxEtude/releases
Source code was developed using RAD Studio 10.1 Berlin (No updates.)
The GUI
Execute the VKScrollDemo project with an Android device as target. The screen is identical to previously presented screens.
VKScrollDemo Initial Screen |
Although the screen appears identical to previously presented screens there is a significant difference in the program source. Refer to the Structure window in the IDE to see how components are arranged.
- A vertical scroll box has been added with an alignment of client so that it takes up nearly all of the form's area.
- The GridPanelLayout, Memo and Button are all children of the Vertical Scroll Box. Thus, when the viewport on the scroll box is changed, all children are repositioned in accordance with the new position of the scroll box.
- The labels at the top of the form are not children of the Vertical Scroll Box, and thus will not participate in the repositioning of the viewport.
- The VyDVSBFMXScroll component has been dropped onto the form. The VScrollBox property has been set to the form's only vertical scroll box. This is the scroll box that the component will manage. The optional MemoBox property has been set to point to the Memo on the form as this is a demonstration program and seeing the event handler properties may be useful.
Program Behavior
Select the input field component with a text hint of "Default." This will cause the virtual keyboard to appear and the scroll box viewport to be adjusted so that the input field is just above the virtual keyboard. Choose the Next key twice on the virtual keyboard and move the focus to the input field with a text hint of Email Addr. The viewport will adjust appropriately and the display should be as follows:
VKScrollDemo Advancing Through Input Components |
Chose Next two more times and the screen should appear as follows:
VKScrollDemo With Troublesome Number Pad Virtual Keyboard |
Ideally, the device display should appear as shown. As we have noted earlier, the height of the virtual keyboard is not always reliably reported, and on occasion the vertical scroll box and its contents will not be positioned correctly.
Viewport Misposition Workaround
If the viewport is not positioned correctly, this is probably because of an erroneous reporting of virtual keyboard parameters in the VirtualKeyboardShown event. It is easy to recover from this by the following method:
- With the virtual keyboard showing, select the hardware back key on the device. This will cause the virtual keyboard to be hidden and the viewport will be returned to its default position.
- Reselect the input field that was originally desired. You can select any input field at any time; you don't have to start with the first field in the tab list. This will probably correctly position the vertical scroll box and input may proceed normally.
- If this recovery procedure does not correct the display, select a field prior to the field desired and use the Return key (that may be displaying Next or some other value if selected in the field properties) to Tab through the fields until you reach the desired field.
Conclusion
If you have worked with the prior demonstration programs to gain an understanding of scroll boxes, field navigation and some of the quirks involved with FireMonkey and Android, you should be able to track down most ordinary bugs you may encounter. The demonstration programs also display the parameter values of the event handlers that will assist in problem determination.
This is the last post in the four-post series about FireMonkey scroll boxes.
This is the last post in the four-post series about FireMonkey scroll boxes.
Happy scrolling and thanks for reading this.
Comments are welcome.
Hi Milan,
ReplyDeleteThank you for the blog post. Very useful and I appreciate it.
Best Regards,
Jey
Hola Milan,
ReplyDeleteGracias por este valioso aporte, la explicación es mas amplia. Excelente. Que Dios te siga bendiciendo.
Atentamente,
Daniel.