I'm trying to improve the accessibility of my Delphi made application to vision impaired users. My application uses many custom GUI components. They mostly descend from TWinControl or TGraphicControl.
My custom components seem to be invisible when testing with NVDA. For example NVDA will respond by reading the name of the control (or other details) when mousing over regular Delphi VCL controls such as buttons or forms. By contrast NVDA doesn't respond at all when mousing over any of my custom controls.
How do I make my custom components visible to NVDA and other screen reading software?
Found the answer on the NVDA Design Overview page. NVDA uses a number of accessibility APIs to gather information about GUI controls. NVDA supports:
Microsoft Active Accessibility (MSAA) (also known as IAccessible),
​IAccessible2,
Java Access Bridge
UI Automation
It looks like I'll need to implement one of the above APIs. Not sure what the pros and cons of each API are yet.
Creating Accessible UI components in Delphi provides details on implementing IAccessible. (Thanks for the link David)
Related
I am new to FMX forms and have made a simple health monitoring UI app for iOS. I would like to show the user data over a period of some time in a bar chart form, which would look appealing also. I do want the grid lines behind the bar chart and would like to make it more flat, not 3D.
Are there any exiting third party plugins or library API that I can use in my application? I would be willing to buy a license for it too.
An example bar chart would be something similar to the default in-built iOS app for health monitoring - healthkit.
Another option would be such UI kits, would these be available for integrating with FMX?
Any help is appreciated. Thanks!
Regards,
Yusuf Husainy.
Have you checked out the TChart component that comes with Delphi? There is also a pro version that has more capabilities. Check out https://www.steema.com/product/vcl (the URL says "vcl" but TChart is available for Firemonkey too). You should be able to make charts like the ones you want with it.
I have an application using TNotebook to switch between different sub pages, that are shown.
Now I have to extend this code a little bit (namely add a page and change sizes).
I was told that TNotebook shouldn't be used anymore. In Delphi's help I find "New applications should use TPageControl".
My question: Should I refactor the code to use TPageControl instead of TNotebook? What are the disadvandtages of TNotebook?
The main advantage of TPageControl, in my opinion, is that it is a system native control, unlike TNotebook. When you use system native controls, the control is painted by the system, and so takes on the look and appearance that is native to the operating system that you use.
When the application is run on a new version of the OS, your control automatically gets the appearance that is native to that OS. What's more, the behaviour is system native. By that I mean the way the control responds to keyboard input and so on. That's less of an issue with TPageControl since the system does not provide that much default behaviour. But as a general rule the advice is sound.
When none of the system native controls meet your specific requirements, you may need to use a non-native control. And then you have to work to make sure that your control adapts to its surroundings. But when there is a system native control, unless there is a strong reason to avoid it, you should use it.
Another disadvantage of TNotebook is that it excludes the form or frame on which it is placed from inheritance.
I need to write a text box control for Metro Style app. And I need that this text box can invokes a touch keyboard, when my app runs on tablet PC.
Microsoft advices me:
If you are writing a custom text control (whether in Xaml or not) you will need to make sure it supports the UI Automation TextPattern and ValuePatterns and focus changed events
and
You will need to provide an AutomationPeer which supports the ITextProvider and IValueProvider.
But I can't to figure out what actually I need to do. I will appreciate any help.
You need to implement a UI Automation Provider; in particular, you need to implement a server-side provider. Start with the UI Automation Provider Programmer's Guide, and pay particular attention to the Document Content Provider Sample, as it demonstrates how to implement TextPattern. There are more samples as part of the Windows 8 SDK, in the samples/ui/uiautomation directory. Also, there's a very quick introduction to server-side introductions here, written by one of the architects of UI Automation.
I need to improve a screen in our Application that presents an HMI (Human Machine Interface) display embedded in our Delphi code. This screen provides our customer with the ability to perform a range of actions (run test, product report etc) and to expose and view key named data values. This customisation is required because our Application controls machinery that might be operated by a range of skill levels from simple operator (may not speak English and must have very limited control) through to a power user who wishes to 'see everything' and have max control.
Some years back I created a solution based on an embedded HTML viewer (Turbopower's as it was then) and TPageProducer to dynamically tweak an HTML template (that the user could customise) and which would display a simple set of controls and data tables. This works fine but is slow to edit (you have to tweak the template and look-see the effect) and I'm sure there are better ways now.
What I need is similiar to a Delphi form that can be customised at runtime. I need: buttons, labels and edits. Editable shapes and arrows are desireable as are fixed images over which controls and text can be laid. The layout should be saveable (like a DFM file) and text labels should be of two types - fixed text and those which update to display key values on an update notification (like a DB control would). The final layout should zoom its scale to fit a resizable layout.
This question is about the best tool for the job and I'm not coming into this totally cold, I've experimented with Greatis Form Designer and obtained a working solution but before I commit, I would apprecaite comments about whether a report tool (with built-in report editor) would be possible / useable / better since a print dump feature would also be useful. (Fast Reports? Quick Report etc?). Note though that this is a display requirement primarily. Comments re newer embedded HTML solutions would also be welcome as would anything to ensure max future-proofing of the layout format.
Any solution should be useable in Dephi 7 (for now!) and does not need to be unicode as long as there is a migration path to this for newer Delphi's.
Any other comments or observations would be very welcome. Thanks.
Have you looked first at the free JVCL stuff? There's a JvInspector (RTTI component property inspector, just like Delphi property inspector), and a form designer, and so on. You could roll your own solution based on these, and even use JvInterpreter for some scripting capability.
Secondly, if you can support ANY control that you have, in your designer, and you need some HMI specific stuff, check out IOCOMP: http://www.iocomp.com/
TMS Scripter Studio Pro provides a Delphi-like IDE and form designer with scripting, but it maybe overkill for your requirements.
I'm considering different user interface layouts for my next project and I was wondering if there are either integrated or 3rd party frameworks which allow me to create tabbed document interface?
To clarify, what I want is not some kind of docking mechanism or either an MDI interface but primarily a framework which allows me to have one main form and one or more secondary forms which will be shown as tabs inside the main form.
Though I said I don't want any kind of docking mechanism, I made a small test application that actually uses it. The result I got is very close to what I want. First, I miss some features like the close button on each tab. Second, I'd have to create some kind of framework of my own in order to automate all tasks, like creating and destroying the tabs, associating each new form with its tab, freeing the form when the associated tab is closed and so on. I'm not saying I can't do it but I'd like to know if there are any ready-made frameworks which already have all these features. Though I'd prefer an open source solution, a commercial one is also welcome.
Third-party components are not mandatory here.
You can use standard Delphi controls to obtain what you want:
Put a TPageControl on your form (from Win32 tab);
Set its Align property to alClient;
Right click on the control, then select "New page" to add a new page.
Then don't write your "tabbed" interface on forms, but on frames.
You can also create pages by code, displaying the frame inside each page.
I don't think there is any framework for tabbed interface, but for nice looking tab/page controls with close buttons on each tab, please check the following:
rkSmartTabs, it simulates Google Chrome browser's tabbed UI. and it's open source.
TAdvOfficePager, MS Office style.
Hope it helps.
I recommend using a tool bar(TToolBar or any similar) and frames(TFrame) in order to mimic tabbed interface, reason?! well Delphi is going cross platform(no secret in that) they will port most if not all of the standard VCL shipped with Delphi, so WHY NOT use this as an advantage?
Just create the frame(dynamically) when the user clicks on a button from tool bar and destroy the previous one(if exists) so you will keep memory usage at minimum, application startup/shutdown time will be very good, on the other hand, if you chose to use (cx)TPageControl, TAdvPager, etc. you might get caught in a situation in which one form(the main I suspect) will have so many VCL's that it will take a lot of UNNECESSARY memory and it will be slow.
Using frames has a lot of advantages, if somewhere in your application you need a "tab" to be shown, you can simply create the needed frame dynamically and use it without additional work.
Anyways, this is my two cents, hope this helps.
I recommend TvjPageList, which is part of the JVCL suite of components. It's open source and seems to fit your requirements.
I use JVCL JvDocking, and its tabbed docking system, to make MDI-like applications.
You can also float, or tile your windows, in addition to having them in tabs.