Q1: If you want to have variables (e.g. to store some settings) that should be accessible from different components within your applications, you can put these variables into a separate class and create an autoobject of this class (e.g. Application::Settings).
Please try the following:
Add a new class to your unit (e.g. Application) and rename it to Settings.
Open the class Settings and add your Properties to the class (e.g. Counter, Volume, ....).
Now, create an autoobject of the class Settings within the unit Application and rename it to GlobalSettings.
Within your application class, create a variable, set the type to Application::Settings and set the initialization value to Application::Globals. This ensures that your global class is kept within the memory the whole runtime of the application.
Now you can access your global properties from everywhere in the GUI application, e.g.
Application::GlobalSettings.Volume = 5;
Application::GlobalSettings.Counter = 0;
Q2: Instead of using a structure (which contains several members), you can create a Class which contains several Variables or Properties. The data exchange between the GUI application and a Device Driver can be done by using these data types.
Does this answer your question?