Also zu 1) solltest Du den Hinweis von DeddyH nochmal berücksichtigen.
Wenn Dein Formular geöffnet wird (egal ob zur Designtime oder Runtime) werden zunächst die Komponenten erstellt und DANACH werden die Werte gesetzt. Wenn Du im Konstruktor auf bestimmte Werte prüfst, ist das einfach zu früh.
Du musst entweder im Setter der Eigenschaft auf Änderungen reagieren (i.d.R. die sinnvollste Lösung) oder nach den DatenAusDerDFM-lesen (in Loaded).
Zu 2) weiß ich auch nicht recht.
Du willst zur Designtime einen Wert als Text festlegen - richtig? Aber auf jedem System, auf dem die EXE gestartet wird, können die möglichen Werte abweichen?
Insofern wäre m.E. ein Property-Editor sinnvoll, der Dir die möglichen Werte auflistet und Du EINEN als String speicherst.
Beim Programmstart wird geprüft, ob dieser Wert auf dem aktuellen System verfügbar ist und dann eingestellt.
Wenn nicht wird ein Dialog für die Auswahl geöffnet.
In der
DFM würde dann nur ein String gespeichert werden.
Für bearbeitbare Listen im Formular sind TCollection vorgesehen.