Working on HMI in C#/.NET is fun, but it is a large task to get dark themes right. Below is a list of components that I want to complete:
|clEditCtrl||Simple text edit control.|
|clHScrollBar||Horizontal Scroll Bar.|
|clObjectEditor||Advanced grid alike editor to edit an “object” with a tree of items.|
|clPopUpMenu||Classic pop-up menu.|
|clShapeLabel||Label with titled corner options.|
|clSmallButton||Small, flat button with image symbols.|
|clTabBottonCtrl||Advanced button with sub-buttons.|
|clTabStrip||A list of buttons located on an edge.|
|clVScrollBar||Vertical Scroll Bar.|
|clMenu||Classic Horizontal Menu|
|clCaption||Dialog title caption|
|clToolBar||Horizontal bar for various sub tools|
Other components will be added as needed, but I want to complete the list above so I can move on with other things for now. I decided to not do a drop in replacement of all components, many of the components above also add advanced functionality to be able to quickly create an advanced HMI.
I have tried various schemes, but I ended up sub-classing from UserControl and re-create things from scratch on most components. Luckily I could use the edit control with a few tricks, because that alone is a lot of work. To make this work I had to add color properties as follows on all components.
|BackColor||Most components have this|
|ForeColor||Most have this as well.|
|BorderStyle||Need to override BorderStyle|
|BorderColor||Very few components could control border color from the application.|
|BackColorHover||Background color if mouse hover over the component.|
|BackColorShape||Used only on shape controls where I need to “normal” background colors.|
|BackColorSelected||Used on controls like push-buttons to signal state.|
I started doing this on Qt as well earlier, but I concluded that C# was so much easier to work with and as performance issues I had earlier are gone I moved back to C#/.NET. I might go back and re-visit Qt at some point.