Conditional Formatting can typically accomplish what you're looking for (assuming you're using something that the formatting can apply to).
Conditional formatting works, but on TEXT, fields, buttons (you can't have a graphical "box" and conditionally color it). So I will typically have a single space on the layout and resize the bounds as needed. It can then be colored (filled, bordered, opacity -applied, gradient-applied, etc.) And the condition is applied as desired (several conditions? different colors?)
But adjusting the SIZE of the object is another kettle of fish. For "gantt" or progress or other variable bars, I'll create a variable with 100 (or 200 or ...) spaces or pipes or box-character text. Then I will apply math to the variable (which is probably set by script) and display.
75% of the bar =
Left ( $$myBar ; length($$myBar) * .75 )
This of course only changes the length of the bar, not the height. But I suppose stacking these and conditionally showing (Hide object when) might get you there.
This is text, so can also be conditionally colored! Tip: use corners to simulate circle of the text object.
Mac also has character like this. The FONT is big factor for the character shown, so YMMV (or YMKV). Since it's a text character it can be conditionally formatted. The SPACE is in every font and the same x-plat. But yes there are some great character 'icons' that can be used.
A nice variant on the pipe array is to use a repeating field with 100 or 200 repetitions. The nice part about that is the ability to format different segments of the bar, should you want different colors or gradients at different percentages.
I was actually just trying to use a shape control which doesn't have conditional formatting, isn't object oriented, etc. The ideas below are excellent, but life would be (so much) simpler if I could just send a message to the shape object to tell it to do this or that or query the object to see what its properties are.