Да, вы можете сделать любой тип пользовательского выравнивания. Просто используйте события элемента управления OnAlignInsertBefore () и OnAlignPosition (). (Они существуют в Delphi 2007, но не публикуются, поэтому они не отображаются на вкладке «События» Инспектора объектов; вы все равно можете назначить их в коде. Я показал прототипы ниже; они описаны в файле справки TAlignInsertBeforeEvent и TAlignPositionEvent; вы также можете увидеть CustomAlignInsertBefore и 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;
Документация содержит довольно хорошие описания параметров для обоих методов.
В Delphi 2010 эти события публикуются и отображаются на вкладке «События» Инспектора объектов.
Я никогда не видел проблемы, с которой вы столкнулись, хотя ... Вы пытались установить все из них на alNone, переместить их от правого края, а затем заново установить Align: = alRight в том порядке, хотите, чтобы они появились?