Sí, puede hacer cualquier tipo de alineación personalizada. Simplemente use los eventos OnAlignInsertBefore() y OnAlignPosition() del control. (Existen en Delphi 2007, pero no se publican, por lo que no aparecen en la pestaña Eventos del Inspector de Objetos; aún así puede asignarlos en código. He mostrado los prototipos a continuación, están documentados en el archivo de ayuda de TAlignInsertBeforeEvent y TAlignPositionEvent, también se pueden ver CustomAlignInsertBefore y OnAlignInsertBefore)
TAlignInsertBeforeEvent = function(Sender: TWinControl;
C1, C2: TControl): Boolean of object;
TAlignPositionEvent = procedure(Sender: TWinControl; Control: TControl;
var NewLeft, NewTop, NewWidth, NewHeight: Integer;
var AlignRect: TRect; AlignInfo: TAlignInfo) of object;
La documentación contiene muy buenas descripciones de los parámetros a ambos métodos..
En Delphi 2010, estos eventos se publican y aparecen en la pestaña Eventos del Inspector de objetos.
Nunca he visto el problema que tienes, sin embargo ... ¿Trataste de configurar todos en alNone, alejándolos del borde derecho y luego reajustando Align: = alRight en el orden ¿Quieres que aparezcan?
El problema de orden diferente en designtime y tiempo de ejecución puede ocurrir manipulando la visibilidad de estos controles –